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
(25) |
2
(33) |
3
(25) |
4
(27) |
5
(17) |
|
6
(3) |
7
(18) |
8
(16) |
9
(21) |
10
(14) |
11
(17) |
12
(11) |
|
13
(3) |
14
(24) |
15
(19) |
16
(13) |
17
(16) |
18
(29) |
19
(19) |
|
20
(17) |
21
(27) |
22
(21) |
23
(32) |
24
(19) |
25
(24) |
26
(16) |
|
27
(2) |
28
(21) |
29
(20) |
30
(20) |
31
(2) |
|
|
|
From: <sv...@va...> - 2013-10-23 22:38:52
|
Author: sewardj
Date: Wed Oct 23 22:38:41 2013
New Revision: 13690
Log:
Documentation updates for 3.9.0.
Modified:
branches/VALGRIND_3_9_BRANCH/AUTHORS
branches/VALGRIND_3_9_BRANCH/docs/xml/manual-core.xml
branches/VALGRIND_3_9_BRANCH/docs/xml/vg-entities.xml
branches/VALGRIND_3_9_BRANCH/memcheck/docs/mc-manual.xml
Modified: branches/VALGRIND_3_9_BRANCH/AUTHORS
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/AUTHORS (original)
+++ branches/VALGRIND_3_9_BRANCH/AUTHORS Wed Oct 23 22:38:41 2013
@@ -74,7 +74,10 @@
Dragos Tatulea modified the arm-android port so it also works on
x86-android.
-Jakub Jelinek helped out with the AVX support.
+Jakub Jelinek helped out extensively with the AVX and AVX2 support.
+
+Mark Wielaard fixed a bunch of bugs and acts as our Fedora/RHEL
+liaison.
Many, many people sent bug reports, patches, and helpful feedback.
Modified: branches/VALGRIND_3_9_BRANCH/docs/xml/manual-core.xml
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/docs/xml/manual-core.xml (original)
+++ branches/VALGRIND_3_9_BRANCH/docs/xml/manual-core.xml Wed Oct 23 22:38:41 2013
@@ -1019,6 +1019,69 @@
</listitem>
</varlistentry>
+ <varlistentry id="opt.unw-stack-scan-thresh"
+ xreflabel="--unw-stack-scan-thresh">
+ <term>
+ <option><![CDATA[--unw-stack-scan-thresh=<number> [default: 0] ]]></option>
+ </term>
+ <term>
+ <option><![CDATA[--unw-stack-scan-frames=<number> [default: 5] ]]></option>
+ </term>
+ <listitem>
+ <para>Stack-scanning support is available only on ARM
+ targets.</para>
+
+ <para>These flags enable and control stack unwinding by stack
+ scanning. When the normal stack unwinding mechanisms -- usage
+ of Dwarf CFI records, and frame-pointer following -- fail, stack
+ scanning may be able to recover a stack trace.</para>
+
+ <para>Note that stack scanning is an imprecise, heuristic
+ mechanism that may give very misleading results, or none at all.
+ It should be used only in emergencies, when normal unwinding
+ fails, and it is important to nevertheless have stack
+ traces.</para>
+
+ <para>Stack scanning is a simple technique: the unwinder reads
+ words from the stack, and tries to guess which of them might be
+ return addresses, by checking to see if they point just after
+ ARM or Thumb call instructions. If so, the word is added to the
+ backtrace.</para>
+
+ <para>The main danger occurs when a function call returns,
+ leaving its return address exposed, and a new function is
+ called, but the new function does not overwrite the old address.
+ The result of this is that the backtrace may contain entries for
+ functions which have already returned, and so be very
+ confusing.</para>
+
+ <para>A second limitation of this implementation is that it will
+ scan only the page (4KB, normally) containing the starting stack
+ pointer. If the stack frames are large, this may result in only
+ a few (or not even any) being present in the trace. Also, if
+ you are unlucky and have an initial stack pointer near the end
+ of its containing page, the scan may miss all interesting
+ frames.</para>
+
+ <para>By default stack scanning is disabled. The normal use
+ case is to ask for it when a stack trace would otherwise be very
+ short. So, to enable it,
+ use <computeroutput>--unw-stack-scan-thresh=number</computeroutput>.
+ This requests Valgrind to try using stack scanning to "extend"
+ stack traces which contain fewer
+ than <computeroutput>number</computeroutput> frames.</para>
+
+ <para>If stack scanning does take place, it will only generate
+ at most the number of frames specified
+ by <computeroutput>--unw-stack-scan-frames</computeroutput>.
+ Typically, stack scanning generates so many garbage entries that
+ this value is set to a low value (5) by default. In no case
+ will a stack trace larger than the value specified
+ by <computeroutput>--num-callers</computeroutput> be
+ created.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="opt.error-limit" xreflabel="--error-limit">
<term>
<option><![CDATA[--error-limit=<yes|no> [default: yes] ]]></option>
@@ -1057,17 +1120,19 @@
<option>--quiet</option> is given. The default can always be explicitly
overridden by giving this option.</para>
- <para>When enabled a warning message will be printed with some
- diagnostics whenever some instruction is encountered that valgrind
- cannot decode or translate before the program is given a SIGILL signal.
+ <para>When enabled, a warning message will be printed, along with some
+ diagnostics, whenever an instruction is encountered that Valgrind
+ cannot decode or translate, before the program is given a SIGILL signal.
Often an illegal instruction indicates a bug in the program or missing
- support for the particular instruction in Valgrind. But some programs
+ support for the particular instruction in Valgrind. But some programs
do deliberately try to execute an instruction that might be missing
- and trap the SIGILL signal to detect processor features.</para>
+ and trap the SIGILL signal to detect processor features. Using
+ this flag makes it possible to avoid the diagnostic output
+ that you would otherwise get in such cases.</para>
</listitem>
</varlistentry>
- <varlistentry id="opt.stack-traces" xreflabel="--show-below-main">
+ <varlistentry id="opt.show-below-main" xreflabel="--show-below-main">
<term>
<option><![CDATA[--show-below-main=<yes|no> [default: no] ]]></option>
</term>
@@ -1173,6 +1238,83 @@
</listitem>
</varlistentry>
+ <varlistentry id="opt.debuginfo-server" xreflabel="--debuginfo-server">
+ <term>
+ <option><![CDATA[--debuginfo-server=ipaddr:port [default: undefined and unused]]]></option>
+ </term>
+ <listitem>
+ <para>This is a new, experimental, feature introduced in version
+ 3.9.0.</para>
+
+ <para>In some scenarios it may be convenient to read debuginfo
+ from objects stored on a different machine. With this flag,
+ Valgrind will query a debuginfo server running
+ on <computeroutput>ipaddr</computeroutput> and listening on
+ port <computeroutput>port</computeroutput>, if it cannot find
+ the debuginfo object in the local filesystem.</para>
+
+ <para>The debuginfo server must accept TCP connections on
+ port <computeroutput>port</computeroutput>. The debuginfo
+ server is contained in the source
+ file <computeroutput>auxprogs/valgrind-di-server.c</computeroutput>.
+ It will only serve from the directory it is started
+ in. <computeroutput>port</computeroutput> defaults to 1500 in
+ both client and server if not specified.</para>
+
+ <para>If Valgrind looks for the debuginfo for
+ <computeroutput>/w/x/y/zz.so</computeroutput> by using the
+ debuginfo server, it will strip the pathname components and
+ merely request <computeroutput>zz.so</computeroutput> on the
+ server. That in turn will look only in its current working
+ directory for a matching debuginfo object.</para>
+
+ <para>The debuginfo data is transmitted in small fragments (8
+ KB) as requested by Valgrind. Each block is compressed using
+ LZO to reduce transmission time. The implementation has been
+ tuned for best performance over a single-stage 802.11g (WiFi)
+ network link.</para>
+
+ <para>Note that checks for matching primary vs debug objects,
+ using GNU debuglink CRC scheme, are performed even when using
+ the debuginfo server. To disable such checking, you need to
+ also specify
+ <computeroutput>--allow-mismatched-debuginfo=yes</computeroutput>.
+ </para>
+
+ <para>By default the Valgrind build system will
+ build <computeroutput>valgrind-di-server</computeroutput> for
+ the target platform, which is almost certainly not what you
+ want. So far we have been unable to find out how to get
+ automake/autoconf to build it for the build platform. If
+ you want to use it, you will have to recompile it by hand using
+ the command shown at the top
+ of <computeroutput>auxprogs/valgrind-di-server.c</computeroutput>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id="opt.allow-mismatched-debuginfo"
+ xreflabel="--allow-mismatched-debuginfo">
+ <term>
+ <option><![CDATA[--allow-mismatched-debuginfo=no|yes [no] ]]></option>
+ </term>
+ <listitem>
+ <para>When reading debuginfo from separate debuginfo objects,
+ Valgrind will by default check that the main and debuginfo
+ objects match, using the GNU debuglink mechanism. This
+ guarantees that it does not read debuginfo from out of date
+ debuginfo objects, and also ensures that Valgrind can't crash as
+ a result of mismatches.</para>
+
+ <para>This check can be overridden using
+ <computeroutput>--allow-mismatched-debuginfo=yes</computeroutput>.
+ This may be useful when the debuginfo and main objects have not
+ been split in the proper way. Be careful when using this,
+ though: it disables all consistency checking, and Valgrind has
+ been observed to crash when the main and debuginfo objects don't
+ match.</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry id="opt.suppressions" xreflabel="--suppressions">
<term>
<option><![CDATA[--suppressions=<filename> [default: $PREFIX/lib/valgrind/default.supp] ]]></option>
@@ -1824,14 +1966,16 @@
<option><![CDATA[--merge-recursive-frames=<number> [default: 0] ]]></option>
</term>
<listitem>
- <para>Some recursive algorithms (such as balanced binary tree
- implementations) have the property to create many different
- stack traces, containing cycles of calls. A cycle is defined by
- two identical program counters separated by 0 or more other
- program counters. Valgrind might then use a lot of memory to
- record these stack traces, containing repeated uninteresting
- recursive calls instead of more interesting information such as
- the function that has initiated the recursive call.
+ <para>Some recursive algorithms, for example balanced binary
+ tree implementations, create many different stack traces, each
+ containing cycles of calls. A cycle is defined as two identical
+ program counter values separated by zero or more other program
+ counter values. Valgrind may then use a lot of memory to store
+ all these stack traces. This is a poor use of memory
+ considering that such stack traces contain repeated
+ uninteresting recursive calls instead of more interesting
+ information such as the function that has initiated the
+ recursive call.
</para>
<para>The option <option>--merge-recursive-frames=<number></option>
instructs Valgrind to detect and merge recursive call cycles
@@ -1843,27 +1987,29 @@
The value 0 (the default) causes no recursive call merging.
A value of 1 will cause stack traces of simple recursive algorithms
(for example, a factorial implementation) to be collapsed.
- A value of 2 will usually be needed to collapsed stack traces produced
- by recursive algorithms such as binary trees, quick sort, ...
+ A value of 2 will usually be needed to collapse stack traces produced
+ by recursive algorithms such as binary trees, quick sort, etc.
Higher values might be needed for more complex recursive algorithms.
</para>
- <para>Note: recursive calls are detected based on program counters.
- The cycles are not detected based on function names. </para>
+ <para>Note: recursive calls are detected by analysis of program
+ counter values. They are not detected by looking at function
+ names.</para>
</listitem>
</varlistentry>
<varlistentry id="opt.num-transtab-sectors" xreflabel="--num-transtab-sectors">
<term>
- <option><![CDATA[--num-transtab-sectors=<number> [default: 6 or 16] ]]></option>
+ <option><![CDATA[--num-transtab-sectors=<number> [default: 6
+ for Android platforms, 16 for all others] ]]></option>
</term>
<listitem>
<para>Valgrind translates and instruments your program's machine
code in small fragments. The translations are stored in a
translation cache that is divided into a number of sections
(sectors). If the cache is full, the sector containing the
- oldest translations is emptied and recycled. If these old
+ oldest translations is emptied and reused. If these old
translations are needed again, Valgrind must re-translate and
- re-instrument the corresponding program code, which is
+ re-instrument the corresponding machine code, which is
expensive. If the "executed instructions" working set of a
program is big, increasing the number of sectors may improve
performance by reducing the number of re-translations needed.
Modified: branches/VALGRIND_3_9_BRANCH/docs/xml/vg-entities.xml
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/docs/xml/vg-entities.xml (original)
+++ branches/VALGRIND_3_9_BRANCH/docs/xml/vg-entities.xml Wed Oct 23 22:38:41 2013
@@ -2,12 +2,12 @@
<!ENTITY vg-jemail "ju...@va...">
<!ENTITY vg-vemail "val...@va...">
<!ENTITY cl-email "Jos...@gm...">
-<!ENTITY vg-lifespan "2000-2012">
+<!ENTITY vg-lifespan "2000-2013">
<!-- valgrind release + version stuff -->
<!ENTITY rel-type "Release">
-<!ENTITY rel-version "3.8.0">
-<!ENTITY rel-date "10 August 2012">
+<!ENTITY rel-version "3.9.0">
+<!ENTITY rel-date "31 October 2013">
<!-- where the docs are installed -->
<!ENTITY vg-docs-path "$INSTALL/share/doc/valgrind/html/index.html">
Modified: branches/VALGRIND_3_9_BRANCH/memcheck/docs/mc-manual.xml
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/memcheck/docs/mc-manual.xml (original)
+++ branches/VALGRIND_3_9_BRANCH/memcheck/docs/mc-manual.xml Wed Oct 23 22:38:41 2013
@@ -604,10 +604,10 @@
<para>The option <option>--show-leak-kinds=<set></option>
controls the set of leak kinds to show
-if <option>--leak-check=full</option> is specified. </para>
+when <option>--leak-check=full</option> is specified. </para>
-<para>The <option><set></option> of leak kinds is specified by
-using one of the following forms:
+<para>The <option><set></option> of leak kinds is specified
+in one of the following ways:
<itemizedlist>
<listitem>a comma separated list of one or more of
@@ -617,7 +617,7 @@
<listitem><option>all</option> to specify the complete set (all leak kinds).
</listitem>
- <listitem><option>none</option> is the empty set.
+ <listitem><option>none</option> for the empty set.
</listitem>
</itemizedlist>
@@ -627,12 +627,13 @@
<option>--show-leak-kinds=definite,possible</option>.
</para>
-<para>To also show the reachable and indirectly lost blocks in addition to the definitely
-and possibly lost blocks, you can use <option>--show-leak-kinds=all</option>.
-To only show the reachable and indirectly lost blocks, use
-<option>--show-leak-kinds=indirect,reachable</option>.
-The reachable and indirectly lost blocks will then be presented as the following
-two examples show.</para>
+<para>To also show the reachable and indirectly lost blocks in
+addition to the definitely and possibly lost blocks, you can
+use <option>--show-leak-kinds=all</option>. To only show the
+reachable and indirectly lost blocks, use
+<option>--show-leak-kinds=indirect,reachable</option>. The reachable
+and indirectly lost blocks will then be presented as shown in
+the following two examples.</para>
<programlisting><![CDATA[
64 bytes in 4 blocks are still reachable in loss record 2 of 4
@@ -647,7 +648,7 @@
]]></programlisting>
<para>Because there are different kinds of leaks with different
-severities, an interesting question is this: which leaks should be
+severities, an interesting question is: which leaks should be
counted as true "errors" and which should not?
</para>
@@ -716,8 +717,8 @@
<option><![CDATA[--show-leak-kinds=<set> [default: definite,possible] ]]></option>
</term>
<listitem>
- <para>Specifies the leak kinds to show in a full leak search by
- using one of the following forms:
+ <para>Specifies the leak kinds to show in a full leak search, in
+ one of the following ways:
<itemizedlist>
<listitem>a comma separated list of one or more of
@@ -729,7 +730,7 @@
<option>--show-leak-kinds=definite,indirect,possible,reachable</option>.
</listitem>
- <listitem><option>none</option> is the empty set.
+ <listitem><option>none</option> for the empty set.
</listitem>
</itemizedlist>
</para>
@@ -755,10 +756,11 @@
<option><![CDATA[--leak-check-heuristics=<set> [default: none] ]]></option>
</term>
<listitem>
- <para>Specifies the leak check heuristics to use during leak search
- to discover interior pointers with which a block should be considered
- as reachable. The heuristic set is specified by using one of the
- following forms:
+ <para>Specifies the set of leak check heuristics to be used
+ during
+ leak searches. The heuristics control which interior pointers
+ to a block cause it to be considered as reachable.
+ The heuristic set is specified in one of the following ways:
<itemizedlist>
<listitem>a comma separated list of one or more of
@@ -771,7 +773,7 @@
<option>--leak-check-heuristics=stdstring,newarray,multipleinheritance</option>.
</listitem>
- <listitem><option>none</option> is the empty set.
+ <listitem><option>none</option> for the empty set.
</listitem>
</itemizedlist>
</para>
@@ -886,8 +888,8 @@
<option><![CDATA[--partial-loads-ok=<yes|no> [default: no] ]]></option>
</term>
<listitem>
- <para>Controls how Memcheck handles word-sized,
- word-aligned loads from addresses for which some bytes are
+ <para>Controls how Memcheck handles 32-, 64-, 128- and 256-bit
+ naturally aligned loads from addresses for which some bytes are
addressable and others are not. When <varname>yes</varname>, such
loads do not produce an address error. Instead, loaded bytes
originating from illegal addresses are marked as uninitialised, and
@@ -915,46 +917,47 @@
free'd blocks.
</para>
- <para>With <varname>alloc-then-free</varname>, the malloc stack
- trace is recorded at allocation time. The block contains a
- reference to this allocation stack trace. When the block is
- freed, the block will then reference the free stack trace. So,
- a 'use after free' error will only report the free stack trace.
+ <para>With <varname>alloc-then-free</varname>, a stack trace is
+ recorded at allocation time, and is associated with the block.
+ When the block is freed, a second stack trace is recorded, and
+ this replaces the allocation stack trace. As a result, any "use
+ after free" errors relating to this block can only show a stack
+ trace for where the block was freed.
</para>
- <para>With <varname>alloc-and-free</varname>, both the malloc
- and the free stack trace (for freed block) are recorded and
- referenced by the block. A 'use after free' error will report
- the free stack trace, followed by the stack trace where this
- block was allocated. Compared
- to <varname>alloc-then-free</varname>, this value very slightly
- increases Valgrind memory use as the block contains two references
- instead of one.
+ <para>With <varname>alloc-and-free</varname>, both allocation
+ and the deallocation stack traces for the block are stored.
+ Hence a "use after free" error will
+ show both, which may make the error easier to diagnose.
+ Compared to <varname>alloc-then-free</varname>, this setting
+ slightly increases Valgrind's memory use as the block contains two
+ references instead of one.
</para>
- <para>With <varname>alloc</varname>, only the malloc stack trace
- is recorded (and reported). With <varname>free</varname>, only
- the free stack trace is recorded (and reported). These values
- somewhat decrease Valgrind memory and cpu usage. They can be
- useful depending on the error types you are searching for and
- the level of details you need to analyse them. For example, if
- you are only interested in memory leak errors, it is sufficient
- to record the allocation stack traces.
+ <para>With <varname>alloc</varname>, only the allocation stack
+ trace is recorded (and reported). With <varname>free</varname>,
+ only the deallocation stack trace is recorded (and reported).
+ These values somewhat decrease Valgrind's memory and cpu usage.
+ They can be useful depending on the error types you are
+ searching for and the level of detail you need to analyse
+ them. For example, if you are only interested in memory leak
+ errors, it is sufficient to record the allocation stack traces.
</para>
<para>With <varname>none</varname>, no stack traces are recorded
for malloc and free operations. If your program allocates a lot
- of blocks and/or from many different stack traces, this can
- significantly decrease cpu and/or memory. Of course, very little
- details will be reported for errors related to heap blocks.
+ of blocks and/or allocates/frees from many different stack
+ traces, this can significantly decrease cpu and/or memory
+ required. Of course, few details will be reported for errors
+ related to heap blocks.
</para>
- <para> Note that once a stack trace is recorded, Valgrind keeps
- the stack trace in memory even if not referenced anymore by
- any block. Some programs (for example, recursive algorithms)
- can generate a huge number of stack traces. If Valgrind uses too
+ <para>Note that once a stack trace is recorded, Valgrind keeps
+ the stack trace in memory even if it is not referenced by any
+ block. Some programs (for example, recursive algorithms) can
+ generate a huge number of stack traces. If Valgrind uses too
much memory in such circumstances, you can reduce the memory
- usage with the options <varname>--keep-stacktraces</varname>
+ required with the options <varname>--keep-stacktraces</varname>
and/or by using a smaller value for the
option <varname>--num-callers</varname>.
</para>
|
|
From: <sv...@va...> - 2013-10-23 20:39:54
|
Author: philippe
Date: Wed Oct 23 20:39:43 2013
New Revision: 13689
Log:
Minor updates in 3.9.0 NEWS
Small fixes
Moved a functionality non memcheck specific to another section
Modified:
branches/VALGRIND_3_9_BRANCH/NEWS
Modified: branches/VALGRIND_3_9_BRANCH/NEWS
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/NEWS (original)
+++ branches/VALGRIND_3_9_BRANCH/NEWS Wed Oct 23 20:39:43 2013
@@ -1,7 +1,7 @@
Release 3.9.0 (XX October 2013)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-3.8.0 is a feature release with many improvements and the usual
+3.9.0 is a feature release with many improvements and the usual
collection of bug fixes.
This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux,
@@ -53,8 +53,8 @@
of valid interior pointers to std::stdstring, to new[] allocated
arrays with elements having destructors and to interior pointers
pointing to an inner part of a C++ object using multiple
- inheritance. They can be selected individually using the option
- The option --leak-check-heuristics=heur1,heur2,...
+ inheritance. They can be selected individually using the
+ option --leak-check-heuristics=heur1,heur2,...
- Better control of stacktrace acquisition for heap-allocated
blocks. Using the --keep-stacktraces option, it is possible to
@@ -68,11 +68,6 @@
each leak suppressions, how many blocks and bytes it suppressed
during the last leak search.
- - Line numbers for used suppressions. The list of used suppressions
- (shown when the -v option is given) now shows, for each used
- suppression, the file name and line number where the suppression
- is defined.
-
* Helgrind:
- False errors resulting from the use of statically initialised
@@ -132,6 +127,11 @@
line option --merge-recursive-frame and by the monitor command
"v.set merge-recursive-frames".
+* File name and line numbers for used suppressions. The list of used
+ suppressions (shown when the -v option is given) now shows, for each
+ used suppression, the file name and line number where the suppression
+ is defined.
+
* New and modified GDB server monitor features:
- valgrind.h has a new client request, VALGRIND_MONITOR_COMMAND,
|
|
From: <sv...@va...> - 2013-10-23 16:23:42
|
Author: cborntra
Date: Wed Oct 23 16:23:30 2013
New Revision: 13688
Log:
We need to have the host code close to the generated code to improve
branch prediction performance on some s390 systems. This change will
move valgrind text close to the initial aspace start for valgrind
allocations.
Modified:
trunk/configure.ac
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Wed Oct 23 16:23:30 2013
@@ -564,9 +564,10 @@
VGCONF_ARCH_SEC=""
VGCONF_PLATFORM_PRI_CAPS="S390X_LINUX"
VGCONF_PLATFORM_SEC_CAPS=""
- # we want to have the generated code close to the dispatcher
- valt_load_address_pri_norml="0x401000000"
- valt_load_address_pri_inner="0x410000000"
+ # To improve branch prediction hit rate we want to have
+ # the generated code close to valgrind (host) code
+ valt_load_address_pri_norml="0x800000000"
+ valt_load_address_pri_inner="0x810000000"
valt_load_address_sec_norml="0xUNSET"
valt_load_address_sec_inner="0xUNSET"
AC_MSG_RESULT([ok (${ARCH_MAX}-${VGCONF_OS})])
|
|
From: <sv...@va...> - 2013-10-23 14:07:27
|
Author: dejanj
Date: Wed Oct 23 14:07:15 2013
New Revision: 13687
Log:
mips32: Change the tests values so that the result is
the same on all mips32 platforms. Add extra cases in
vbit-test for mips32.
Added:
trunk/none/tests/mips32/mips32_dsp.stdout.exp-LE
Modified:
trunk/memcheck/tests/vbit-test/irops.c
trunk/none/tests/mips32/Makefile.am
trunk/none/tests/mips32/mips32_dsp.c
trunk/none/tests/mips32/mips32_dsp.stdout.exp
trunk/none/tests/mips32/mips32_dsp.stdout.exp-BE
trunk/none/tests/mips32/mips32_dspr2.c
trunk/none/tests/mips32/mips32_dspr2.stdout.exp
Modified: trunk/memcheck/tests/vbit-test/irops.c
==============================================================================
--- trunk/memcheck/tests/vbit-test/irops.c (original)
+++ trunk/memcheck/tests/vbit-test/irops.c Wed Oct 23 14:07:15 2013
@@ -10,30 +10,30 @@
That is not necessary but helpful when supporting a new architecture.
*/
static irop_t irops[] = {
- { DEFOP(Iop_Add8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
- { DEFOP(Iop_Add16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_Add8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_Add16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Add32, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Add64, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_Sub8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_Sub16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_Sub8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_Sub16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Sub32, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Sub64, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
{ DEFOP(Iop_Mul8, UNDEF_LEFT), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_Mul16, UNDEF_LEFT), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_Mul32, UNDEF_LEFT), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Mul64, UNDEF_LEFT), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_Or8, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
- { DEFOP(Iop_Or16, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_Or8, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_Or16, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Or32, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Or64, UNDEF_OR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_And8, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
- { DEFOP(Iop_And16, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_And8, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_And16, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_And32, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_And64, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_Xor8, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
- { DEFOP(Iop_Xor16, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_And64, UNDEF_AND), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_Xor8, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_Xor16, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Xor32, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_Xor64, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_Xor64, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Shl8, UNDEF_SHL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_Shl16, UNDEF_SHL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_Shl32, UNDEF_SHL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
@@ -47,7 +47,7 @@
{ DEFOP(Iop_Sar32, UNDEF_SAR), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Sar64, UNDEF_SAR), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 1, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32 asserts
{ DEFOP(Iop_CmpEQ8, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_CmpEQ16, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_CmpEQ16, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_CmpEQ32, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_CmpEQ64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
{ DEFOP(Iop_CmpNE8, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
@@ -57,7 +57,7 @@
{ DEFOP(Iop_Not8, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Not16, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_Not32, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_Not64, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_Not64, UNDEF_SAME), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_CasCmpEQ8, UNDEF_NONE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_CasCmpEQ16, UNDEF_NONE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_CasCmpEQ32, UNDEF_NONE), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
@@ -76,23 +76,23 @@
{ DEFOP(Iop_MullS32, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
// s390 has signed multiplication of 64-bit values but the result
// is 64-bit (not 128-bit). So we cannot test this op standalone.
- { DEFOP(Iop_MullS64, UNDEF_LEFT), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_MullU8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_MullU16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_MullU32, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_MullU64, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_Clz64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32 asserts
- { DEFOP(Iop_Clz32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_Ctz64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_Ctz32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_CmpLT32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_CmpLT64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc, mips assert
- { DEFOP(Iop_CmpLE32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_CmpLE64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc, mips assert
- { DEFOP(Iop_CmpLT32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_CmpLT64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_CmpLE32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
- { DEFOP(Iop_CmpLE64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // ppc32 asserts
+ { DEFOP(Iop_MullS64, UNDEF_LEFT), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc32, mips assert
+ { DEFOP(Iop_MullU8, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0 },
+ { DEFOP(Iop_MullU16, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0 },
+ { DEFOP(Iop_MullU32, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_MullU64, UNDEF_LEFT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc32, mips assert
+ { DEFOP(Iop_Clz64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc32 asserts
+ { DEFOP(Iop_Clz32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 },
+ { DEFOP(Iop_Ctz64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0 },
+ { DEFOP(Iop_Ctz32, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 0 },
+ { DEFOP(Iop_CmpLT32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 },
+ { DEFOP(Iop_CmpLT64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc, mips assert
+ { DEFOP(Iop_CmpLE32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 },
+ { DEFOP(Iop_CmpLE64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc, mips assert
+ { DEFOP(Iop_CmpLT32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 },
+ { DEFOP(Iop_CmpLT64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 1 }, // ppc32, mips assert
+ { DEFOP(Iop_CmpLE32U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 =1, .mips64 = 1 },
+ { DEFOP(Iop_CmpLE64U, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 =0, .mips64 = 0 }, // ppc32 asserts
{ DEFOP(Iop_CmpNEZ8, UNDEF_ALL), }, // not supported by mc_translate
{ DEFOP(Iop_CmpNEZ16, UNDEF_ALL), }, // not supported by mc_translate
{ DEFOP(Iop_CmpNEZ32, UNDEF_ALL), }, // not supported by mc_translate
@@ -118,8 +118,8 @@
{ DEFOP(Iop_DivS32E, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
// On s390 the DivMod operations always appear in a certain context
// So they cannot be tested in isolation on that platform.
- { DEFOP(Iop_DivModU64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_DivModS64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_DivModU64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_DivModS64to32, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_DivModU128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_DivModS128to64, UNDEF_ALL), .s390x = 0, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_DivModS64to64, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // mips asserts
@@ -129,20 +129,20 @@
{ DEFOP(Iop_16Uto32, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_16Uto64, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32 assert
{ DEFOP(Iop_32Uto64, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_8Sto16, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_8Sto16, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_8Sto32, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_8Sto64, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
{ DEFOP(Iop_16Sto32, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_16Sto64, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
{ DEFOP(Iop_32Sto64, UNDEF_SEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_64to8, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 1, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_32to8, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_32to8, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_64to16, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_16to8, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_16HIto8, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_16to8, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_16HIto8, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_8HLto16, UNDEF_CONCAT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 }, // ppc isel
{ DEFOP(Iop_32to16, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_32HIto16, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 1 },
+ { DEFOP(Iop_32HIto16, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_16HLto32, UNDEF_CONCAT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 }, // ppc isel
{ DEFOP(Iop_64to32, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_64HIto32, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 },
@@ -151,15 +151,15 @@
{ DEFOP(Iop_128HIto64, UNDEF_UPPER), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_64HLto128, UNDEF_CONCAT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_Not1, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_32to1, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_32to1, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_64to1, UNDEF_TRUNC), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32, mips assert
- { DEFOP(Iop_1Uto8, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_1Uto8, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_1Uto32, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_1Uto64, UNDEF_ZEXT), .s390x = 1, .amd64 = 1, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 0, .mips32 = 0, .mips64 = 1 }, // ppc32 assert
- { DEFOP(Iop_1Sto8, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_1Sto8, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_1Sto16, UNDEF_ALL), }, // not handled by mc_translate
- { DEFOP(Iop_1Sto32, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
- { DEFOP(Iop_1Sto64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_1Sto32, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
+ { DEFOP(Iop_1Sto64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_AddF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_SubF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_MulF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
@@ -178,11 +178,11 @@
{ DEFOP(Iop_AbsF32, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 1, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_SqrtF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
{ DEFOP(Iop_SqrtF32, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 1, .ppc64 = 0, .ppc32 = 0, .mips32 = 1, .mips64 = 1 },
- { DEFOP(Iop_CmpF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_CmpF64, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_CmpF32, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 }, // mips asserts
{ DEFOP(Iop_CmpF128, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_F64toI16S, UNDEF_ALL), .s390x = 0, .amd64 = 0, .x86 = 1, .arm = 0, .ppc64 = 0, .ppc32 = 0, .mips32 = 0, .mips64 = 0 },
- { DEFOP(Iop_F64toI32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 1 }, // mips asserts
+ { DEFOP(Iop_F64toI32S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 1, .mips64 = 1 },
{ DEFOP(Iop_F64toI64S, UNDEF_ALL), .s390x = 1, .amd64 = 1, .x86 = 1, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_F64toI64U, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 0, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
{ DEFOP(Iop_F64toI32U, UNDEF_ALL), .s390x = 1, .amd64 = 0, .x86 = 0, .arm = 1, .ppc64 = 1, .ppc32 = 1, .mips32 = 0, .mips64 = 0 },
Modified: trunk/none/tests/mips32/Makefile.am
==============================================================================
--- trunk/none/tests/mips32/Makefile.am (original)
+++ trunk/none/tests/mips32/Makefile.am Wed Oct 23 14:07:15 2013
@@ -24,7 +24,7 @@
SignalException.stderr.exp SignalException.vgtest \
bug320057-mips32.stdout.exp bug320057-mips32.stderr.exp \
bug320057-mips32.vgtest \
- mips32_dsp.stdout.exp mips32_dsp.stdout.exp-BE \
+ mips32_dsp.stdout.exp-LE mips32_dsp.stdout.exp-BE \
mips32_dsp.stderr.exp mips32_dsp.vgtest \
mips32_dspr2.stdout.exp mips32_dspr2.stderr.exp \
mips32_dspr2.vgtest \
Modified: trunk/none/tests/mips32/mips32_dsp.c
==============================================================================
--- trunk/none/tests/mips32/mips32_dsp.c (original)
+++ trunk/none/tests/mips32/mips32_dsp.c Wed Oct 23 14:07:15 2013
@@ -566,14 +566,14 @@
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t2, $t3", 0x0555adec, t2, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t4, $t1", 0x980b7cde, t4, t1);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t6, $t7", 0xf973437b, t6, t7);
- TESTDSPINST_RD_RT_DSPC("absq_s.ph $t5, $t3", 0x93474bde, t5, t3);
+ TESTDSPINST_RD_RT_DSPC("absq_s.ph $t5, $t3", 0x23c54b6e, t5, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t2, $t4", 0x55555555, t2, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t0, $t8", 0xc4dbfe20, t0, t8);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t4, $t4", 0x734680bc, t4, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t0, $t1", 0x00354565, t0, t1);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t2, $t3", 0xbacabaca, t2, t3);
- TESTDSPINST_RD_RT_DSPC("absq_s.ph $t4, $t1", 0xdecadeca, t4, t1);
- TESTDSPINST_RD_RT_DSPC("absq_s.ph $t6, $t7", 0x00000286, t6, t7);
+ TESTDSPINST_RD_RT_DSPC("absq_s.ph $t4, $t1", 0xdba38ec9, t4, t1);
+ TESTDSPINST_RD_RT_DSPC("absq_s.ph $t6, $t7", 0x0b300286, t6, t7);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t5, $t3", 0xabababab, t5, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t2, $t4", 0x00086755, t2, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.ph $t0, $t8", 0x8f8f8f80, t0, t8);
@@ -612,14 +612,14 @@
TESTDSPINST_RD_RT_DSPC("absq_s.w $t2, $t3", 0x0555adec, t2, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t4, $t1", 0x980b7cde, t4, t1);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t6, $t7", 0xf973437b, t6, t7);
- TESTDSPINST_RD_RT_DSPC("absq_s.w $t5, $t3", 0x93474bde, t5, t3);
+ TESTDSPINST_RD_RT_DSPC("absq_s.w $t5, $t3", 0x23c54b6e, t5, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t2, $t4", 0x55555555, t2, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t0, $t8", 0xc4dbfe20, t0, t8);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t4, $t4", 0x734680bc, t4, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t0, $t1", 0x00354565, t0, t1);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t2, $t3", 0xbacabaca, t2, t3);
- TESTDSPINST_RD_RT_DSPC("absq_s.w $t4, $t1", 0xdecadeca, t4, t1);
- TESTDSPINST_RD_RT_DSPC("absq_s.w $t6, $t7", 0x00000286, t6, t7);
+ TESTDSPINST_RD_RT_DSPC("absq_s.w $t4, $t1", 0xdba38ec9, t4, t1);
+ TESTDSPINST_RD_RT_DSPC("absq_s.w $t6, $t7", 0x0b300286, t6, t7);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t5, $t3", 0xabababab, t5, t3);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t2, $t4", 0x00086755, t2, t4);
TESTDSPINST_RD_RT_DSPC("absq_s.w $t0, $t8", 0x8f8f8f80, t0, t8);
@@ -656,11 +656,11 @@
t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t5, $t3, $t2", 0xf973437b, 0x80000000,
t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t2, $t4, $t8", 0x00010001, 0xffffffff,
+ TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t2, $t4, $t8", 0x00010001, 0xfa3259ff,
t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
+ TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t0, $t8, $t0", 0x7fff7322, 0x77ff7fff,
t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t4, $t6, $t1", 0x0000c420, 0x00000555,
+ TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t4, $t6, $t1", 0x0034c420, 0x00000555,
t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t2, $t3, $t4", 0x00000004, 1073741824,
t2, t3, t4);
@@ -668,7 +668,7 @@
t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t6, $t7, $t3", 0x76548000, 0x73468000,
t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t5, $t3, $t2", 0x80000000, 0x80000000,
+ TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t5, $t3, $t2", 0x80000000, 0x80620020,
t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t2, $t4, $t8", 0x00010001, 0xffffffff,
t2, t4, t8);
@@ -676,7 +676,7 @@
t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t4, $t6, $t1", 0x0000c420, 0x00000555,
t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t0, $t1, $t2", 0x00000000, 0x00000000,
+ TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t0, $t1, $t2", 0x000a2300, 0x83bc1900,
t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq.ph $t2, $t3, $t4", 0x80000000, 0x80000000,
t2, t3, t4);
@@ -727,494 +727,504 @@
printf("-------- ADDQ_S.PH --------\n");
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x00045fb2, 0x00000286,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x00002435, 0xffff3421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x07654cb8, 0x734680bc,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0xf973437b, 0x80000000,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x00000004, 1073741824,
- t2, t3, t4);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x80002435, 0x80003421,
- t4, t1, t5);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x76548000, 0x73468000,
- t6, t7, t3);
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x00010001, 0xfa3259ff,
+ t0, t1, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x7fff7322, 0x77ff7fff,
+ t2, t3, t4);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x0034c420, 0x00000555,
+ t4, t1, t5);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x00000004, 1073741824,
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x80002435, 0x80003421,
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x76548000, 0x73468000,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x80000000, 0x80620020,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x00010001, 0xffffffff,
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x7fff7fff, 0x7fff7fff,
+ t2, t3, t4);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x0000c420, 0x00000555,
+ t4, t1, t5);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x000a2300, 0x83bc1900,
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x80000000, 0x80000000,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x80000000, 0x80000000,
- t2, t3, t4);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0xaaaaaaaa, 0x55555555,
- t4, t1, t5);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x00000018, 0xffff2435,
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0xaaaaaaaa, 0x55555555,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x00000018, 0xffff2435,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0xbabababa, 0xabababab,
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0xf0f0f0f0, 0xfc79b4d2,
+ t0, t1, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0xfbde3976, 0x00000000,
+ t2, t3, t4);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x23534870, 0x00354565,
+ t4, t1, t5);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x980b7cde, 0x00086755,
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x00000018, 0x8f8f8f8f,
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x92784656, 0xeeeeeeee,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0xcacacaca, 0x1bdbdbdb,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0xbacabaca, 0xdecadeca,
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x12fadeb4, 0x93474bde,
+ t0, t1, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x7c000790, 0xfc0007ff,
+ t2, t3, t4);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0xffffffff, 0xffffffff,
+ t4, t1, t5);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0xf2f4df1f, 0xcb4ab48f,
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x435f909a, 0xaf8f7e18,
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x2106ba5f, 0x87df4510,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x246a6376, 0xabf4e8e1,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x1046a1a3, 0xf4c0eeac,
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x638ca515, 0x006a54f2,
+ t0, t1, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0xf63e7a9d, 0x79f74493,
+ t2, t3, t4);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0xbd6845cd, 0x9c09e313,
+ t4, t1, t5);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x234ba291, 0xbb64981c,
t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0xbabababa, 0xabababab,
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x120934de, 0xad2c7601,
t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0xf0f0f0f0, 0xfc79b4d2,
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0xf5643908, 0xbaff3492,
t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0xfbde3976, 0x00000000,
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x88503331, 0xd60e34a2,
t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x23534870, 0x00354565,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0x980b7cde, 0x00086755,
- t0, t1, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x00000018, 0x8f8f8f8f,
- t2, t3, t4);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x92784656, 0xeeeeeeee,
- t4, t1, t5);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0xcacacaca, 0x1bdbdbdb,
- t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0xbacabaca, 0xdecadeca,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x12fadeb4, 0x93474bde,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0x7c000790, 0xfc0007ff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0xffffffff, 0xffffffff,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t1, $t2", 0xf2f4df1f, 0xcb4ab48f,
- t0, t1, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t3, $t4", 0x435f909a, 0xaf8f7e18,
- t2, t3, t4);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t1, $t5", 0x2106ba5f, 0x87df4510,
- t4, t1, t5);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t6, $t7, $t3", 0x246a6376, 0xabf4e8e1,
- t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t5, $t3, $t2", 0x1046a1a3, 0xf4c0eeac,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t2, $t4, $t8", 0x638ca515, 0x006a54f2,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t0, $t8, $t0", 0xf63e7a9d, 0x79f74493,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0xbd6845cd, 0x9c09e313,
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.ph $t4, $t6, $t1", 0x7b5309ac, 0xc5487201,
t4, t6, t1);
printf("-------- ADDQ_S.W --------\n");
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t3, $t4", 0x00045fb2, 0x00000286,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t1, $t5", 0x00002435, 0xffff3421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t6, $t7, $t3", 0x07654cb8, 0x734680bc,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0xf973437b, 0x80000000,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0x00010001, 0xfa3259ff,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0x7fff7322, 0x77ff7fff,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0x0034c420, 0x00000555,
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t3, $t4", 0x00000004, 1073741824,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t1, $t5", 0x80002435, 0x80003421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t6, $t7, $t3", 0x76548000, 0x73468000,
- t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0x80000000, 0x80000000,
- t5, t3, t2);
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0x80000000, 0x80620020,
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t1, $t2", 0x000a2300, 0x83bc1900,
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t3, $t4", 0x80000000, 0x80000000,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t1, $t5", 0xaaaaaaaa, 0x55555555,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t6, $t7, $t3", 0x00000018, 0xffff2435,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0xbabababa, 0xabababab,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0xf0f0f0f0, 0xfc79b4d2,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0xfbde3976, 0x00000000,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0x23534870, 0x00354565,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t1, $t2", 0x980b7cde, 0x00086755,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t3, $t4", 0x00000018, 0x8f8f8f8f,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t1, $t5", 0x92784656, 0xeeeeeeee,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t6, $t7, $t3", 0xcacacaca, 0x1bdbdbdb,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0xbacabaca, 0xdecadeca,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0x12fadeb4, 0x93474bde,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0x7c000790, 0xfc0007ff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0xffffffff, 0xffffffff,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t1, $t2", 0xf2f4df1f, 0xcb4ab48f,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t3, $t4", 0x435f909a, 0xaf8f7e18,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t1, $t5", 0x2106ba5f, 0x87df4510,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t6, $t7, $t3", 0x246a6376, 0xabf4e8e1,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t5, $t3, $t2", 0x1046a1a3, 0xf4c0eeac,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t2, $t4, $t8", 0x638ca515, 0x006a54f2,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t0, $t8, $t0", 0xf63e7a9d, 0x79f74493,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addq_s.w $t4, $t6, $t1", 0xbd6845cd, 0x9c09e313,
t4, t6, t1);
printf("-------- ADDSC --------\n");
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t3, $t4", 0x00045fb2, 0x00000286,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t1, $t5", 0x00002435, 0xffff3421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t6, $t7, $t3", 0x07654cb8, 0x734680bc,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0xf973437b, 0x80000000,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0x00010001, 0xfa3259ff,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0x7fff7322, 0x77ff7fff,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0x0034c420, 0x00000555,
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t3, $t4", 0x00000004, 1073741824,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t1, $t5", 0x80002435, 0x80003421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t6, $t7, $t3", 0x76548000, 0x73468000,
- t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0x80000000, 0x80000000,
- t5, t3, t2);
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0x80000000, 0x80620020,
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t1, $t2", 0x000a2300, 0x83bc1900,
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t3, $t4", 0x80000000, 0x80000000,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t1, $t5", 0xaaaaaaaa, 0x55555555,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t6, $t7, $t3", 0x00000018, 0xffff2435,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0xbabababa, 0xabababab,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0xf0f0f0f0, 0xfc79b4d2,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0xfbde3976, 0x00000000,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0x23534870, 0x00354565,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t1, $t2", 0x980b7cde, 0x00086755,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t3, $t4", 0x00000018, 0x8f8f8f8f,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t1, $t5", 0x92784656, 0xeeeeeeee,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t6, $t7, $t3", 0xcacacaca, 0x1bdbdbdb,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0xbacabaca, 0xdecadeca,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0x12fadeb4, 0x93474bde,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0x7c000790, 0xfc0007ff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0xffffffff, 0xffffffff,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t1, $t2", 0xf2f4df1f, 0xcb4ab48f,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t3, $t4", 0x435f909a, 0xaf8f7e18,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t1, $t5", 0x2106ba5f, 0x87df4510,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t6, $t7, $t3", 0x246a6376, 0xabf4e8e1,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t5, $t3, $t2", 0x1046a1a3, 0xf4c0eeac,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t2, $t4, $t8", 0x638ca515, 0x006a54f2,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t0, $t8, $t0", 0xf63e7a9d, 0x79f74493,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addsc $t4, $t6, $t1", 0xbd6845cd, 0x9c09e313,
t4, t6, t1);
printf("-------- ADDU.QB --------\n");
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t3, $t4", 0x00045fb2, 0x00000286,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t1, $t5", 0x00002435, 0xffff3421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t6, $t7, $t3", 0x07654cb8, 0x734680bc,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0xf973437b, 0x80000000,
- t5, t3, t2);
- TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
- TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
- TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
+ t5, t3, t2);
+ TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0x00010001, 0xfa3259ff,
+ t2, t4, t8);
+ TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t8, $t0", 0x7fff7322, 0x77ff7fff,
+ t0, t8, t0);
+ TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t6, $t1", 0x0034c420, 0x00000555,
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t3, $t4", 0x00000004, 1073741824,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t1, $t5", 0x80002435, 0x80003421,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t6, $t7, $t3", 0x76548000, 0x73468000,
- t6, t7, t3);
- TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0x80000000, 0x80000000,
- t5, t3, t2);
+ t6, t7, t3);
+ TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0x80000000, 0x80620020,
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0x00010001, 0xffffffff,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t8, $t0", 0x7fff7fff, 0x7fff7fff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t6, $t1", 0x0000c420, 0x00000555,
- t4, t6, t1);
- TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t1, $t2", 0x00000000, 0x00000000,
- t0, t1, t2);
+ t4, t6, t1);
+ TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t1, $t2", 0x000a2300, 0x83bc1900,
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t3, $t4", 0x80000000, 0x80000000,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t1, $t5", 0xaaaaaaaa, 0x55555555,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t6, $t7, $t3", 0x00000018, 0xffff2435,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0xbabababa, 0xabababab,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0xf0f0f0f0, 0xfc79b4d2,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t8, $t0", 0xfbde3976, 0x00000000,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t6, $t1", 0x23534870, 0x00354565,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t1, $t2", 0x980b7cde, 0x00086755,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t3, $t4", 0x00000018, 0x8f8f8f8f,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t1, $t5", 0x92784656, 0xeeeeeeee,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t6, $t7, $t3", 0xcacacaca, 0x1bdbdbdb,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0xbacabaca, 0xdecadeca,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0x12fadeb4, 0x93474bde,
- t2, t4, t8);
+ t2, t4, t8);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t8, $t0", 0x7c000790, 0xfc0007ff,
- t0, t8, t0);
+ t0, t8, t0);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t6, $t1", 0xffffffff, 0xffffffff,
- t4, t6, t1);
+ t4, t6, t1);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t0, $t1, $t2", 0xf2f4df1f, 0xcb4ab48f,
- t0, t1, t2);
+ t0, t1, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t3, $t4", 0x435f909a, 0xaf8f7e18,
- t2, t3, t4);
+ t2, t3, t4);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t4, $t1, $t5", 0x2106ba5f, 0x87df4510,
- t4, t1, t5);
+ t4, t1, t5);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t6, $t7, $t3", 0x246a6376, 0xabf4e8e1,
- t6, t7, t3);
+ t6, t7, t3);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t5, $t3, $t2", 0x1046a1a3, 0xf4c0eeac,
- t5, t3, t2);
+ t5, t3, t2);
TESTDSPINST_RD_RS_RT_DSPC("addu.qb $t2, $t4, $t8", 0x638ca515, 0x006a54f2,
- t2, t4, t8);
+ t2, t4, t8...
[truncated message content] |
|
From: <sv...@va...> - 2013-10-23 14:05:31
|
Author: dejanj
Date: Wed Oct 23 14:05:15 2013
New Revision: 2796
Log:
mips32: Fix problem with some mips32 dsp instructions.
This patch includes VEX optimizations for mips32 and
fixes for some mips32 dsp instructions.
Modified:
trunk/priv/guest_mips_toIR.c
trunk/priv/host_mips_defs.c
trunk/priv/host_mips_isel.c
Modified: trunk/priv/guest_mips_toIR.c
==============================================================================
--- trunk/priv/guest_mips_toIR.c (original)
+++ trunk/priv/guest_mips_toIR.c Wed Oct 23 14:05:15 2013
@@ -2123,7 +2123,7 @@
UInt size;
assign(tmpRs, getIReg(regRs));
- switch(opc2) {
+ switch(opc2) {
case 0x03: { /* DMUL rd, rs, rt */
DIP("dmul r%d, r%d, r%d", regRd, regRs, regRt);
IRType t0 = newTemp(Ity_I128);
@@ -2132,7 +2132,7 @@
break;
}
case 0x32: /* 5. CINS rd, rs, p, lenm1 */
- DIP("cins r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
+ DIP("cins r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
assign ( tmp , binop(Iop_Shl64, mkexpr(tmpRs), mkU8(64-( lenM1+1 ))));
assign ( tmpRt, binop(Iop_Shr64, mkexpr( tmp ), mkU8(64-(p+lenM1+1))));
putIReg( regRt, mkexpr(tmpRt));
@@ -2146,7 +2146,7 @@
break;
case 0x3A: /* 3. EXTS rt, rs, p len */
- DIP("exts r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
+ DIP("exts r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
size = lenM1 + 1; /* lenm1+1 */
UChar lsAmt = 64 - (p + size); /* p+lenm1+1 */
UChar rsAmt = 64 - size; /* lenm1+1 */
@@ -2156,7 +2156,7 @@
break;
case 0x3B: /* 4. EXTS32 rt, rs, p len */
- DIP("exts32 r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
+ DIP("exts32 r%u, r%u, %d, %d\n", regRt, regRs, p, lenM1);
assign ( tmp , binop(Iop_Shl64, mkexpr(tmpRs), mkU8(32-(p+lenM1+1))));
assign ( tmpRt, binop(Iop_Sar64, mkexpr(tmp) , mkU8(64-(lenM1+1))) );
putIReg( regRt, mkexpr(tmpRt));
@@ -2223,7 +2223,7 @@
static UInt disDSPInstr_MIPS_WRK ( UInt cins )
{
IRTemp t0, t1 = 0, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14,
- t15, t16, t17, t18;
+ t15, t16, t17;
UInt opcode, rs, rt, rd, sa, function, ac, ac_mfhilo, rddsp_mask,
wrdsp_mask, dsp_imm, shift;
@@ -2875,40 +2875,123 @@
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
t2 = newTemp(Ity_I32);
- t3 = newTemp(Ity_I32);
- t4 = newTemp(Ity_I32);
+ t3 = newTemp(Ity_I1);
+ t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
+ t7 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
assign(t0, getAcc(ac));
- assign(t1, binop(Iop_Sar64, mkexpr(t0), mkU8(rs)));
- putIReg(rt, unop(Iop_64to32, mkexpr(t1)));
+ if (0 == rs) {
+ assign(t1, mkexpr(t0));
+ } else {
+ assign(t1, binop(Iop_Sar64, mkexpr(t0), mkU8(rs)));
+ }
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
+ assign(t4, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
- assign(t2, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
+ /* If the last discarded bit is 1, there would be carry
+ when rounding, otherwise there wouldn't. We use that
+ fact and just add the value of the last discarded bit
+ to the least sifgnificant bit of the shifted value
+ from acc. */
+ if (0 == rs) {
+ assign(t8, mkU64(0x0ULL));
+ } else {
+ assign(t8, binop(Iop_And64,
+ binop(Iop_Shr64,
+ mkexpr(t0),
+ mkU8(rs-1)),
+ mkU64(0x1ULL)));
+ }
+ assign(t9, binop(Iop_Add64, mkexpr(t1), mkexpr(t8)));
- /* Check if signOut == signIn */
- assign(t3, IRExpr_ITE(binop(Iop_CmpEQ32,
- binop(Iop_And32,
- unop(Iop_64HIto32,
- mkexpr(t0)),
- mkU32(0x80000000)),
- binop(Iop_And32,
- getIReg(rt),
- mkU32(0x80000000))),
- getDSPControl(),
- mkexpr(t2)));
+ /* Repeat previous steps for the rounded value. */
+ assign(t10, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0)));
+ assign(t11, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0)));
- assign(t4, IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0xffffffff)),
- mkexpr(t2),
- mkexpr(t3)),
- mkexpr(t3)));
- putDSPControl(mkexpr(t4));
+ assign(t12, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0xffffffff)));
+ assign(t13, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+
+ assign(t14, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t10)),
+ unop(Iop_1Sto32, mkexpr(t11))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t12)),
+ unop(Iop_1Sto32, mkexpr(t13)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t14),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
+ if (0 == rs) {
+ putIReg(rt, unop(Iop_64to32, mkexpr(t0)));
+ } else {
+ putIReg(rt, unop(Iop_64to32, mkexpr(t1)));
+ }
break;
}
case 0x1: { /* EXTRV.W */
@@ -2917,43 +3000,133 @@
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
t2 = newTemp(Ity_I32);
- t3 = newTemp(Ity_I32);
+ t3 = newTemp(Ity_I1);
t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
+ t7 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
+ t15 = newTemp(Ity_I8);
+ assign(t15, unop(Iop_32to8,
+ binop(Iop_And32,
+ getIReg(rs),
+ mkU32(0x1f))));
assign(t0, getAcc(ac));
- assign(t1, binop(Iop_Sar64,
- mkexpr(t0),
- unop(Iop_32to8,
- binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)))));
- putIReg(rt, unop(Iop_64to32, mkexpr(t1)));
-
- assign(t2, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
+ assign(t1, binop(Iop_Sar64, mkexpr(t0), mkexpr(t15)));
+ putIReg(rt, IRExpr_ITE(binop(Iop_CmpEQ32,
+ unop(Iop_8Uto32,
+ mkexpr(t15)),
+ mkU32(0)),
+ unop(Iop_64to32, mkexpr(t0)),
+ unop(Iop_64to32, mkexpr(t1))));
- /* Check if signOut == signIn */
- assign(t3, IRExpr_ITE(binop(Iop_CmpEQ32,
- binop(Iop_And32,
- unop(Iop_64HIto32,
- mkexpr(t0)),
- mkU32(0x80000000)),
- binop(Iop_And32,
- getIReg(rt),
- mkU32(0x80000000))),
- getDSPControl(),
- mkexpr(t2)));
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
assign(t4, binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t1)),
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
+
+ /* If the last discarded bit is 1, there would be carry
+ when rounding, otherwise there wouldn't. We use that
+ fact and just add the value of the last discarded bit
+ to the least sifgnificant bit of the shifted value
+ from acc. */
+ assign(t8,
+ IRExpr_ITE(binop(Iop_CmpEQ32,
+ unop(Iop_8Uto32,
+ mkexpr(t15)),
+ mkU32(0)),
+ mkU64(0x0ULL),
+ binop(Iop_And64,
+ binop(Iop_Shr64,
+ mkexpr(t0),
+ unop(Iop_32to8,
+ binop(Iop_Sub32,
+ unop(Iop_8Uto32,
+ mkexpr(t15)),
+ mkU32(1)))),
+ mkU64(0x1ULL))));
+
+ assign(t9, binop(Iop_Add64, mkexpr(t1), mkexpr(t8)));
+
+ /* Repeat previous steps for the rounded value. */
+ assign(t10, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0)));
+ assign(t11, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+
+ assign(t12, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
mkU32(0xffffffff)));
+ assign(t13, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+
+ assign(t14, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t10)),
+ unop(Iop_1Sto32, mkexpr(t11))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t12)),
+ unop(Iop_1Sto32, mkexpr(t13)))));
putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(mkexpr(t4),
- mkexpr(t2),
- mkexpr(t3)),
- mkexpr(t3)));
+ mkexpr(t14),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
break;
}
case 0x2: { /* EXTP */
@@ -3140,61 +3313,131 @@
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
t2 = newTemp(Ity_I32);
- t4 = newTemp(Ity_I32);
- t5 = newTemp(Ity_I64);
- t6 = newTemp(Ity_I64);
+ t3 = newTemp(Ity_I1);
+ t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
+ t7 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
+ t15 = newTemp(Ity_I64);
+ t16 = newTemp(Ity_I1);
assign(t0, getAcc(ac));
- if (0 == rs) {
- putIReg(rt, unop(Iop_64to32, mkexpr(t0)));
- } else {
- assign(t1, binop(Iop_Sar64, mkexpr(t0), mkU8(rs)));
+ assign(t16, binop(Iop_CmpEQ32,
+ mkU32(rs),
+ mkU32(0)));
+ assign(t1, IRExpr_ITE(mkexpr(t16),
+ mkexpr(t0),
+ binop(Iop_Sar64,
+ mkexpr(t0),
+ mkU8(rs))));
+ /* If the last discarded bit is 1, there would be carry
+ when rounding, otherwise there wouldn't. We use that
+ fact and just add the value of the last discarded bit
+ to the least significant bit of the shifted value
+ from acc. */
+ assign(t15, binop(Iop_Shr64,
+ mkexpr(t0),
+ unop(Iop_32to8,
+ binop(Iop_Sub32,
+ binop(Iop_And32,
+ mkU32(rs),
+ mkU32(0x1f)),
+ mkU32(1)))));
- assign(t2, binop(Iop_Or32,
- getDSPControl(), mkU32(0x800000)));
+ assign(t8,
+ IRExpr_ITE(mkexpr(t16),
+ mkU64(0x0ULL),
+ binop(Iop_And64,
+ mkexpr(t15),
+ mkU64(0x0000000000000001ULL))));
+ assign(t9, binop(Iop_Add64, mkexpr(t1), mkexpr(t8)));
+ putIReg(rt, unop(Iop_64to32, mkexpr(t9)));
- putDSPControl(IRExpr_ITE(
- binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0xffffffff)),
- mkexpr(t2),
- getDSPControl()),
- getDSPControl()));
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
+ assign(t4, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
- assign(t4, binop(Iop_Or32,
- getDSPControl(), mkU32(0x800000)));
- /* If the last discarded bit is 1, there would be carry
- when rounding, otherwise there wouldn't. We use that
- fact and just add the value of the last discarded bit
- to the least sifgnificant bit of the shifted value
- from acc. */
- assign(t5, binop(Iop_Shr64,
- binop(Iop_And64,
- mkexpr(t0),
- binop(Iop_Shl64,
- mkU64(0x1ULL),
- mkU8(rs-1))),
- mkU8(rs-1)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
- assign(t6, binop(Iop_Add64, mkexpr(t1), mkexpr(t5)));
+ /* Repeat previous steps for the rounded value. */
+ assign(t10, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0)));
+ assign(t11, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0)));
- putDSPControl(IRExpr_ITE(
- binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t6)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t6)),
- mkU32(0xffffffff)),
- mkexpr(t4),
- getDSPControl()),
- getDSPControl()));
- putIReg(rt, unop(Iop_64to32, mkexpr(t6)));
- }
+ assign(t12, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0xffffffff)));
+ assign(t13, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+
+ assign(t14, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t10)),
+ unop(Iop_1Sto32, mkexpr(t11))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t12)),
+ unop(Iop_1Sto32, mkexpr(t13)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t14),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
break;
}
case 0x5: { /* EXTRV_R.W */
@@ -3203,79 +3446,129 @@
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
t2 = newTemp(Ity_I32);
- t4 = newTemp(Ity_I32);
- t5 = newTemp(Ity_I64);
- t6 = newTemp(Ity_I64);
-
- assign(t0, getAcc(ac));
-
- assign(t1, binop(Iop_Sar64,
- mkexpr(t0),
- unop(Iop_32to8,
- binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)))));
+ t3 = newTemp(Ity_I1);
+ t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
+ t7 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
+ t15 = newTemp(Ity_I8);
- assign(t2, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
+ assign(t15, unop(Iop_32to8,
+ binop(Iop_And32,
+ getIReg(rs),
+ mkU32(0x1f))));
+ assign(t0, getAcc(ac));
+ assign(t1, binop(Iop_Sar64, mkexpr(t0), mkexpr(t15)));
- putDSPControl(IRExpr_ITE(
- binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0xffffffff)),
- mkexpr(t2),
- getDSPControl()),
- getDSPControl()));
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
+ assign(t4, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
- assign(t4, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
/* If the last discarded bit is 1, there would be carry
when rounding, otherwise there wouldn't. We use that
- fact and just add the value of the last discarded bit to
- the least sifgnificant bit of the shifted value from
- acc. */
- assign(t5, binop(Iop_Shr64,
- binop(Iop_And64,
- mkexpr(t0),
- binop(Iop_Shl64,
- mkU64(0x1ULL),
- unop(Iop_32to8,
- binop(Iop_Sub32,
- binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)),
- mkU32(0x1))))),
- unop(Iop_32to8,
- binop(Iop_Sub32,
- binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)),
- mkU32(0x1)))));
+ fact and just add the value of the last discarded bit
+ to the least sifgnificant bit of the shifted value
+ from acc. */
+ assign(t8,
+ IRExpr_ITE(binop(Iop_CmpEQ32,
+ unop(Iop_8Uto32,
+ mkexpr(t15)),
+ mkU32(0)),
+ mkU64(0x0ULL),
+ binop(Iop_And64,
+ binop(Iop_Shr64,
+ mkexpr(t0),
+ unop(Iop_32to8,
+ binop(Iop_Sub32,
+ unop(Iop_8Uto32,
+ mkexpr(t15)),
+ mkU32(1)))),
+ mkU64(0x1ULL))));
+
+ assign(t9, binop(Iop_Add64, mkexpr(t1), mkexpr(t8)));
+ /* Put rounded value in destination register. */
+ putIReg(rt, unop(Iop_64to32, mkexpr(t9)));
+
+ /* Repeat previous steps for the rounded value. */
+ assign(t10, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0)));
+ assign(t11, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0)));
- assign(t6, binop(Iop_Add64, mkexpr(t1), mkexpr(t5)));
+ assign(t12, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0xffffffff)));
+ assign(t13, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
- putDSPControl(IRExpr_ITE(
- binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t6)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t6)),
- mkU32(0xffffffff)),
- mkexpr(t4),
- getDSPControl()),
- getDSPControl()));
- putIReg(rt, IRExpr_ITE(binop(Iop_CmpEQ32,
- binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)),
- mkU32(0x0)),
- unop(Iop_64to32, mkexpr(t0)),
- unop(Iop_64to32, mkexpr(t6))));
+ assign(t14, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t10)),
+ unop(Iop_1Sto32, mkexpr(t11))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t12)),
+ unop(Iop_1Sto32, mkexpr(t13)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t14),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
break;
}
case 0x6: { /* EXTR_RS.W */
@@ -3283,81 +3576,136 @@
vassert(!mode64);
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
- t2 = newTemp(Ity_I64);
- t3 = newTemp(Ity_I32);
- t4 = newTemp(Ity_I32);
- t5 = newTemp(Ity_I32);
- t6 = newTemp(Ity_I32);
+ t2 = newTemp(Ity_I32);
+ t3 = newTemp(Ity_I1);
+ t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
+ t7 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
+ t16 = newTemp(Ity_I32);
- if (0 != rs) {
- assign(t0, getAcc(ac));
+ assign(t0, getAcc(ac));
+ if (0 == rs) {
+ assign(t1, mkexpr(t0));
+ } else {
assign(t1, binop(Iop_Sar64, mkexpr(t0), mkU8(rs)));
- putDSPControl(IRExpr_ITE(
- binop(Iop_CmpNE32,
- unop(Iop_64HIto32, mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0xffffffff)),
- binop(Iop_Or32,
- getDSPControl(),
- mkU32(0x00800000)),
- getDSPControl()),
- getDSPControl()));
- /* If the last discarded bit is 1, there would be carry
- when rounding, otherwise there wouldn't. We use that
- fact and just add the value of the last discarded bit
- to the least sifgnificant bit of the shifted value
- from acc. */
- assign(t2, binop(Iop_Add64,
- mkexpr(t1),
- binop(Iop_Shr64,
- binop(Iop_And64,
- mkexpr(t0),
- binop(Iop_Shl64,
- mkU64(0x1ULL),
- unop(Iop_32to8,
- mkU32(rs-1)))),
- unop(Iop_32to8, mkU32(rs-1)))));
- assign(t6, IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t2)),
- mkU32(0xffffffff)),
+ }
+
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
+ assign(t4, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
binop(Iop_Or32,
getDSPControl(),
mkU32(0x00800000)),
getDSPControl()));
- putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t2)),
- mkU32(0x0)),
- mkexpr(t6),
- getDSPControl()));
- assign(t3, IRExpr_ITE(binop(Iop_CmpEQ32,
- binop(Iop_And32,
- unop(Iop_64HIto32,
- mkexpr(t2)),
- mkU32(0x80000000)),
- mkU32(0x0)),
- mkU32(0x7fffffff),
- mkU32(0x80000000)));
- assign(t4, IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t2)),
- mkU32(0xffffffff)),
- mkexpr(t3),
- unop(Iop_64to32, mkexpr(t2))));
- assign(t5, IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t2)),
- mkU32(0x0)),
- mkexpr(t4),
- unop(Iop_64to32, mkexpr(t2))));
- putIReg(rt, mkexpr(t5));
+
+ /* If the last discarded bit is 1, there would be carry
+ when rounding, otherwise there wouldn't. We use that
+ fact and just add the value of the last discarded bit
+ to the least sifgnificant bit of the shifted value
+ from acc. */
+ if (0 == rs) {
+ assign(t8, mkU64(0x0ULL));
} else {
- putIReg(rt, unop(Iop_64to32, getAcc(ac)));
+ assign(t8, binop(Iop_And64,
+ binop(Iop_Shr64,
+ mkexpr(t0),
+ mkU8(rs-1)),
+ mkU64(0x1ULL)));
}
+
+ assign(t9, binop(Iop_Add64, mkexpr(t1), mkexpr(t8)));
+
+ /* Repeat previous steps for the rounded value. */
+ assign(t10, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0)));
+ assign(t11, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+
+ assign(t12, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0xffffffff)));
+ assign(t13, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t9)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+
+ assign(t14, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t10)),
+ unop(Iop_1Sto32, mkexpr(t11))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t12)),
+ unop(Iop_1Sto32, mkexpr(t13)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t14),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
+
+ assign(t16, binop(Iop_And32,
+ unop(Iop_64HIto32,
+ mkexpr(t9)),
+ mkU32(0x80000000)));
+ putIReg(rt, IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t14),
+ mkU32(0)),
+ IRExpr_ITE(binop(Iop_CmpEQ32,
+ mkexpr(t16),
+ mkU32(0)),
+ mkU32(0x7fffffff),
+ mkU32(0x80000000)),
+ unop(Iop_64to32, mkexpr(t9))));
break;
}
case 0x7: { /* EXTRV_RS.W */
@@ -3366,104 +3714,146 @@
t0 = newTemp(Ity_I64);
t1 = newTemp(Ity_I64);
t2 = newTemp(Ity_I32);
- t4 = newTemp(Ity_I32);
- t5 = newTemp(Ity_I64);
- t6 = newTemp(Ity_I64);
+ t3 = newTemp(Ity_I1);
+ t4 = newTemp(Ity_I1);
+ t5 = newTemp(Ity_I1);
+ t6 = newTemp(Ity_I1);
t7 = newTemp(Ity_I32);
- t8 = newTemp(Ity_I32);
- t9 = newTemp(Ity_I32);
- t10 = newTemp(Ity_I32);
+ t8 = newTemp(Ity_I64);
+ t9 = newTemp(Ity_I64);
+ t10 = newTemp(Ity_I1);
+ t11 = newTemp(Ity_I1);
+ t12 = newTemp(Ity_I1);
+ t13 = newTemp(Ity_I1);
+ t14 = newTemp(Ity_I32);
+ t15 = newTemp(Ity_I32);
+ t16 = newTemp(Ity_I32);
+ t17 = newTemp(Ity_I1);
+ assign(t15, binop(Iop_And32,
+ getIReg(rs),
+ mkU32(0x1f)));
+ assign(t17, binop(Iop_CmpEQ32,
+ mkexpr(t15),
+ mkU32(0)));
assign(t0, getAcc(ac));
+ assign(t1, IRExpr_ITE(mkexpr(t17),
+ mkexpr(t0),
+ binop(Iop_Sar64,
+ mkexpr(t0),
+ unop(Iop_32to8,
+ mkexpr(t15)))));
- assign(t1, binop(Iop_Sar64,
- mkexpr(t0),
- unop(Iop_32to8, binop(Iop_And32,
- getIReg(rs),
- mkU32(0x1f)))));
-
- assign(t2, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
-
- assign(t10, IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0x0)),
- IRExpr_ITE(binop(Iop_CmpNE32,
- unop(Iop_64HIto32,
- mkexpr(t1)),
- mkU32(0xffffffff)),
- mkexpr(t2),
- getDSPControl()),
- getDSPControl()));
-
- putDSPControl(mkexpr(t10));
+ /* Check if bits 63..31 of the result in t1 aren't 0. */
+ assign(t3, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0)));
+ assign(t4, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0)));
+ /* Check if bits 63..31 of the result in t1 aren't
+ 0x1ffffffff. */
+ assign(t5, binop(Iop_CmpNE32,
+ unop(Iop_64HIto32,
+ mkexpr(t1)),
+ mkU32(0xffffffff)));
+ assign(t6, binop(Iop_CmpNE32,
+ binop(Iop_And32,
+ unop(Iop_64to32,
+ mkexpr(t1)),
+ mkU32(0x80000000)),
+ mkU32(0x80000000)));
+ /* If bits 63..31 aren't 0 nor 0x1ffffffff, set DSP
+ control register. */
+ assign(t7, binop(Iop_And32,
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t3)),
+ unop(Iop_1Sto32, mkexpr(t4))),
+ binop(Iop_Or32,
+ unop(Iop_1Sto32, mkexpr(t5)),
+ unop(Iop_1Sto32, mkexpr(t6)))));
+ putDSPControl(IRExpr_ITE(binop(Iop_CmpNE32,
+ mkexpr(t7),
+ mkU32(0)),
+ binop(Iop_Or32,
+ getDSPControl(),
+ mkU32(0x00800000)),
+ getDSPControl()));
- assign(t4, binop(Iop_Or32,
- getDSPControl(), mkU32(0x00800000)));
/* If the last discarded bit is 1, there would be carry
when rounding, otherwise there wouldn't. We use that
- fact and just add the value of the last discarded bit to
- the least sifgnificant bit of the shifted value from
- acc. */
- assign(t5, binop(Iop_Shr64,
- binop(Iop_And64,
- mkexpr(t0),
- binop(Iop_Shl64,
- mkU64(0x1ULL),
- unop(Iop_32to8,
- binop(Iop_Sub32,
- binop(Iop_And32,
- getIReg(rs),
- ...
[truncated message content] |
|
From: <sv...@va...> - 2013-10-23 13:09:17
|
Author: bart
Date: Wed Oct 23 13:09:10 2013
New Revision: 13686
Log:
drd: Add additional strchr(), strcpy() and strcmp() intercepts (#326436)
Modified:
trunk/drd/drd_strmem_intercepts.c
Modified: trunk/drd/drd_strmem_intercepts.c
==============================================================================
--- trunk/drd/drd_strmem_intercepts.c (original)
+++ trunk/drd/drd_strmem_intercepts.c Wed Oct 23 13:09:10 2013
@@ -53,6 +53,7 @@
// Apparently index() is the same thing as strchr()
#if defined(VGO_linux)
STRCHR(VG_Z_LIBC_SONAME, strchr)
+ STRCHR(VG_Z_LIBC_SONAME, __GI_strchr)
STRCHR(VG_Z_LIBC_SONAME, index)
STRCHR(VG_Z_LD_LINUX_SO_2, strchr)
STRCHR(VG_Z_LD_LINUX_SO_2, index)
@@ -117,6 +118,7 @@
#if defined(VGO_linux)
STRCPY(VG_Z_LIBC_SONAME, strcpy)
+ STRCPY(VG_Z_LIBC_SONAME, __GI_strcpy)
#elif defined(VGO_darwin)
STRCPY(VG_Z_LIBC_SONAME, strcpy)
#endif
@@ -142,6 +144,7 @@
#if defined(VGO_linux)
STRCMP(VG_Z_LIBC_SONAME, strcmp)
+ STRCMP(VG_Z_LIBC_SONAME, __GI_strcmp)
STRCMP(VG_Z_LD_LINUX_X86_64_SO_2, strcmp)
STRCMP(VG_Z_LD64_SO_1, strcmp)
#elif defined(VGO_darwin)
|
|
From: <sv...@va...> - 2013-10-23 13:08:17
|
Author: dejanj
Date: Wed Oct 23 13:08:10 2013
New Revision: 13685
Log:
mips32: Delete unused empty files.
Modified:
trunk/none/tests/mips32/Makefile.am
trunk/none/tests/mips32/mips32_dsp.stdout.exp-mips32
trunk/none/tests/mips32/mips32_dspr2.stdout.exp-mips32
Modified: trunk/none/tests/mips32/Makefile.am
==============================================================================
--- trunk/none/tests/mips32/Makefile.am (original)
+++ trunk/none/tests/mips32/Makefile.am Wed Oct 23 13:08:10 2013
@@ -25,10 +25,9 @@
bug320057-mips32.stdout.exp bug320057-mips32.stderr.exp \
bug320057-mips32.vgtest \
mips32_dsp.stdout.exp mips32_dsp.stdout.exp-BE \
- mips32_dsp.stdout.exp-mips32 mips32_dsp.stderr.exp \
- mips32_dsp.vgtest \
+ mips32_dsp.stderr.exp mips32_dsp.vgtest \
mips32_dspr2.stdout.exp mips32_dspr2.stderr.exp \
- mips32_dspr2.stdout.exp-mips32 mips32_dspr2.vgtest \
+ mips32_dspr2.vgtest \
unaligned_load_store.stdout.exp-LE unaligned_load_store.stdout.exp-BE \
unaligned_load_store.stderr.exp unaligned_load_store.vgtest \
test_fcsr.stdout.exp test_fcsr.stderr.exp test_fcsr.vgtest
|
|
From: <sv...@va...> - 2013-10-23 12:59:24
|
Author: dejanj
Date: Wed Oct 23 12:59:17 2013
New Revision: 13684
Log:
mips32: Update Subversion ignore lists.
Modified:
trunk/none/tests/mips32/ (props changed)
|
|
From: <sv...@va...> - 2013-10-23 12:58:25
|
Author: sewardj
Date: Wed Oct 23 12:58:18 2013
New Revision: 13683
Log:
Remove duplicate entries for 3.9.0.
Modified:
branches/VALGRIND_3_9_BRANCH/NEWS
Modified: branches/VALGRIND_3_9_BRANCH/NEWS
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/NEWS (original)
+++ branches/VALGRIND_3_9_BRANCH/NEWS Wed Oct 23 12:58:18 2013
@@ -172,7 +172,6 @@
123837 system call: 4th argument is optional, depending on cmd
135425 memcheck should tell you where Freed blocks were Mallocd
-135425 memcheck should tell you where Freed blocks were Mallocd
164485 VG_N_SEGNAMES and VG_N_SEGMENTS are (still) too small
207815 Adds some of the drm ioctls to syswrap-linux.c
251569 vex amd64->IR: 0xF 0x1 0xF9 0xBF 0x90 0xD0 0x3 0x0 (RDTSCP)
@@ -181,7 +180,6 @@
263034 Crash when loading some PPC64 binaries
269599 Increase deepest backtrace
274695 s390x: Support "compare to/from logical" instructions (z196)
-275800 s390x: Add support for the ecag instruction (part 1)
275800 s390x: Autodetect cache info (part 2)
280271 Valgrind reports possible memory leaks on still-reachable std::string
284540 Memcheck shouldn't count suppressions matching still-reachable [..]
@@ -202,7 +200,6 @@
307103 sys_openat: If pathname is absolute, then dirfd is ignored.
307106 amd64->IR: f0 0f c0 02 (lock xadd byte)
307113 s390x: DFP support
-307113 s390x: DFP support
307141 valgrind does't work in mips-linux system
307155 filter_gdb should filter out syscall-template.S T_PSEUDO
307285 x86_amd64 feature test for avx in test suite is wrong
@@ -236,7 +233,6 @@
309430 Self hosting ppc64 encounters a vassert error on operand type
309600 valgrind is a bit confused about 0-sized sections
309823 Generate errors for still reachable blocks
-309823 Generate errors for still reachable blocks
309921 PCMPISTRI validity bit propagation is imprecise
309922 none/tests/ppc64/test_dfp5 sometimes fails
310169 The Iop_CmpORD class of Iops is not supported by the vbit checker.
@@ -269,13 +265,10 @@
315689 disInstr(thumb): unhandled instruction: 0xF852 0x0E10 (LDRT)
315738 disInstr(arm): unhandled instruction: 0xEEBE0BEE (vcvt.s32.f64)
315959 valgrind man page has bogus SGCHECK (and no BBV) OPTIONS section
-315959 valgrind man page has bogus SGCHECK (and no BBV) OPTIONS section
-316144 valgrind.1 manpage contains unknown ??? strings [..]
316144 valgrind.1 manpage contains unknown ??? strings [..]
316145 callgrind command line options in manpage reference (unknown) [..]
316145 callgrind command line options in manpage reference [..]
316181 drd: Fixed a 4x slowdown for certain applications
-316181 x264 program of parsec 2.1 stuck (do not finish)
316503 Valgrind does not support SSE4 "movntdqa" instruction
316535 Use of |signed int| instead of |size_t| in valgrind messages
316696 fluidanimate program of parsec 2.1 stuck
@@ -295,7 +288,6 @@
318932 Add missing PPC64 and PPC32 system call support
319235 --db-attach=yes is broken with Yama (ptrace scoping) enabled
319395 Crash with unhandled instruction on STRT (Thumb) instructions
-319494 Fix VEX's Makefile-gcc.
319494 VEX Makefile-gcc standalone build update after r2702
319505 [MIPSEL] Crash: unhandled UNRAY operator.
319858 disInstr(thumb): unhandled instruction on instruction STRBT
|
|
From: <sv...@va...> - 2013-10-23 12:52:25
|
Author: sewardj
Date: Wed Oct 23 12:52:15 2013
New Revision: 13682
Log:
Initial cut at 3.9.0 release notes. What did I forget?
Modified:
branches/VALGRIND_3_9_BRANCH/NEWS
Modified: branches/VALGRIND_3_9_BRANCH/NEWS
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/NEWS (original)
+++ branches/VALGRIND_3_9_BRANCH/NEWS Wed Oct 23 12:52:15 2013
@@ -1,103 +1,161 @@
-Release 3.9.0 (?? ?????? 201?)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Release 3.9.0 (XX October 2013)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+3.8.0 is a feature release with many improvements and the usual
+collection of bug fixes.
+
+This release supports X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux,
+PPC64/Linux, S390X/Linux, MIPS32/Linux, MIPS64/Linux, ARM/Android,
+X86/Android, X86/MacOSX 10.7 and AMD64/MacOSX 10.7. Support for
+MacOSX 10.8 is significantly improved relative to the 3.8.0 release.
* ================== PLATFORM CHANGES =================
-* Support for MIPS64 LE and BE running Linux. Valgrind has been tested
- on MIPS64 Debian Squeeze and Debian Wheezy distributions.
+* Support for MIPS64 LE and BE running Linux. Valgrind has been
+ tested on MIPS64 Debian Squeeze and Debian Wheezy distributions.
* Support for MIPS DSP ASE on MIPS32 platforms.
- Support for s390x Decimal Floating Point instructions on hosts that
+* Support for s390x Decimal Floating Point instructions on hosts that
have the DFP facility installed.
- Power8 (Power ISA 2.07 support)
+* Support for POWER8 (Power ISA 2.07) instructions
- Intel AVX2 support
- Intel HTM support (kind of)
- Power HTM support (kind of)
+* Support for Intel AVX2 instructions. This is available only on 64
+ bit code.
+* Initial support for Intel Transactional Synchronization Extensions,
+ both RTM and HLE.
-* ==================== TOOL CHANGES ====================
-* Memcheck:
+* Initial support for Hardware Transactional Memory on POWER.
- - Using the options --show-leak-kinds=kind1,kind2,.. and
- --errors-for-leak-kinds=kind1,kind2,.., each leak kind (definite, indirect,
- possible, reachable) can now be individually reported and/or counted as
- an error.
- In a leak suppression entry, an optional line 'match-leak-kinds:'
- controls which leak kinds are suppressed by this entry.
- This is a.o. useful to avoid definite leaks being "catched"
- by a suppression entry aimed at suppressing possibly lost blocks.
-
- - The option --leak-check-heuristics=heur1,heur2,... can activate
- various heuristics to decrease the number of false positive
- "possible leaks" for C++ code. The available heuristics are
- detecting valid interior pointers to std::stdstring, to new[] allocated
- arrays with elements having destructors and to interior pointers pointing
- to an inner part of a C++ object using multiple inheritance.
-
- - The option --keep-stacktraces controls which stack trace(s) to keep for
- malloc'd and/or free'd blocks. This can be used to obtain more information
- for 'use after free' errors or to decrease Valgrind memory and/or cpu usage
- by recording less information for heap blocks.
-
- - The list of used suppressions (shown when giving the -v option)
- now shows for the leak suppressions how many blocks and bytes were
- suppressed during the last leak search for each suppression.
- The suppression count for a leak suppression shows the total nr
- of loss records which were suppressed by this suppression.
+* Improved support for MacOSX 10.8 (64-bit only). Memcheck can now
+ run large GUI apps tolerably well.
-* ==================== OTHER CHANGES ====================
+* ==================== TOOL CHANGES ====================
- - The default nr of sectors in the translation cache has been
- decreased to 6 on android platforms, and increased to 16
- on all other platforms. A sector (lazily allocated) uses several
- MB depending on the tool (about 40MB for memcheck).
- The option --num-transtab-sectors allows to specify how
- many sectors Valgrind can allocate.
-
- - Option --merge-recursive-frames=<number> tells Valgrind to
- detect and merge (collapse) recursive calls when recording stack traces.
- When your program has recursive algorithms, this limits
- the memory used by Valgrind for recorded stack traces and avoid
- recording uninteresting repeated calls.
- The value is changeable using the monitor command
- 'v.set merge-recursive-frames'.
-
- - valgrind.h has a new request VALGRIND_MONITOR_COMMAND.
- This can be used to execute gdbserver monitor commands from
- the client program.
-
- - Addition of GDB server monitor command 'v.info open_fds' that gives the
- list of open file descriptors and additional details.
-
- - Optional message in the 'v.info n_errs_found' monitor command (e.g.
- 'v.info n_errs_found test 1234 finished'), allowing to have
- a comment string in the process output, separating errors of different
- tests (or test phases).
-
- - Addition of GDB server monitor command 'v.info execontext' that shows
- information about the stack traces recorded by Valgrind.
- This can be used to analyse one possible cause of Valgrind high
- memory usage for some programs.
-
- - Addition of GDB server monitor command
- 'v.do expensive_sanity_check_general' that checks the sanity
- of various Valgrind aspects, including the Valgrind heap.
-
- - The list of used suppressions (shown when giving the -v option)
- now gives the filename and line number where the suppression is defined.
+* Memcheck:
- - remote debuginfo server + overhaul of debuginfo reading
+ - Improvements in handling of vectorised code, leading to
+ significantly fewer false error reports. You need to use the flag
+ --partial-loads-ok=yes to get the benefits of these changes.
+
+ - Better control over the leak checker. It is now possible to
+ specify which leak kinds (definite/indirect/possible/reachable)
+ should be displayed, which should be regarded as errors, and which
+ should be suppressed by a given leak suppression. This is done
+ using the options --show-leak-kinds=kind1,kind2,..,
+ --errors-for-leak-kinds=kind1,kind2,.. and an optional
+ "match-leak-kinds:" line in suppression entries, respectively.
+
+ - Reduced "possible leak" reports from the leak checker by the use
+ of better heuristics. The available heuristics provide detection
+ of valid interior pointers to std::stdstring, to new[] allocated
+ arrays with elements having destructors and to interior pointers
+ pointing to an inner part of a C++ object using multiple
+ inheritance. They can be selected individually using the option
+ The option --leak-check-heuristics=heur1,heur2,...
+
+ - Better control of stacktrace acquisition for heap-allocated
+ blocks. Using the --keep-stacktraces option, it is possible to
+ control independently whether a stack trace is acquired for each
+ allocation and deallocation. This can be used to create better
+ "use after free" errors or to decrease Valgrind's resource
+ consumption by recording less information.
+
+ - Better reporting of leak suppression usage. The list of used
+ suppressions (shown when the -v option is given) now shows, for
+ each leak suppressions, how many blocks and bytes it suppressed
+ during the last leak search.
+
+ - Line numbers for used suppressions. The list of used suppressions
+ (shown when the -v option is given) now shows, for each used
+ suppression, the file name and line number where the suppression
+ is defined.
+
+* Helgrind:
+
+ - False errors resulting from the use of statically initialised
+ mutexes and condition variables (PTHREAD_MUTEX_INITIALISER, etc)
+ have been removed.
- - some fixes for OSX 10.8
+ - False errors resulting from the use of pthread_cond_waits that
+ timeout, have been removed.
- - partial-loads-ok now works for 16 and 32 byte loads
- and in general improved handling of vectorised code on Memcheck
+* ==================== OTHER CHANGES ====================
- - unwind-by-stack-scan for ARM
+* Some attempt to tune Valgrind's space requirements to the expected
+ capabilities of the target:
+ - The default size of the translation cache has been reduced from 8
+ sectors to 6 on Android platforms, since each sector occupies
+ about 40MB when using Memcheck.
+
+ - The default size of the translation cache has been increased to 16
+ sectors on all other platforms, reflecting the fact that large
+ applications require instrumentation and storage of huge amounts
+ of code. For similar reasons, the number of memory mapped
+ segments that can be tracked has been increased by a factor of 6.
+
+ - In all cases, the maximum number of sectors in the translation
+ cache can be controlled by the new flag --num-transtab-sectors.
+
+* Changes in how debug info (line numbers, etc) is read:
+
+ - Valgrind no longer temporarily mmaps the entire object to read
+ from it. Instead, reading is done through a small fixed sized
+ buffer. This avoids virtual memory usage spikes when Valgrind
+ reads debuginfo from large shared objects.
+
+ - A new experimental remote debug info server. Valgrind can read
+ debug info from a different machine (typically, a build host)
+ where debuginfo objects are stored. This can save a lot of time
+ and hassle when running Valgrind on resource-constrained targets
+ (phones, tablets) when the full debuginfo objects are stored
+ somewhere else. This is enabled by the --debuginfo-server=
+ option.
+
+ - Consistency checking between main and debug objects can be
+ disabled using the --allow-mismatched-debuginfo option.
+
+* Stack unwinding by stack scanning, on ARM. Unwinding by stack
+ scanning can recover stack traces in some cases when the normal
+ unwind mechanisms fail. Stack scanning is best described as "a
+ nasty, dangerous and misleading hack" and so is disabled by default.
+ Use --unw-stack-scan-thresh and --unw-stack-scan-frames to enable
+ and control it.
+
+* Detection and merging of recursive stack frame cycles. When your
+ program has recursive algorithms, this limits the memory used by
+ Valgrind for recorded stack traces and avoids recording
+ uninteresting repeated calls. This is controlled by the command
+ line option --merge-recursive-frame and by the monitor command
+ "v.set merge-recursive-frames".
+
+* New and modified GDB server monitor features:
+
+ - valgrind.h has a new client request, VALGRIND_MONITOR_COMMAND,
+ that can be used to execute gdbserver monitor commands from the
+ client program.
+
+ - A new monitor command, "v.info open_fds", that gives the list of
+ open file descriptors and additional details.
+
+ - An optional message in the "v.info n_errs_found" monitor command,
+ for example "v.info n_errs_found test 1234 finished", allowing a
+ comment string to be added to the process output, perhaps for the
+ purpose of separating errors of different tests or test phases.
+
+ - A new monitor command "v.info execontext" that shows information
+ about the stack traces recorded by Valgrind.
+
+ - A new monitor command "v.do expensive_sanity_check_general" to run
+ some internal consistency checks.
+
+* New flag --sigill-diagnostics to control whether a diagnostic
+ message is printed when the JIT encounters an instruction it can't
+ translate. The actual behavior -- delivery of SIGILL to the
+ application -- is unchanged.
* ==================== FIXED BUGS ====================
@@ -112,593 +170,209 @@
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
where XXXXXX is the bug number as listed below.
-v = verified fixed in 3_8_BRANCH
-m = merged into 3_8_BRANCH
-[390] = fixed in trunk (for 3.9.0)
-[381] = fixed in trunk and in 3_8_BRANCH, for 3.8.1
-[382] = fixed in trunk and needs to be made available for 3.8.2 too
-
-123837 [390] semctl system call: 4rth argument is optional, depending on cmd
-135425 [390] memcheck should tell you where Freed blocks were Mallocd
-252955 [390] Impossible to compile with ccache
+123837 system call: 4th argument is optional, depending on cmd
+135425 memcheck should tell you where Freed blocks were Mallocd
+135425 memcheck should tell you where Freed blocks were Mallocd
+164485 VG_N_SEGNAMES and VG_N_SEGMENTS are (still) too small
+207815 Adds some of the drm ioctls to syswrap-linux.c
+251569 vex amd64->IR: 0xF 0x1 0xF9 0xBF 0x90 0xD0 0x3 0x0 (RDTSCP)
+252955 Impossible to compile with ccache
253519 Memcheck reports auxv pointer accesses as invalid reads.
- FIXED r13109
-
-274695 [390] s390x: Support "compare to/from logical" instructions (z196)
-275800 [390] s390x: Add support for the ecag instruction (part 1)
-275800 [390] s390x: Autodetect cache info (part 2)
-280271 Valgrind reports possible memory leaks on still-reachable std::string
-284540 [390] Memcheck shouldn't count suppressions matching still-reachable allocations
-296311 [390] Wrong stack traces due to -fomit-frame-pointer (x86)
-
+263034 Crash when loading some PPC64 binaries
+269599 Increase deepest backtrace
+274695 s390x: Support "compare to/from logical" instructions (z196)
+275800 s390x: Add support for the ecag instruction (part 1)
+275800 s390x: Autodetect cache info (part 2)
+280271 Valgrind reports possible memory leaks on still-reachable std::string
+284540 Memcheck shouldn't count suppressions matching still-reachable [..]
+289578 Backtraces with ARM unwind tables (stack scan flags)
+296311 Wrong stack traces due to -fomit-frame-pointer (x86)
+304832 ppc32: build failure
305431 Use find_buildid shdr fallback for separate .debug files
- FIXED r13160
-
-305948 [390] ppc64: code generation for ShlD64 / ShrD64 asserts
-306035 [390] s390x: Fix IR generation for LAAG and friends
-306054 [390] s390x: Condition code computation for convert-to-int/logical
-
+305728 Add support for AVX2 instructions
+305948 ppc64: code generation for ShlD64 / ShrD64 asserts
+306035 s390x: Fix IR generation for LAAG and friends
+306054 s390x: Condition code computation for convert-to-int/logical
306098 s390x: alternate opcode form for convert to/from fixed
- FIXED, 2501/12935, but not yet closed
-306310 3.8.0 release tarball missing some files
- FIXED 12964/12983.
-
306587 Fix cache line detection from auxiliary vector for PPC.
-
306783 Mips unhandled syscall : 4025 / 4079 / 4182
- FIXED r12995.
-
307038 DWARF2 CFI reader: unhandled DW_OP_ opcode 0x8 (DW_OP_const1u et al)
- FIXED r13010
-
+307082 HG false positive: pthread_cond_destroy: destruction of unknown CV
307101 sys_capget second argument can be NULL
- FIXED r13021
307103 sys_openat: If pathname is absolute, then dirfd is ignored.
- FIXED r13159
-307103 sys_openat If pathname is absolute, then dirfd is ignored
- FIXED r13159
-
307106 amd64->IR: f0 0f c0 02 (lock xadd byte)
- == 308333
- FIXED r2581
-
307113 s390x: DFP support
-
+307113 s390x: DFP support
307141 valgrind does't work in mips-linux system
- FIXED (no action on our part? unclear)
-
-
-
-307155 [390] filter_gdb should filter out syscall-template.S T_PSEUDO
+307155 filter_gdb should filter out syscall-template.S T_PSEUDO
307285 x86_amd64 feature test for avx in test suite is wrong
- FIXED, r13161
-
307290 memcheck overlap testcase needs memcpy version filter
- FIXED r13020
-
307463 Please add "&limit=0" to the "all open bugs" link
- FIXED
-
-307465 [390] --show-possibly-lost=no should bring down the error count / exit code
+307465 --show-possibly-lost=no should reduce the error count / exit code
+307557 Leaks on Mac OS X 10.7.5 libraries at ImageLoader::recursiveInit[..]
307729 pkgconfig support broken valgrind.pc
- valt_load_address=@VALT_LOAD_ADDRESS@
- FIXED r13018
-
-307828 SSE optimized wcscpy, wcscmp, wcsrchr and wcschr trigger
- uninitialised value and/or invalid read warnings
- FIXED r13162
-
-307955 Building valgrind 3.7.0-r4 fails in Gentoo AMD64 when
- using clang instead of gcc
- FIXED (long since)
-
-308321 [390] testsuite memcheck filter interferes with gdb_filter
-308341 [390] vgdb should report process exit (or fatal signal)
-308427 s390 memcheck reports tsearch conditional jump or move
- depends on uninitialized value
- FIXED r2551
-
+307828 Memcheck false errors SSE optimized wcscpy, wcscmp, wcsrchr, wcschr
+307955 Building valgrind 3.7.0-r4 fails in Gentoo AMD64 when using clang
+308089 Unhandled syscall on ppc64: prctl
+308135 PPC32 MPC8xx has 16 bytes cache size
+308321 testsuite memcheck filter interferes with gdb_filter
+308333 == 307106
+308341 vgdb should report process exit (or fatal signal)
+308427 s390 memcheck reports tsearch cjump/cmove depends on uninit
308495 Remove build dependency on installed Xen headers
- FIXED r13081
-
-308573 Internal Valgrind error on 64-bit instruction executed in
- 32-bit mode
- FIXED r2558, r13091
-
+308573 Internal error on 64-bit instruction executed in 32-bit mode
+308626 == 308627
308627 pmovmskb validity bit propagation is imprecise
- == 308626
- FIXED r2559, r13108, r13129
-
-308644 [390] vgdb command for having the info for the track-fds option
-308711 [390] give more info about aspacemgr and arenas in out_of_memory
-308886 [390] Missing support for PTRACE_SET/GETREGSET
-308886 Missing support for PTRACE_SET/GETREGSET
- FIXED r13112, r13115 (??)
-
+308644 vgdb command for having the info for the track-fds option
+308711 give more info about aspacemgr and arenas in out_of_memory
+308717 ARM: implement fixed-point VCVT.F64.[SU]32
+308718 ARM implement SMLALBB family of instructions
+308886 Missing support for PTRACE_SET/GETREGSET
+308930 syscall name_to_handle_at (303 on amd64) not handled
309229 V-bit tester does not report number of tests generated
- FIXED r13124
-
-309425 Provide a --sigill-diagnostics flag to suppress illegal
- instruction reporting
- FIXED r13164, r2582
-
+309323 print unrecognized instuction on MIPS
+309425 Provide a --sigill-diagnostics flag to suppress illegal [..]
+309427 SSE optimized stpncpy trigger uninitialised value [..] errors
+309430 Self hosting ppc64 encounters a vassert error on operand type
309600 valgrind is a bit confused about 0-sized sections
- FIXED r13109
-
-309823 [390] Generate errors for still reachable blocks
+309823 Generate errors for still reachable blocks
+309823 Generate errors for still reachable blocks
309921 PCMPISTRI validity bit propagation is imprecise
- FIXED r2562, r13132
-
309922 none/tests/ppc64/test_dfp5 sometimes fails
- FIXED r2563
-
-310169 The Iop_CmpORD class of Iops is currently not supported
- by the vbit checker.
- FIXED r13123
-
-310424 [390] --read-var-info does not properly describe static variables
-310792 [PATCH v2] search additional path for debug symbols
- FIXED r13154,13169
-
-310931 [390] s390x: Message-security assist (MSA) instruction extension not implemented
-311100 PPC DFP implementation of the integer operands is not
- consistent with the Iop definitions
- FIXED r2562, r13260
-
-311407 ssse3 bcopy (actually converted memcpy) causes invalid read of
- size 8 under Debian GNU/Linux 32 bits
- FIXED r13253
-
-
+310169 The Iop_CmpORD class of Iops is not supported by the vbit checker.
+310424 --read-var-info does not properly describe static variables
+310792 search additional path for debug symbols
+310931 s390x: Message-security assist (MSA) instruction extension [..]
+311100 PPC DFP implementation of the integer operands is inconsistent [..]
+311318 ARM: "128-bit constant is not implemented" error message
+311407 ssse3 bcopy (actually converted memcpy) causes invalid read [..]
+311690 V crashes because it redirects branches inside of a redirected function
311880 x86_64: make regtest hangs at shell_valid1
- FIXED r2597
-
-312571 Rounding mode call wrong for the DFP Iops: Iop_AddD128,
- Iop_SubD128, Iop_MulD128, Iop_DivD128, Iop_D128toI64
- FIXED r2627
-
-312620 Recent change to Iop_D32toD64 and Iop_D64toD32 for s390 DFP
- support broke ppc implementation of the Iops
- FIXED r2650
-
-312913 [390] Dangling pointers error should also report the alloc stack trace
-312980 [390] Building on Mountain Lion generates some compiler warnings
+311922 WARNING: unhandled syscall: 170
+311933 == 251569
+312171 ppc: insn selection for DFP
+312571 Rounding mode call wrong for the DFP Iops [..]
+312620 Change to Iop_D32toD64 [..] for s390 DFP support broke ppc [..]
+312913 Dangling pointers error should also report the alloc stack trace
+312980 Building on Mountain Lion generates some compiler warnings
313267 Adding MIPS64/Linux port to Valgrind
- FIXED (mostly -- still DW64 outstandings) r13292, r2687
-
-313811 [390] Buffer overflow in assert_fail
+313348 == 251569
+313354 == 251569
+313811 Buffer overflow in assert_fail
314099 coverity pointed out error in VEX guest_ppc_toIR.c insn_suffix
- FIXED 2671
-
+314269 ppc: dead code in insn selection
+314718 ARM: implement integer divide instruction (sdiv and udiv)
+315345 cl-format.xml and callgrind/dump.c don't agree on using cfl= or cfi=
315441 sendmsg syscall should ignore unset msghdr msg_flags
- FIXED 13294
-
-315545 [390] (find_TTEntry_from_hcode): Assertion '(UChar*)sec->tt[tteNo].tcptr <= (UChar*)hcode' failed
-321814 == 315545
-
-316535 [390] Use of |signed int| instead of (unsigned) |size_t| in valgrind messages...
-315959 [390] valgrind man page has bogus SGCHECK (and no BBV) OPTIONS section
-316144 [390] valgrind.1 manpage contains unknown ??? strings for some core option references
-316145 [390] callgrind command line options in manpage reference (unknown) callgrind manual
-n-i-bz [390] report error for vgdb snapshot requested before execution
-n-i-bz [390] Some wrong command line options could be ignored
-n-i-bz [390] same as 303624 (fixed in 3.8.0), but for x86 android
-
-304832 ppc32: build failure
- FIXED (not sure what happened. Seems bogus to me.)
-
-n-i-bz patch to allow fair-sched on android
- FIXED r13186
-
+315534 msgrcv inside a thread causes valgrind to hang (block)
+315545 Assertion '(UChar*)sec->tt[tteNo].tcptr <= (UChar*)hcode' failed
+315689 disInstr(thumb): unhandled instruction: 0xF852 0x0E10 (LDRT)
315738 disInstr(arm): unhandled instruction: 0xEEBE0BEE (vcvt.s32.f64)
- FIXED 2695 13313
-
-311669 disInstr(arm): unhandled instruction: 0xEE07CFBA
- FIXED in 3.8.1 (hence, basically, invalid)
-
-311318 ARM: "128-bit constant is not implemented" error message
- FIXED 2693
-
-309427 SSE optimized stpncpy trigger uninitialised value and/or
- invalid read warnings
- FIXED, r13163
-
-308718 ARM implement SMLALBB family of instructions
- FIXED 2692, 13311
-
-308717 ARM: implement fixed-point VCVT.F64.[SU]32
- FIXED 2694 13312
-
-316144 valgrind.1 manpage contains unknown ??? strings for some
- core option references
- FIXED 13314
-
-316145 callgrind command line options in manpage reference
- (unknown) callgrind manual
- FIXED 13324
-
-316181 x264 program of parsec 2.1 stuck (do not finish)
- FIXED 13315
-
-316535 Use of |signed int| instead of (unsigned) |size_t| in
- valgrind messages...
- FIXED 13326
-
-317091 Use -Wl,-Ttext-segment when static linking if possible to
- keep build-ids
- FIXED 13331
-
-317186 "Impossible happends" when occurs VCVT instruction on ARM
- FIXED 2698
-
315959 valgrind man page has bogus SGCHECK (and no BBV) OPTIONS section
- FIXED 13323
- 312907 ==
-
-312171 ppc: insn selection for DFP
- FIXED r?????
-
-315534 msgrcv inside a thread causes valgrind to hang (block)
- FIXED 13289
-
+315959 valgrind man page has bogus SGCHECK (and no BBV) OPTIONS section
+316144 valgrind.1 manpage contains unknown ??? strings [..]
+316144 valgrind.1 manpage contains unknown ??? strings [..]
+316145 callgrind command line options in manpage reference (unknown) [..]
+316145 callgrind command line options in manpage reference [..]
+316181 drd: Fixed a 4x slowdown for certain applications
+316181 x264 program of parsec 2.1 stuck (do not finish)
316503 Valgrind does not support SSE4 "movntdqa" instruction
- FIXED 2700 13336
-
-311690 V crashes because it redirects branches inside of a redirected function
- FIXED (kinda; not really) 13190
-
-314269 ppc: dead code in insn selection
- FIXED 2697
-
-315345 cl-format.xml and callgrind/dump.c don't agree on
- using cfl= or cfi= for the called function source file
- FIXED 13310
-
-251569 vex amd64->IR: 0xF 0x1 0xF9 0xBF 0x90 0xD0 0x3 0x0 (RDTSCP)
- 311933 ==
- 313348 ==
- 313354 ==
- FIXED 2701 13337
-
-305728 Add support for AVX2 instructions
- FIXED r2702, r13338, r13339, r13340
-
+316535 Use of |signed int| instead of |size_t| in valgrind messages
+316696 fluidanimate program of parsec 2.1 stuck
+316761 syscall open_by_handle_at (304 on amd64, 342 on x86) not handled
+317091 Use -Wl,-Ttext-segment when static linking if possible [..]
+317186 "Impossible happens" when occurs VCVT instruction on ARM
317318 Support for Threading Building Blocks "scalable_malloc"
- WORKSFORME
-
-308089 Unhandled syscall on ppc64: prctl
- FIXED 13350
-
-263034 Crash when loading some PPC64 binaries
- FIXED 13351
-
-307082 HG false positive: pthread_cond_destroy: destruction of
- unknown cond var, w/ patch
- FIXED 13332
-
-135425 memcheck should tell you where Freed blocks were Mallocd
- FIXED 13223
-
-269599] Increase deepest backtrace
-FIXED r??
-
317444 amd64->IR: 0xC4 0x41 0x2C 0xC2 0xD2 0x8 (vcmpeq_uqps)
- FIXED 2703 13342
-
317461 Fix BMI assembler configure check and avx2/bmi/fma vgtest prereqs
- FIXED 13343
-
317463 bmi testcase IR SANITY CHECK FAILURE
- FIXED 2704
-
-314718 ARM: implement integer divide instruction (sdiv and udiv)
- FIXED 2706 13365
-
-315689 disInstr(thumb): unhandled instruction: 0xF852 0x0E10 (LDRT)
- FIXED 2705 13364
-
-317506 memcheck/tests/vbit-test fails with unknown opcode after
- introduction of new Iops for AVX2, BMI, FMA support
- FIXED 13347
-
-318643 annotate_trace_memory tests go into infinite loop on arm and ppc
- because of failed reservation (ARM: ldrex/strex PPC:lwarx/stwcx)
- FIXED r13406
-
+317506 memcheck/tests/vbit-test fails with unknown opcode after [..]
+318050 libmpiwrap fails to compile with out-of-source build
+318203 setsockopt handling needs to handle SOL_SOCKET/SO_ATTACH_FILTER
+318643 annotate_trace_memory tests infinite loop on arm and ppc [..]
+318773 amd64->IR: 0xF3 0x48 0x0F 0xBC 0xC2 0xC3 0x66 0x0F
+318929 Crash with: disInstr(thumb): 0xF321 0x0001 (ssat16)
318932 Add missing PPC64 and PPC32 system call support
- FIXED 13383
-
319235 --db-attach=yes is broken with Yama (ptrace scoping) enabled
- FIXED 13384
-
319395 Crash with unhandled instruction on STRT (Thumb) instructions
- FIXED 2722 13997
-
319494 Fix VEX's Makefile-gcc.
-
+319494 VEX Makefile-gcc standalone build update after r2702
+319505 [MIPSEL] Crash: unhandled UNRAY operator.
319858 disInstr(thumb): unhandled instruction on instruction STRBT
- FIXED 2730 13445
-
319932 disInstr(thumb): unhandled instruction on instruction STRHT
- FIXED 2730 13445
-
+320057 Problems when we try to mmap more than 12 memory pages on MIPS32
320063 Memory from PTRACE_GET_THREAD_AREA is reported uninitialised
- FIXED 13403
-
320083 disInstr(thumb): unhandled instruction on instruction LDRBT
- FIXED 2730 13445
-
320116 bind on AF_BLUETOOTH produces warnings because of sockaddr_rc padding
- FIXED 13404, 13405
-
+320131 WARNING: unhandled syscall: 369 on ARM (prlimit64)
320211 Stack buffer overflow in ./coregrind/m_main.c with huge TMPDIR
- FIXED 13409
-
+320661 vgModuleLocal_read_elf_debug_info(): "Assertion '!di->soname'
+320895 add fanotify support (patch included)
+320998 vex amd64->IR pcmpestri and pcmpestrm SSE4.2 instruction
321065 Valgrind updates for Xen 4.3
- FIXED 13435/6/7/8
-
321148 Unhandled instruction: PLI (Thumb 1, 2, 3)
- FIXED 2730
-
-321693 Unhandled instruction: LDRSBT (Thumb)
- FIXED 2730 13445
-
-321730 Add cg_diff and cg_merge man pages
- FIXED 13442
-
-321738 Add vgdb and valgrind-listener man pages
- FIXED 13443
-
321363 Unhandled instruction: SSAX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321364 Unhandled instruction: SXTAB16 (ARM + Thumb)
- FIXED 2731 13446 13447
-
321466 Unhandled instruction: SHASX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321467 Unhandled instruction: SHSAX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321468 Unhandled instruction: SHSUB16 (ARM + Thumb)
- FIXED 2731 13446 13447
-
321619 Unhandled instruction: SHSUB8 (ARM + Thumb)
- FIXED 2731 13446 13447
-
321620 Unhandled instruction: UASX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321621 Unhandled instruction: USAX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321692 Unhandled instruction: UQADD16 (ARM + Thumb)
- FIXED 2731 13446 13447
-
+321693 Unhandled instruction: LDRSBT (Thumb)
321694 Unhandled instruction: UQASX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321696 Unhandled instruction: UQSAX (Thumb + ARM)
- FIXED 2731 13446 13447
-
321697 Unhandled instruction: UHASX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321703 Unhandled instruction: UHSAX (ARM + Thumb)
- FIXED 2731 13446 13447
-
321704 Unhandled instruction: REVSH (ARM + Thumb)
- FIXED 2731 13446 13447
-
+321730 Add cg_diff and cg_merge man pages
+321738 Add vgdb and valgrind-listener man pages
+321814 == 315545
+321891 Unhandled instruction: LDRHT (Thumb)
321960 pthread_create() then alloca() causing invalid stack write errors
- FIXED 13467
-
-322807 VALGRIND_PRINTF_BACKTRACE writes callstack to xml and text to stderr
- FIXED 13516
-
-322851 0bXXX binary literal syntax is not standard
- FIXED 2736
-
-324514 gdbserver monitor cmd output behaviour consistency + allow user
- to put a "marker" msg in process log output
- FIXED 13532
-
-207815 Adds some of the drm ioctls to syswrap-linux.c
- FIXED 13486
-
321969 ppc32 and ppc64 don't support [lf]setxattr
- FIXED r13449
-
322254 Show threadname together with tid if set by application
- FIXED r13553
-
+322294 Add initial support for IBM Power ISA 2.07
322368 Assertion failure in wqthread_hijack under OS X 10.8
- FIXED 13523
-
+322563 vex mips->IR: 0x70 0x83 0xF0 0x3A
322807 VALGRIND_PRINTF_BACKTRACE writes callstack to xml and text to stderr
- FIXED r13516
-
-322851 0bXXX binary literal syntax is not standard
- FIXED 2736
-
-323116 The memcheck/tests/ppc64/power_ISA2_05.c fails to build with recent binutils
- FIXED 13490 13505 13506
-
-323713 Support mmxext (integer sse) subset on i386 (athlon)
- FIXED 2745 13515
-
-323905 Probable false positive from Valgrind/drd on close()
- FIXED r13511
-
-323912 valgrind.h header isn't compatible for mingw64
- FIXED r13513
-
-324514 gdbserver monitor cmd output behaviour consistency + allow user
- to put a "marker" msg in process output
- FIXED 13532
-
-324546 none/tests/ppc32 test_isa_2_07_part2 requests -m64
- FIXED 13533
-
-324582 When access is made to freed memory, report both allocation
- and freeing callstack
- FIXED 13223
-
-324594 Fix overflow computation and add test-cases for Power ISA 2.06
- insns: mulldo/mulldo.
- FIXED 2754 13537; needs closing.
-
-324518 ppc64: Emulation of dcbt instructions does not handle non-zero hint fields
- FIXED 2753; needs closing though.
-
-323437 Phase 2 support for IBM Power ISA 2.07
- FIXED 2753 13539
-
-322294 Add initial support for IBM Power ISA 2.07
- FIXED 2740 13494, but needs close
-
-324816 Incorrect VEX implementation for xscvspdp/xvcvspdp regarding SNaN inputs
- FIXED 2760 13544
-
-324765 ppc64: illegal instruction when executing none/tests/ppc64/jm-misc
- FIXED 13562
-
-323893 SSE3 not available on amd cpus in valgrind
- No action so far; maybe MJW can look at it
- FIXED 2761
-
-320895 add fanotify support (patch included)
- FIXED 13460
-
-320057 We have problems when we try to mmap more than 12 memory pages
- on MIPS32 when we are using Valgrind
- FIXED 13450
-
-319505 [MIPSEL] Crash: unhandled UNRAY operator.
- FIXED 2729
-
-319494 VEX Makefile-gcc standalone build update after r2702
- FIXED 2702
-
-318929 Crash with: disInstr(thumb): 0xF321 0x0001 (ssat16)
- FIXED 2721 13396
-
-318773 unhandled instruction bytes: 0xF3 0x48 0x0F 0xBC 0xC2 0xC3 0x66 0x0F
- tzcnt? == 295808, but not closed
- FIXED 2478
-
-318203 setsockopt handling needs to handle SOL_SOCKET/SO_ATTACH_FILTER
- FIXED 13461
-
-316761 syscall open_by_handle_at (304 on amd64, 342 on x86) not handled
- FIXED 13459
-
-311922 WARNING: unhandled syscall: 170
- FIXED 13458
-
-309823 Generate errors for still reachable blocks
- FIXED 13170
-
-309323 print unrecognized instuction on MIPS
- FIXED ????
-
-308930 syscall name_to_handle_at (303 on amd64) not handled
- FIXED 13304
-
-307113 s390x: DFP support
- FIXED
-
-164485 VG_N_SEGNAMES and VG_N_SEGMENTS are (still) too small
- == https://bugzilla.redhat.com/show_bug.cgi?id=730303
- FIXED 13567
-
-316181 drd: Fixed a 4x slowdown for certain applications
-316696 FIXED 13315 13316
-
-321891 Unhandled instruction: LDRHT (Thumb)
- FIXED 2777 13583
-
+322851 0bXXX binary literal syntax is not standard
323035 Unhandled instruction: LDRSHT(Thumb)
- FIXED 2777 13583
-
-324047 Valgrind doesn't support [LDR,ST]{S}[B,H]T ARM instructions
- FIXED 2777 13583
-
323036 Unhandled instruction: SMMLS (ARM and Thumb)
- FIXED 2778 13584
-
+323116 The memcheck/tests/ppc64/power_ISA2_05.c fails to build [..]
323175 Unhandled instruction: SMLALD (ARM + Thumb)
- FIXED 2778 13584
-
323177 Unhandled instruction: SMLSLD (ARM + Thumb)
- FIXED 2778 13584
-
-324421 Support for fanotify API on ARM architecture
- FIXED 13586
-
-307557 Leaks on Mac OS X 10.7.5 libraries at ImageLoader::recursiveInit[..]
- FIXED 13636
-
-308135 PPC32 MPC8xx has 16 bytes cache size
- FIXED 2785 13637
-
-318050 libmpiwrap fails to compile with out-of-source build
- FIXED 13638
-
-320131 WARNING: unhandled syscall: 369 on ARM (prlimit64)
- FIXED 13639
-
-320661 vgModuleLocal_read_elf_debug_info(): "Assertion '!di->soname'
- FIXED 13640
-
-324149 helgrind: When pthread_cond_timedwait returns ETIMEDOUT, helgrind
- FIXED 13641
-
-323432 Calling pthread_cond_destroy() or pthread_mutex_destroy()
- FIXED 13642
-
+323432 Calling pthread_cond_destroy() or pthread_mutex_destroy() [..]
+323437 Phase 2 support for IBM Power ISA 2.07
+323713 Support mmxext (integer sse) subset on i386 (athlon)
+323803 Transactional memory instructions are not supported for Power
+323893 SSE3 not available on amd cpus in valgrind
+323905 Probable false positive from Valgrind/drd on close()
+323912 valgrind.h header isn't compatible for mingw64
+324047 Valgrind doesn't support [LDR,ST]{S}[B,H]T ARM instructions
+324149 helgrind: When pthread_cond_timedwait returns ETIMEDOUT [..]
324181 mmap does not handle MAP_32BIT
- FIXED 13644
-
+324227 memcheck false positive leak when a thread calls exit+block [..]
+324421 Support for fanotify API on ARM architecture
+324514 gdbserver monitor cmd output behaviour consistency [..]
+324518 ppc64: Emulation of dcbt instructions does not handle [..]
+324546 none/tests/ppc32 test_isa_2_07_part2 requests -m64
+324582 When access is made to freed memory, report both allocation [..]
+324594 Fix overflow computation for Power ISA 2.06 insns: mulldo/mulldo.
+324765 ppc64: illegal instruction when executing none/tests/ppc64/jm-misc
+324816 Incorrect VEX implementation for xscvspdp/xvcvspdp for SNaN inputs
324834 Unhandled instructions in Microsoft C run-time for x86_64
- FIXED 2786
-
-* Support for Haswell RTM (restricted transactional memory insns) is
- in, but Haswell HLE isn't supported yet. To make this work requires
- the x86_64 insn decoder to accept XACQUIRE/XRELEASE prefixes (F2/F3)
- on certain memory instructions as listed by the Intel documentation.
- Should be easy.
-DONE
-
-320998 vex amd64->IR pcmpestri and pcmpestrm SSE4.2 instruction
- FIXED 2791 13654
-
-289578 Backtraces with ARM unwind tables (stack scan flags)
- FIXED 13657
-
-326113 valgrind libvex hwcaps error on AMD64
- FIXED 13656
-
324894 Phase 3 support for IBM Power ISA 2.07
- FIXED 13594 2779
-
-323803 Transactional memory instructions are not supported for Power
- FIXED 2780 13607 13608
-
-322563 vex mips->IR: 0x70 0x83 0xF0 0x3A
- FIXED 13558 2765
+326091 drd: Avoid false race reports from optimized strlen() impls
+326113 valgrind libvex hwcaps error on AMD64
+n-i-bz Some wrong command line options could be ignored
+n-i-bz patch to allow fair-sched on android
+n-i-bz report error for vgdb snapshot requested before execution
+n-i-bz same as 303624 (fixed in 3.8.0), but for x86 android
-324227 memcheck false positive leak when a thread calls exit+block
- only reachable via other thread live register
- FIXED 13670
-
-326091 drd: Avoid that optimized strlen() implementations trigger
- false positive race reports.
- FIXED 13664
+(3.9.0: XX October 2013, vex rYYYY, valgrind rZZZZZ)
-309430 Self hosting ppc64 encounters a vassert error on operand type
- FIXED 2793
Release 3.8.1 (19 September 2012)
@@ -756,7 +430,7 @@
301902 == 254088
304754 NEWS blows TeX's little mind
-(3.8.1: 19 September 2012, vex rXXXX, valgrind rXXXXX)
+(3.8.1: 19 September 2012, vex r2537, valgrind r12996)
|
|
From: <sv...@va...> - 2013-10-23 12:40:34
|
Author: bart
Date: Wed Oct 23 12:40:27 2013
New Revision: 13681
Log:
Update Subversion ignore lists
Modified:
trunk/drd/tests/ (props changed)
trunk/memcheck/tests/ (props changed)
trunk/none/tests/amd64/ (props changed)
|
Author: bart
Date: Wed Oct 23 12:37:44 2013
New Revision: 13680
Log:
drd/tests: Add std_list and std_string test programs
Added:
trunk/drd/tests/std_list.cpp
trunk/drd/tests/std_list.stderr.exp
trunk/drd/tests/std_list.vgtest
trunk/drd/tests/std_string.cpp
trunk/drd/tests/std_string.stderr.exp
trunk/drd/tests/std_string.vgtest
Modified:
trunk/drd/tests/Makefile.am
Modified: trunk/drd/tests/Makefile.am
==============================================================================
--- trunk/drd/tests/Makefile.am (original)
+++ trunk/drd/tests/Makefile.am Wed Oct 23 12:37:44 2013
@@ -230,6 +230,10 @@
sigalrm.vgtest \
sigaltstack.stderr.exp \
sigaltstack.vgtest \
+ std_list.stderr.exp \
+ std_list.vgtest \
+ std_string.stderr.exp \
+ std_string.vgtest \
std_thread.stderr.exp \
std_thread.vgtest \
tc01_simple_race.stderr.exp \
@@ -370,6 +374,8 @@
if CXX_CAN_INCLUDE_THREAD_HEADER
if HAVE_SHARED_POINTER_ANNOTATION
check_PROGRAMS += \
+ std_list \
+ std_string \
std_thread
endif
endif
@@ -450,6 +456,12 @@
matinv_LDADD = $(LDADD) -lm
endif
+std_list_SOURCES = std_list.cpp
+std_list_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
+
+std_string_SOURCES = std_string.cpp
+std_string_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
+
std_thread_SOURCES = std_thread.cpp
std_thread_CXXFLAGS = $(AM_CXXFLAGS) -std=c++0x
Added: trunk/drd/tests/std_list.cpp
==============================================================================
--- trunk/drd/tests/std_list.cpp (added)
+++ trunk/drd/tests/std_list.cpp Wed Oct 23 12:37:44 2013
@@ -0,0 +1,99 @@
+/*
+ * Test program that triggers strcpy() from one thread and a memory allocation
+ * immediately after the region read by strcpy() from another thread. Without
+ * strcpy() intercept there is about 50% chance that this test program triggers
+ * a false positive race report on Ubuntu 12.10 amd64.
+ *
+ * See also https://bugs.kde.org/show_bug.cgi?id=326436.
+ */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+#include <string>
+#include <sstream>
+#include <list>
+
+using namespace std;
+
+class SubTest {
+public:
+ SubTest() {
+ list<int *> ffList;
+ ffList.push_back((int *) NULL);
+ for (list<int*>::iterator ff = ffList.begin(); ff != ffList.end(); ff++) {
+ usleep(1000);
+ }
+ }
+ void subTest() {
+ list<int *> ffList;
+ ffList.push_back((int *) NULL);
+ for (list<int*>::const_iterator ff = ffList.begin(); ff != ffList.end(); ff++) {
+ usleep(1000);
+ }
+ }
+};
+
+class Test {
+ SubTest *subTest;
+public:
+ void setUp() {
+ subTest = new SubTest();
+ setlocale(LC_ALL, "English");
+ }
+ void tearDown() {
+ delete subTest; }
+ void func1() {
+ for (size_t i = 0; i < 10000; i++) {
+ subTest->subTest();
+ usleep(1000);
+ }
+ }
+ void func2() {
+ usleep(1000);
+ }
+};
+
+void *func1(void *instance)
+{
+ Test *casted = reinterpret_cast<Test*>(instance);
+ casted->setUp();
+ casted->func1();
+ casted->tearDown();
+ return NULL;
+}
+
+void *func2(void *instance)
+{
+ Test *casted = reinterpret_cast<Test*>(instance);
+ casted->setUp();
+ casted->func2();
+ casted->tearDown();
+ return NULL;
+}
+
+int main(int argc, char* argv[])
+{
+ int err;
+ pthread_t thread1;
+ pthread_t thread2;
+ Test instance1;
+ Test instance2;
+
+ // create
+ err = pthread_create(&thread1, NULL, &func1, &instance1);
+ if (err != 0)
+ throw string("failed to create a thread.");
+ err = pthread_create(&thread2, NULL, &func2, &instance2);
+ if (err != 0)
+ throw string("failed to create a thread.");
+ // join
+ err = pthread_join(thread1, NULL);
+ if (err != 0)
+ throw string("Thread::join(): failed to join.");
+ err = pthread_join(thread2, NULL);
+ if (err != 0)
+ throw string("Thread::join(): failed to join.");
+}
Added: trunk/drd/tests/std_list.stderr.exp
==============================================================================
--- trunk/drd/tests/std_list.stderr.exp (added)
+++ trunk/drd/tests/std_list.stderr.exp Wed Oct 23 12:37:44 2013
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/std_list.vgtest
==============================================================================
--- trunk/drd/tests/std_list.vgtest (added)
+++ trunk/drd/tests/std_list.vgtest Wed Oct 23 12:37:44 2013
@@ -0,0 +1,4 @@
+prereq: test -e std_list && ./supported_libpthread
+vgopts: --check-stack-var=yes --show-confl-seg=no
+prog: std_list
+stderr_filter: filter_stderr
Added: trunk/drd/tests/std_string.cpp
==============================================================================
--- trunk/drd/tests/std_string.cpp (added)
+++ trunk/drd/tests/std_string.cpp Wed Oct 23 12:37:44 2013
@@ -0,0 +1,67 @@
+/*
+ * Test program that uses std::string object from more than one thread and
+ * that also triggers a call to __GI_strlen() (from inside strdup()). See also
+ * https://bugs.kde.org/show_bug.cgi?id=326091.
+ */
+
+#include <list>
+#include <string>
+#include <cstring>
+#include <pthread.h>
+#include <unistd.h>
+
+char* list2byteArray()
+{
+ size_t data_size = 24;
+ char *data = new char[data_size];
+ for (size_t i = 0; i < data_size; i++)
+ data[i] = 'a';
+ data[data_size - 1] = 0;
+ char *ret = strdup(data);
+ delete[] data;
+ return ret;
+}
+
+int addRecord()
+{
+ char *data = list2byteArray();
+ usleep(100);
+ free(data);
+ return 0;
+}
+
+void *fillTable(void *ptr)
+{
+ for (int i = 0; i < 100; i++) {
+ std::string id("000");
+ id.append(1, 'a' + i);
+ std::list<std::string> record;
+ record.push_back("some data");
+ addRecord();
+ }
+ usleep(1000 * 1000);
+ return NULL;
+}
+
+int main(int argc, char* argv[])
+{
+ pthread_t thread[2];
+
+ for (int i = 0; i < sizeof(thread)/sizeof(thread[0]); i++) {
+ int ret = pthread_create(&thread[i], NULL, &fillTable, NULL);
+ if (ret) {
+ fprintf(stderr, "Failed to create thread %d: %d\n", i, ret);
+ return 1;
+ }
+ }
+
+ for (int i = 0; i < sizeof(thread)/sizeof(thread[0]); i++) {
+ int ret = pthread_join(thread[i], NULL);
+ if (ret != 0) {
+ fprintf(stderr, "Failed to join thread %d: %d\n", i, ret);
+ return 1;
+ }
+ }
+
+ return 0;
+}
Added: trunk/drd/tests/std_string.stderr.exp
==============================================================================
--- trunk/drd/tests/std_string.stderr.exp (added)
+++ trunk/drd/tests/std_string.stderr.exp Wed Oct 23 12:37:44 2013
@@ -0,0 +1,3 @@
+
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Added: trunk/drd/tests/std_string.vgtest
==============================================================================
--- trunk/drd/tests/std_string.vgtest (added)
+++ trunk/drd/tests/std_string.vgtest Wed Oct 23 12:37:44 2013
@@ -0,0 +1,4 @@
+prereq: test -e std_string && ./supported_libpthread
+vgopts: --check-stack-var=yes --show-confl-seg=no
+prog: std_string
+stderr_filter: filter_stderr
|
|
From: <sv...@va...> - 2013-10-23 12:19:40
|
Author: bart
Date: Wed Oct 23 12:19:30 2013
New Revision: 13679
Log:
drd: Add strchr(), strcpy(), strcmp() and memcpy() intercepts (#326436)
Modified:
trunk/drd/drd_strmem_intercepts.c
Modified: trunk/drd/drd_strmem_intercepts.c
==============================================================================
--- trunk/drd/drd_strmem_intercepts.c (original)
+++ trunk/drd/drd_strmem_intercepts.c Wed Oct 23 12:19:30 2013
@@ -37,6 +37,33 @@
#include "pub_tool_clreq.h"
+#define STRCHR(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname)(const char* s, int c); \
+ char* VG_REPLACE_FUNCTION_ZU(soname,fnname)(const char* s, int c) \
+ { \
+ HChar ch = (HChar)c; \
+ const HChar* p = s; \
+ while (True) { \
+ if (*p == ch) return (HChar *)p; \
+ if (*p == 0) return NULL; \
+ p++; \
+ } \
+ }
+
+// Apparently index() is the same thing as strchr()
+#if defined(VGO_linux)
+ STRCHR(VG_Z_LIBC_SONAME, strchr)
+ STRCHR(VG_Z_LIBC_SONAME, index)
+ STRCHR(VG_Z_LD_LINUX_SO_2, strchr)
+ STRCHR(VG_Z_LD_LINUX_SO_2, index)
+ STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, strchr)
+ STRCHR(VG_Z_LD_LINUX_X86_64_SO_2, index)
+#elif defined(VGO_darwin)
+ STRCHR(VG_Z_LIBC_SONAME, strchr)
+ STRCHR(VG_Z_LIBC_SONAME, index)
+#endif
+
+
#define STRNLEN(soname, fnname) \
SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* str, SizeT n ); \
SizeT VG_REPLACE_FUNCTION_ZU(soname,fnname) ( const char* str, SizeT n ) \
@@ -75,6 +102,147 @@
STRLEN(VG_Z_LIBC_SONAME, strlen)
#endif
+
+#define STRCPY(soname, fnname) \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname)(char* dst, const char* src); \
+ char* VG_REPLACE_FUNCTION_ZU(soname, fnname)(char* dst, const char* src) \
+ { \
+ HChar* dst_orig = dst; \
+ \
+ while (*src) *dst++ = *src++; \
+ *dst = 0; \
+ \
+ return dst_orig; \
+ }
+
+#if defined(VGO_linux)
+ STRCPY(VG_Z_LIBC_SONAME, strcpy)
+#elif defined(VGO_darwin)
+ STRCPY(VG_Z_LIBC_SONAME, strcpy)
+#endif
+
+
+#define STRCMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname)(const char* s1, const char* s2); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname)(const char* s1, const char* s2) \
+ { \
+ register UChar c1; \
+ register UChar c2; \
+ while (True) { \
+ c1 = *(UChar *)s1; \
+ c2 = *(UChar *)s2; \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((UChar)c1 < (UChar)c2) return -1; \
+ if ((UChar)c1 > (UChar)c2) return 1; \
+ return 0; \
+ }
+
+#if defined(VGO_linux)
+ STRCMP(VG_Z_LIBC_SONAME, strcmp)
+ STRCMP(VG_Z_LD_LINUX_X86_64_SO_2, strcmp)
+ STRCMP(VG_Z_LD64_SO_1, strcmp)
+#elif defined(VGO_darwin)
+ STRCMP(VG_Z_LIBC_SONAME, strcmp)
+#endif
+
+
+#define MEMCPY(soname, fnname) \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ (void *dst, const void *src, SizeT len); \
+ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ (void *dst, const void *src, SizeT len) \
+ { \
+ const Addr WS = sizeof(UWord); /* 8 or 4 */ \
+ const Addr WM = WS - 1; /* 7 or 3 */ \
+ \
+ if (len > 0) { \
+ if (dst < src) { \
+ \
+ /* Copying backwards. */ \
+ SizeT n = len; \
+ Addr d = (Addr)dst; \
+ Addr s = (Addr)src; \
+ \
+ if (((s^d) & WM) == 0) { \
+ /* s and d have same UWord alignment. */ \
+ /* Pull up to a UWord boundary. */ \
+ while ((s & WM) != 0 && n >= 1) \
+ { *(UChar*)d = *(UChar*)s; s += 1; d += 1; n -= 1; } \
+ /* Copy UWords. */ \
+ while (n >= WS) \
+ { *(UWord*)d = *(UWord*)s; s += WS; d += WS; n -= WS; } \
+ if (n == 0) \
+ return dst; \
+ } \
+ if (((s|d) & 1) == 0) { \
+ /* Both are 16-aligned; copy what we can thusly. */ \
+ while (n >= 2) \
+ { *(UShort*)d = *(UShort*)s; s += 2; d += 2; n -= 2; } \
+ } \
+ /* Copy leftovers, or everything if misaligned. */ \
+ while (n >= 1) \
+ { *(UChar*)d = *(UChar*)s; s += 1; d += 1; n -= 1; } \
+ \
+ } else if (dst > src) { \
+ \
+ SizeT n = len; \
+ Addr d = ((Addr)dst) + n; \
+ Addr s = ((Addr)src) + n; \
+ \
+ /* Copying forwards. */ \
+ if (((s^d) & WM) == 0) { \
+ /* s and d have same UWord alignment. */ \
+ /* Back down to a UWord boundary. */ \
+ while ((s & WM) != 0 && n >= 1) \
+ { s -= 1; d -= 1; *(UChar*)d = *(UChar*)s; n -= 1; } \
+ /* Copy UWords. */ \
+ while (n >= WS) \
+ { s -= WS; d -= WS; *(UWord*)d = *(UWord*)s; n -= WS; } \
+ if (n == 0) \
+ return dst; \
+ } \
+ if (((s|d) & 1) == 0) { \
+ /* Both are 16-aligned; copy what we can thusly. */ \
+ while (n >= 2) \
+ { s -= 2; d -= 2; *(UShort*)d = *(UShort*)s; n -= 2; } \
+ } \
+ /* Copy leftovers, or everything if misaligned. */ \
+ while (n >= 1) \
+ { s -= 1; d -= 1; *(UChar*)d = *(UChar*)s; n -= 1; } \
+ \
+ } \
+ } \
+ \
+ return dst; \
+ }
+
+#if defined(VGO_linux)
+ MEMCPY(VG_Z_LIBC_SONAME, memcpy)
+ MEMCPY(VG_Z_LD_SO_1, memcpy) /* ld.so.1 */
+ MEMCPY(VG_Z_LD64_SO_1, memcpy) /* ld64.so.1 */
+ /* icc9 blats these around all over the place. Not only in the main
+ executable but various .so's. They are highly tuned and read
+ memory beyond the source boundary (although work correctly and
+ never go across page boundaries), so give errors when run
+ natively, at least for misaligned source arg. Just intercepting
+ in the exe only until we understand more about the problem. See
+ http://bugs.kde.org/show_bug.cgi?id=139776
+ */
+ MEMCPY(NONE, _intel_fast_memcpy)
+
+#elif defined(VGO_darwin)
+# if DARWIN_VERS <= DARWIN_10_6
+ MEMCPY(VG_Z_LIBC_SONAME, memcpy)
+# endif
+ MEMCPY(VG_Z_LIBC_SONAME, memcpyZDVARIANTZDsse3x) /* memcpy$VARIANT$sse3x */
+ MEMCPY(VG_Z_LIBC_SONAME, memcpyZDVARIANTZDsse42) /* memcpy$VARIANT$sse42 */
+
+#endif
+
+
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
|
|
From: Julian S. <js...@ac...> - 2013-10-23 11:04:42
|
I've just created VALGRIND_3_9_BRANCH and VEX_3_9_BRANCH. I'll make any last minute documentation and NEWS changes and critical bug fixes there, and backport those changes to the trunk. Please consider the trunk to be once again open to checkins as usual. If no serious problems turn up in testing, I'd plan to release 3.9 by the end of next week at the latest. J |
|
From: <sv...@va...> - 2013-10-23 10:56:47
|
Author: sewardj
Date: Wed Oct 23 10:56:38 2013
New Revision: 13678
Log:
Bump the version on the branch.
Modified:
branches/VALGRIND_3_9_BRANCH/configure.ac
Modified: branches/VALGRIND_3_9_BRANCH/configure.ac
==============================================================================
--- branches/VALGRIND_3_9_BRANCH/configure.ac (original)
+++ branches/VALGRIND_3_9_BRANCH/configure.ac Wed Oct 23 10:56:38 2013
@@ -8,7 +8,7 @@
##------------------------------------------------------------##
# Process this file with autoconf to produce a configure script.
-AC_INIT([Valgrind],[3.9.0.SVN],[val...@li...])
+AC_INIT([Valgrind],[3.9.0.PRE1],[val...@li...])
AC_CONFIG_SRCDIR(coregrind/m_main.c)
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign subdir-objects])
|
|
From: <sv...@va...> - 2013-10-23 10:46:24
|
Author: sewardj
Date: Wed Oct 23 10:46:17 2013
New Revision: 13677
Log:
Swizzle external.
Modified:
branches/VALGRIND_3_9_BRANCH/ (props changed)
|
|
From: <sv...@va...> - 2013-10-23 10:44:10
|
Author: sewardj
Date: Wed Oct 23 10:44:03 2013
New Revision: 13676
Log:
Create branches/VALGRIND_3_9_BRANCH as a copy of trunk r13675.
Added:
branches/VALGRIND_3_9_BRANCH/
- copied from r13675, trunk/
|
|
From: <sv...@va...> - 2013-10-23 10:39:46
|
Author: sewardj
Date: Wed Oct 23 10:39:35 2013
New Revision: 2795
Log:
Create branches/VEX_3_9_BRANCH as a copy of trunk r2794.
Added:
branches/VEX_3_9_BRANCH/
- copied from r2794, trunk/
|
|
From: Philippe W. <phi...@sk...> - 2013-10-23 04:41:22
|
valgrind revision: 13675 VEX revision: 2794 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-10-22 20:00:13 PDT Ended at 2013-10-22 21:40:37 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 == 567 tests, 32 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_cond_destroy_busy (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) --tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.23s no: 1.5s ( 6.6x, -----) me: 2.8s (12.2x, -----) ca:18.2s (79.1x, -----) he: 1.7s ( 7.3x, -----) ca: 5.3s (23.1x, -----) dr: 1.6s ( 7.0x, -----) ma: 2.1s ( 9.1x, -----) bigcode1 valgrind-old:0.23s no: 1.7s ( 7.2x, -9.2%) me: 2.9s (12.6x, -2.8%) ca:18.2s (79.1x, -0.1%) he: 1.8s ( 7.6x, -4.8%) ca: 5.3s (23.1x, -0.2%) dr: 1.6s ( 7.1x, -1.2%) ma: 2.1s ( 9.3x, -1.4%) -- bigcode2 -- bigcode2 valgrind-new:0.23s no: 1.6s ( 6.7x, -----) me: 2.9s (12.7x, -----) ca:18.4s (80.1x, -----) he: 2.1s ( 9.2x, -----) ca: 5.5s (23.7x, -----) dr: 1.6s ( 7.1x, -----) ma: 2.1s ( 9.2x, -----) bigcode2 valgrind-old:0.23s no: 1.6s ( 6.8x, -0.6%) me: 2.9s (12.7x, 0.0%) ca:18.3s (79.6x, 0.7%) he: 2.1s ( 9.0x, 1.4%) ca: 5.5s (24.0x, -1.3%) dr: 1.6s ( 7.1x, 0.0%) ma: 2.1s ( 9.3x, -1.4%) -- bz2 -- bz2 valgrind-new:0.72s no: 4.5s ( 6.3x, -----) me:11.8s (16.4x, -----) ca:25.9s (36.0x, -----) he:14.6s (20.3x, -----) ca:24.4s (33.9x, -----) dr:19.0s (26.3x, -----) ma: 4.7s ( 6.5x, -----) bz2 valgrind-old:0.72s no: 4.6s ( 6.3x, -0.2%) me:12.1s (16.8x, -1.9%) ca:26.0s (36.1x, -0.2%) he:14.8s (20.5x, -1.2%) ca:24.2s (33.6x, 0.7%) dr:19.3s (26.8x, -1.7%) ma: 4.7s ( 6.5x, -0.2%) -- fbench -- fbench valgrind-new:0.34s no: 2.1s ( 6.3x, -----) me: 5.2s (15.3x, -----) ca: 8.4s (24.9x, -----) he: 5.1s (14.9x, -----) ca: 7.5s (22.1x, -----) dr: 5.0s (14.6x, -----) ma: 2.1s ( 6.3x, -----) fbench valgrind-old:0.34s no: 2.1s ( 6.2x, 1.4%) me: 5.4s (15.9x, -4.2%) ca: 8.5s (24.9x, -0.4%) he: 5.1s (15.0x, -0.6%) ca: 7.4s (21.8x, 1.3%) dr: 5.0s (14.6x, 0.0%) ma: 2.1s ( 6.3x, 0.0%) -- ffbench -- ffbench valgrind-new:0.45s no: 1.0s ( 2.3x, -----) me: 2.6s ( 5.7x, -----) ca: 2.5s ( 5.5x, -----) he: 7.5s (16.6x, -----) ca: 7.0s (15.4x, -----) dr: 5.2s (11.6x, -----) ma: 1.0s ( 2.2x, -----) ffbench valgrind-old:0.45s no: 1.0s ( 2.3x, -1.0%) me: 2.5s ( 5.6x, 1.6%) ca: 2.5s ( 5.5x, -0.4%) he: 7.0s (15.6x, 5.8%) ca: 7.3s (16.1x, -4.5%) dr: 5.2s (11.6x, 0.6%) ma: 1.0s ( 2.2x, -1.0%) -- heap -- heap valgrind-new:0.41s no: 2.4s ( 5.9x, -----) me:10.1s (24.6x, -----) ca:13.2s (32.3x, -----) he:12.7s (30.9x, -----) ca:12.1s (29.5x, -----) dr: 8.3s (20.1x, -----) ma: 8.7s (21.2x, -----) heap valgrind-old:0.41s no: 2.4s ( 6.0x, -0.4%) me: 9.8s (24.0x, 2.7%) ca:13.3s (32.5x, -0.8%) he:12.7s (31.1x, -0.5%) ca:12.1s (29.4x, 0.2%) dr: 8.2s (20.0x, 0.5%) ma: 8.8s (21.4x, -0.9%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.42s no: 2.8s ( 6.6x, -----) me:14.1s (33.6x, -----) ca:14.2s (33.8x, -----) he:14.5s (34.5x, -----) ca:13.1s (31.2x, -----) dr: 9.1s (21.7x, -----) ma: 9.0s (21.5x, -----) heap_pdb4 valgrind-old:0.42s no: 2.6s ( 6.1x, 6.5%) me:13.9s (33.1x, 1.6%) ca:14.1s (33.6x, 0.6%) he:14.5s (34.4x, 0.1%) ca:13.2s (31.5x, -0.8%) dr: 9.1s (21.7x, 0.0%) ma: 9.0s (21.4x, 0.6%) -- many-loss-records -- many-loss-records valgrind-new:0.03s no: 0.5s (17.7x, -----) me: 2.2s (73.7x, -----) ca: 1.9s (63.3x, -----) he: 2.0s (66.0x, -----) ca: 1.9s (61.7x, -----) dr: 1.5s (49.0x, -----) ma: 1.6s (52.7x, -----) many-loss-records valgrind-old:0.03s no: 0.5s (17.7x, 0.0%) me: 2.2s (72.0x, 2.3%) ca: 1.9s (63.0x, 0.5%) he: 2.0s (66.3x, -0.5%) ca: 1.8s (61.3x, 0.5%) dr: 1.5s (49.0x, 0.0%) ma: 1.6s (52.3x, 0.6%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.7s (10.4x, -----) me: 3.4s (48.6x, -----) ca: 4.7s (66.9x, -----) he: 5.2s (74.1x, -----) ca: 2.9s (41.3x, -----) dr: 2.2s (32.1x, -----) ma: 2.3s (33.1x, -----) many-xpts valgrind-old:0.07s no: 0.7s (10.6x, -1.4%) me: 3.4s (48.0x, 1.2%) ca: 4.7s (66.7x, 0.2%) he: 5.0s (72.0x, 2.9%) ca: 2.9s (41.4x, -0.3%) dr: 2.3s (32.3x, -0.4%) ma: 2.3s (33.1x, 0.0%) -- sarp -- sarp valgrind-new:0.02s no: 0.4s (19.5x, -----) me: 3.5s (175.5x, -----) ca: 3.0s (149.5x, -----) he:11.2s (562.0x, -----) ca: 1.8s (91.0x, -----) dr: 1.0s (50.5x, -----) ma: 0.4s (22.0x, -----) sarp valgrind-old:0.02s no: 0.4s (20.5x, -5.1%) me: 3.5s (175.0x, 0.3%) ca: 3.0s (147.5x, 1.3%) he:11.2s (561.0x, 0.2%) ca: 1.7s (83.0x, 8.8%) dr: 1.0s (49.5x, 2.0%) ma: 0.4s (21.0x, 4.5%) -- tinycc -- tinycc valgrind-new:0.32s no: 3.0s ( 9.3x, -----) me:14.2s (44.3x, -----) ca:17.3s (54.0x, -----) he:18.9s (59.0x, -----) ca:15.7s (49.1x, -----) dr:11.9s (37.3x, -----) ma: 3.9s (12.0x, -----) tinycc valgrind-old:0.32s no: 3.0s ( 9.3x, 0.0%) me:14.1s (44.0x, 0.8%) ca:17.3s (54.0x, -0.1%) he:19.0s (59.4x, -0.7%) ca:15.7s (49.2x, -0.1%) dr:12.0s (37.4x, -0.2%) ma: 3.8s (12.0x, 0.3%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 54m15.342s user 52m47.016s sys 0m20.689s |
|
From: Tom H. <to...@co...> - 2013-10-23 04:11:58
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2013-10-23 03:02:58 BST Ended at 2013-10-23 05:11:42 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 == 669 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-10-23 04:10:56
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 15 (Lovelock) Nightly build on bristol ( x86_64, Fedora 15 ) Started at 2013-10-23 03:15:32 BST Ended at 2013-10-23 05:10:40 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 == 669 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-10-23 04:10:16
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 14 (Laughlin) Nightly build on bristol ( x86_64, Fedora 14 ) Started at 2013-10-23 03:23:22 BST Ended at 2013-10-23 05:09:59 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 667 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 667 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) none/tests/fdleak_ipv4 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-10-23 04:50:48.128712152 +0100 --- new.short 2013-10-23 05:09:59.345758273 +0100 *************** *** 8,12 **** ! == 667 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) - none/tests/fdleak_ipv4 (stderr) --- 8,11 ---- ! == 667 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-10-23 04:09:37
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 13 (Goddard) Nightly build on bristol ( x86_64, Fedora 13 ) Started at 2013-10-23 03:35:21 BST Ended at 2013-10-23 05:09:24 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 648 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 648 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == none/tests/fdleak_ipv4 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_destroy_cond (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-10-23 04:50:43.408803988 +0100 --- new.short 2013-10-23 05:09:24.543456045 +0100 *************** *** 8,11 **** ! == 648 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == ! none/tests/fdleak_ipv4 (stderr) helgrind/tests/pth_barrier3 (stderr) --- 8,10 ---- ! == 648 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == helgrind/tests/pth_barrier3 (stderr) |
|
From: Tom H. <to...@co...> - 2013-10-23 04:09:00
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 9 (Sulphur) Nightly build on bristol ( x86_64, Fedora 9 ) Started at 2013-10-23 04:05:09 BST Ended at 2013-10-23 05:08:41 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 == 644 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: Tom H. <to...@co...> - 2013-10-23 04:08:47
|
valgrind revision: 13675 VEX revision: 2794 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.9.5-301.fc19.x86_64 x86_64 Vendor version: Fedora release 11 (Leonidas) Nightly build on bristol ( x86_64, Fedora 11 ) Started at 2013-10-23 03:43:03 BST Ended at 2013-10-23 05:08:29 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 646 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) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 646 tests, 2 stderr failures, 2 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/long_namespace_xml (stderr) none/tests/amd64/sse4-64 (stdout) none/tests/fdleak_ipv4 (stdout) none/tests/fdleak_ipv4 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2013-10-23 04:50:38.091907485 +0100 --- new.short 2013-10-23 05:08:29.077578168 +0100 *************** *** 8,14 **** ! == 646 tests, 2 stderr failures, 2 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/long_namespace_xml (stderr) none/tests/amd64/sse4-64 (stdout) - none/tests/fdleak_ipv4 (stdout) - none/tests/fdleak_ipv4 (stderr) --- 8,12 ---- ! == 646 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) |