You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(32) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
1
(30) |
2
(8) |
3
(5) |
4
(5) |
|
5
(3) |
6
(9) |
7
(5) |
8
(14) |
9
(17) |
10
(27) |
11
(10) |
|
12
(6) |
13
(10) |
14
(7) |
15
(16) |
16
(9) |
17
(14) |
18
(8) |
|
19
(5) |
20
(13) |
21
(21) |
22
(13) |
23
(4) |
24
(1) |
25
(4) |
|
26
(2) |
27
(7) |
28
(4) |
29
(5) |
30
(12) |
|
|
|
From: Rich C. <rc...@wi...> - 2015-04-08 02:49:10
|
I had a working arm qemu implementation installed.
I had no difficulty building vg for the following platform:
Maximum build arch: arm
Primary build arch: arm
Secondary build arch:
Build OS: linux
Primary build target: ARM_LINUX
Secondary build target:
Platform variant: vanilla
Primary -DVGPV string: -DVGPV_arm_linux_vanilla=1
Default supp files: exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp
When I run 'make regtest', vg fails with out of memory.
The first time I did this, I figured that the qemu emulation was causing
the issue, so I didn't pursue it. Perhaps there's some simple solution
for fixing the 'out-of-memory' error. The allocated bytes looks like
an overflow.
--- allexec32.stderr.exp 2014-02-15 01:57:24.000000000 +0100
+++ allexec32.stderr.out 2015-04-08 02:30:27.000000000 +0200
@@ -1,14 +1,39 @@
+core : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 4 rzB
+dinfo : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 4 rzB
+(null) : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 0 rzB
+demangle: 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 4 rzB
+ttaux : 0/ 0 max/curr mmap'd, 0/0 unsplit/split sb unmmap'd, 0/ 0 max/curr, 0/ 0 totalloc-blocks/bytes, 0 searches 4 rzB
+translate: no SP updates identified
+translate: PX: SPonly 0, UnwRegs 0, AllRegs 0, AllRegsAllInsns 0
+ tt/tc: 0 tt lookups requiring 0 probes
+ tt/tc: 0 fast-cache updates, 0 flushes
+ transtab: new 0 (0 -> 0; ratio 0.0) [0 scs] avg tce size 0
+ transtab: dumped 0 (0 -> ??) (sectors recycled 0)
+ transtab: discarded 0 (0 -> ??)
+scheduler: 0 event checks.
+scheduler: 0 indir transfers, 0 misses (1 in 0)
+scheduler: 0/0 major/minor sched events.
+ sanity: 0 cheap, 0 expensive checks.
+
+ Valgrind's memory management: out of memory:
+ newSuperblock's request for 4194304 bytes failed.
+ 4142292992 bytes have already been allocated.
+ Valgrind cannot continue. Sorry.
On Tue, 07 Apr 2015 16:44:24 +0200
Julian Seward <js...@ac...> wrote:
>
> Hi Torbjörn,
>
> Once again in Valgrind land we are having problems due to lack of
> nightly test machines for some architectures, especially mips32/64
> and arm32/64.
>
> In the context of the conversation below, I seem to remember you said
> something to the effect that you use QEMU to solve this problem for
> GMP. Do I remember correctly?
>
> If so, do you have any information that you can share, regarding
> configurations of QEMU and Linux distros for these targets? I am wondering
> if we can set up QEMU VMs for at least some of them, so I am writing to ask
> if you know which QEMU+distro combinations work well enough to actually be
> useful.
>
> Thanks,
>
> J
>
>
>
> -------- Forwarded Message --------
> Subject: Re: [Gcc-cfarm-users] Is there a mips(64)el box?
> Date: Fri, 10 Oct 2014 11:28:39 +0200
> From: Julian Seward <js...@ac...>
> Reply-To: js...@ac...
> To: Torbjörn Granlund <tg...@gm...>
> CC: Sergio Durigan Junior <ser...@re...>, gcc...@gn...,
> Philippe Waroquiers <phi...@sk...>
>
> On 10/10/2014 09:38 AM, Torbjörn Granlund wrote:
> > The only machines which are actually alive which are useful TO ME are
> > the two power7 machines. They allowed me to improve the performance of
> > my code for the chips, and let me do regular testing for ppc64 and AIX.
>
> The Power7 machine is also useful for Valgrind support. Without it it
> would be more difficult to maintain the ppc64 Valgrind port.
>
> There are (or were, at one time) a lot of machines in the farm, but most
> of them were x86 variants, which IMO are the least valuable because that
> hardware is most widely available. What the farm is really useful
> for is the more obscure stuff, viz, MIPS, PPC, ARM, which are harder to
> get hold of. For sure if there were fast, solid MIPS32/64 and AArch32/64
> machines, they would be useful for Valgrind testing and development.
>
> My impression is that it would be preferable to have fewer machines in
> the farm, but concentrate on providing at least one reliable, fast
> implementation of each of MIPS, PPC and ARM (32 and 64 bit in all
> cases). That is, to try and emphasise quality (breadth and reliability
> of supported targets) over quantity (numbers of machines).
>
> J
>
>
>
>
> ------------------------------------------------------------------------------
> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
> Develop your own process in accordance with the BPMN 2 standard
> Learn Process modeling best practices with Bonita BPM through live exercises
> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
> _______________________________________________
> Valgrind-developers mailing list
> Val...@li...
> https://lists.sourceforge.net/lists/listinfo/valgrind-developers
--
Rich Coe rc...@wi...
|
|
From: Petar J. <mip...@gm...> - 2015-04-08 02:40:32
|
Hi Florian, I have just given a second look to this issue. It seems to me that if we want to make sure SysRes is always correctly initialized (i.e. to make sure _valEx and v1 in guest state are set to zero for non-pipe calls or for unsuccessful pipe call, we need to modify several spots for MIPS: - within VG_(do_syscall), after syscall is executed - ML_(do_syscall_for_client_WRK) in syscall-mips64-linux.S - putSyscallStatusIntoGuestState - hack around vki_ucontext and VG_UCONTEXT_SYSCALL_SYSRES And we would be doing it to satisfy condition sr_EQ introduced in r15060 that's used for assert only. Do you think it is worth adding these changes and workarounds? If you believe so, I will make the necessary changes. Regards, Petar On Sat, Apr 4, 2015 at 5:15 AM, Petar Jovanovic <mip...@gm...> wrote: > > On Fri, Apr 3, 2015 at 4:29 PM, Florian Krohm <fl...@ei...> > wrote: > >> Yes. But comparing _valEx makes sense when it has a deterministic value >> (i.e. after a pipe call). So not comparing the _valEx value at all does >> not sound right either. > > > I agree. > > >> How is this (for mips64): >> >> Index: coregrind/m_syscall.c >> =================================================================== >> --- coregrind/m_syscall.c (revision 15062) >> +++ coregrind/m_syscall.c (working copy) >> @@ -859,6 +859,7 @@ >> ULong V0 = do_syscall_WRK(a1,a2,a3,a4,a5,a6,sysno,v1_a3); >> ULong V1 = (ULong)v1_a3[0]; >> ULong A3 = (ULong)v1_a3[1]; >> + if (sysno != _NR_pipe) V1 = 0; // V1 is unused for this syscall >> return VG_(mk_SysRes_mips64_linux)( V0, V1, A3 ); >> >> #else >> >> Does that help? >> >> > I have tested a similar change right away, but it was not sufficient. > I believe I need to modify at least putSyscallStatusIntoGuestState(), > will see if anything else is missing after more testing. > > Petar > |
|
From: <sv...@va...> - 2015-04-07 20:44:03
|
Author: florian Date: Tue Apr 7 21:43:55 2015 New Revision: 15075 Log: Certain kernels on s390 provide extra read permissions on executable segments. See discussion here: https://bugs.kde.org/show_bug.cgi?id=345824#c4 Making sure that rx and x compare equal. Modified: trunk/coregrind/m_aspacemgr/aspacemgr-linux.c Modified: trunk/coregrind/m_aspacemgr/aspacemgr-linux.c ============================================================================== --- trunk/coregrind/m_aspacemgr/aspacemgr-linux.c (original) +++ trunk/coregrind/m_aspacemgr/aspacemgr-linux.c Tue Apr 7 21:43:55 2015 @@ -770,7 +770,7 @@ const HChar* filename ) { Int iLo, iHi, i; - Bool sloppyXcheck; + Bool sloppyXcheck, sloppyRcheck; /* If a problem has already been detected, don't continue comparing segments, so as to avoid flooding the output with error @@ -814,6 +814,14 @@ sloppyXcheck = False; # endif + /* Some kernels on s390 provide 'r' permission even when it was not + explicitly requested. It seems that 'x' permission implies 'r'. */ +# if defined(VGA_s390x) + sloppyRcheck = True; +# else + sloppyRcheck = False; +# endif + /* NSegments iLo .. iHi inclusive should agree with the presented data. */ for (i = iLo; i <= iHi; i++) { @@ -868,6 +876,11 @@ seg_prot |= VKI_PROT_EXEC; } + if (sloppyRcheck && (prot & (VKI_PROT_EXEC | VKI_PROT_READ)) == + (VKI_PROT_EXEC | VKI_PROT_READ)) { + seg_prot |= VKI_PROT_READ; + } + same = same && seg_prot == prot && (cmp_devino |
|
From: Julian S. <js...@ac...> - 2015-04-07 14:44:35
|
Hi Torbjörn, Once again in Valgrind land we are having problems due to lack of nightly test machines for some architectures, especially mips32/64 and arm32/64. In the context of the conversation below, I seem to remember you said something to the effect that you use QEMU to solve this problem for GMP. Do I remember correctly? If so, do you have any information that you can share, regarding configurations of QEMU and Linux distros for these targets? I am wondering if we can set up QEMU VMs for at least some of them, so I am writing to ask if you know which QEMU+distro combinations work well enough to actually be useful. Thanks, J -------- Forwarded Message -------- Subject: Re: [Gcc-cfarm-users] Is there a mips(64)el box? Date: Fri, 10 Oct 2014 11:28:39 +0200 From: Julian Seward <js...@ac...> Reply-To: js...@ac... To: Torbjörn Granlund <tg...@gm...> CC: Sergio Durigan Junior <ser...@re...>, gcc...@gn..., Philippe Waroquiers <phi...@sk...> On 10/10/2014 09:38 AM, Torbjörn Granlund wrote: > The only machines which are actually alive which are useful TO ME are > the two power7 machines. They allowed me to improve the performance of > my code for the chips, and let me do regular testing for ppc64 and AIX. The Power7 machine is also useful for Valgrind support. Without it it would be more difficult to maintain the ppc64 Valgrind port. There are (or were, at one time) a lot of machines in the farm, but most of them were x86 variants, which IMO are the least valuable because that hardware is most widely available. What the farm is really useful for is the more obscure stuff, viz, MIPS, PPC, ARM, which are harder to get hold of. For sure if there were fast, solid MIPS32/64 and AArch32/64 machines, they would be useful for Valgrind testing and development. My impression is that it would be preferable to have fewer machines in the farm, but concentrate on providing at least one reliable, fast implementation of each of MIPS, PPC and ARM (32 and 64 bit in all cases). That is, to try and emphasise quality (breadth and reliability of supported targets) over quantity (numbers of machines). J |
|
From: <sv...@va...> - 2015-04-07 09:36:42
|
Author: sewardj
Date: Tue Apr 7 10:36:35 2015
New Revision: 3122
Log:
x86 front and back ends: track vex r3120, which changed the type of
Iop_Sqrt64Fx2 and Iop_Sqrt32Fx4.
Modified:
trunk/priv/guest_x86_toIR.c
trunk/priv/host_x86_isel.c
Modified: trunk/priv/guest_x86_toIR.c
==============================================================================
--- trunk/priv/guest_x86_toIR.c (original)
+++ trunk/priv/guest_x86_toIR.c Tue Apr 7 10:36:35 2015
@@ -7134,17 +7134,26 @@
Int alen;
IRTemp addr;
UChar rm = getIByte(delta);
+ // Sqrt32Fx4 and Sqrt64Fx2 take a rounding mode, which is faked
+ // up in the usual way.
+ Bool needsIRRM = op == Iop_Sqrt32Fx4 || op == Iop_Sqrt64Fx2;
if (epartIsReg(rm)) {
- putXMMReg( gregOfRM(rm),
- unop(op, getXMMReg(eregOfRM(rm))) );
+ IRExpr* src = getXMMReg(eregOfRM(rm));
+ /* XXXROUNDINGFIXME */
+ IRExpr* res = needsIRRM ? binop(op, get_FAKE_roundingmode(), src)
+ : unop(op, src);
+ putXMMReg( gregOfRM(rm), res );
DIP("%s %s,%s\n", opname,
nameXMMReg(eregOfRM(rm)),
nameXMMReg(gregOfRM(rm)) );
return delta+1;
} else {
addr = disAMode ( &alen, sorb, delta, dis_buf );
- putXMMReg( gregOfRM(rm),
- unop(op, loadLE(Ity_V128, mkexpr(addr))) );
+ IRExpr* src = loadLE(Ity_V128, mkexpr(addr));
+ /* XXXROUNDINGFIXME */
+ IRExpr* res = needsIRRM ? binop(op, get_FAKE_roundingmode(), src)
+ : unop(op, src);
+ putXMMReg( gregOfRM(rm), res );
DIP("%s %s,%s\n", opname,
dis_buf,
nameXMMReg(gregOfRM(rm)) );
Modified: trunk/priv/host_x86_isel.c
==============================================================================
--- trunk/priv/host_x86_isel.c (original)
+++ trunk/priv/host_x86_isel.c Tue Apr 7 10:36:35 2015
@@ -3415,7 +3415,6 @@
case Iop_RecipEst32Fx4: op = Xsse_RCPF; goto do_32Fx4_unary;
case Iop_RSqrtEst32Fx4: op = Xsse_RSQRTF; goto do_32Fx4_unary;
- case Iop_Sqrt32Fx4: op = Xsse_SQRTF; goto do_32Fx4_unary;
do_32Fx4_unary:
{
HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
@@ -3424,16 +3423,6 @@
return dst;
}
- case Iop_Sqrt64Fx2: op = Xsse_SQRTF; goto do_64Fx2_unary;
- do_64Fx2_unary:
- {
- HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
- HReg dst = newVRegV(env);
- REQUIRE_SSE2;
- addInstr(env, X86Instr_Sse64Fx2(op, arg, dst));
- return dst;
- }
-
case Iop_RecipEst32F0x4: op = Xsse_RCPF; goto do_32F0x4_unary;
case Iop_RSqrtEst32F0x4: op = Xsse_RSQRTF; goto do_32F0x4_unary;
case Iop_Sqrt32F0x4: op = Xsse_SQRTF; goto do_32F0x4_unary;
@@ -3499,6 +3488,21 @@
if (e->tag == Iex_Binop) {
switch (e->Iex.Binop.op) {
+ case Iop_Sqrt64Fx2:
+ REQUIRE_SSE2;
+ /* fallthrough */
+ case Iop_Sqrt32Fx4: {
+ /* :: (rmode, vec) -> vec */
+ HReg arg = iselVecExpr(env, e->Iex.Binop.arg2);
+ HReg dst = newVRegV(env);
+ /* XXXROUNDINGFIXME */
+ /* set roundingmode here */
+ addInstr(env, (e->Iex.Binop.op == Iop_Sqrt64Fx2
+ ? X86Instr_Sse64Fx2 : X86Instr_Sse32Fx4)
+ (Xsse_SQRTF, arg, dst));
+ return dst;
+ }
+
case Iop_SetV128lo32: {
HReg dst = newVRegV(env);
HReg srcV = iselVecExpr(env, e->Iex.Binop.arg1);
|
|
From: <sv...@va...> - 2015-04-07 09:08:54
|
Author: sewardj
Date: Tue Apr 7 10:08:42 2015
New Revision: 15074
Log:
Track vex r3120, that changed the type of Iop_Sqrt64x2 and Iop_Sqrt32x4.
Modified:
trunk/memcheck/mc_translate.c
Modified: trunk/memcheck/mc_translate.c
==============================================================================
--- trunk/memcheck/mc_translate.c (original)
+++ trunk/memcheck/mc_translate.c Tue Apr 7 10:08:42 2015
@@ -2391,6 +2391,35 @@
return t1;
}
+/* --- 64Fx2 unary FP ops, with rounding mode --- */
+
+static
+IRAtom* unary64Fx2_w_rm ( MCEnv* mce, IRAtom* vRM, IRAtom* vatomX )
+{
+ /* Same scheme as binary64Fx2_w_rm. */
+ // "do" the vector arg
+ IRAtom* t1 = unary64Fx2(mce, vatomX);
+ // PCast the RM, and widen it to 128 bits
+ IRAtom* t2 = mkPCastTo(mce, Ity_V128, vRM);
+ // Roll it into the result
+ t1 = mkUifUV128(mce, t1, t2);
+ return t1;
+}
+
+/* --- ... and ... 32Fx4 versions of the same --- */
+
+static
+IRAtom* unary32Fx4_w_rm ( MCEnv* mce, IRAtom* vRM, IRAtom* vatomX )
+{
+ /* Same scheme as unary32Fx4_w_rm. */
+ IRAtom* t1 = unary32Fx4(mce, vatomX);
+ // PCast the RM, and widen it to 128 bits
+ IRAtom* t2 = mkPCastTo(mce, Ity_V128, vRM);
+ // Roll it into the result
+ t1 = mkUifUV128(mce, t1, t2);
+ return t1;
+}
+
/* --- --- Vector saturated narrowing --- --- */
@@ -3175,6 +3204,11 @@
/* V128-bit SIMD */
+ case Iop_Sqrt32Fx4:
+ return unary32Fx4_w_rm(mce, vatom1, vatom2);
+ case Iop_Sqrt64Fx2:
+ return unary64Fx2_w_rm(mce, vatom1, vatom2);
+
case Iop_ShrN8x16:
case Iop_ShrN16x8:
case Iop_ShrN32x4:
@@ -4251,7 +4285,6 @@
tl_assert(isOriginalAtom(mce,atom));
switch (op) {
- case Iop_Sqrt64Fx2:
case Iop_Abs64Fx2:
case Iop_Neg64Fx2:
case Iop_RSqrtEst64Fx2:
@@ -4269,7 +4302,6 @@
case Iop_Sqrt64Fx4:
return unary64Fx4(mce, vatom);
- case Iop_Sqrt32Fx4:
case Iop_RecipEst32Fx4:
case Iop_I32UtoFx4:
case Iop_I32StoFx4:
|
|
From: <sv...@va...> - 2015-04-07 09:08:04
|
Author: sewardj
Date: Tue Apr 7 10:07:51 2015
New Revision: 3121
Log:
amd64 front and back ends: track the change of type of Iop_Sqrt32Fx4
and Iop_Sqrt64Fx2 as introduced in r3120, in which they acquired a
rounding-mode argument.
Modified:
trunk/priv/guest_amd64_toIR.c
trunk/priv/host_amd64_isel.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Tue Apr 7 10:07:51 2015
@@ -8850,17 +8850,26 @@
Int alen;
IRTemp addr;
UChar rm = getUChar(delta);
+ // Sqrt32Fx4 and Sqrt64Fx2 take a rounding mode, which is faked
+ // up in the usual way.
+ Bool needsIRRM = op == Iop_Sqrt32Fx4 || op == Iop_Sqrt64Fx2;
if (epartIsReg(rm)) {
- putXMMReg( gregOfRexRM(pfx,rm),
- unop(op, getXMMReg(eregOfRexRM(pfx,rm))) );
+ IRExpr* src = getXMMReg(eregOfRexRM(pfx,rm));
+ /* XXXROUNDINGFIXME */
+ IRExpr* res = needsIRRM ? binop(op, get_FAKE_roundingmode(), src)
+ : unop(op, src);
+ putXMMReg( gregOfRexRM(pfx,rm), res );
DIP("%s %s,%s\n", opname,
nameXMMReg(eregOfRexRM(pfx,rm)),
nameXMMReg(gregOfRexRM(pfx,rm)) );
return delta+1;
} else {
addr = disAMode ( &alen, vbi, pfx, delta, dis_buf, 0 );
- putXMMReg( gregOfRexRM(pfx,rm),
- unop(op, loadLE(Ity_V128, mkexpr(addr))) );
+ IRExpr* src = loadLE(Ity_V128, mkexpr(addr));
+ /* XXXROUNDINGFIXME */
+ IRExpr* res = needsIRRM ? binop(op, get_FAKE_roundingmode(), src)
+ : unop(op, src);
+ putXMMReg( gregOfRexRM(pfx,rm), res );
DIP("%s %s,%s\n", opname,
dis_buf,
nameXMMReg(gregOfRexRM(pfx,rm)) );
@@ -23046,7 +23055,13 @@
delta += alen;
DIP("%s %s,%s\n", opname, dis_buf, nameXMMReg(rG));
}
- putYMMRegLoAndZU( rG, unop(op, mkexpr(arg)) );
+ // Sqrt32Fx4 and Sqrt64Fx2 take a rounding mode, which is faked
+ // up in the usual way.
+ Bool needsIRRM = op == Iop_Sqrt32Fx4 || op == Iop_Sqrt64Fx2;
+ /* XXXROUNDINGFIXME */
+ IRExpr* res = needsIRRM ? binop(op, get_FAKE_roundingmode(), mkexpr(arg))
+ : unop(op, mkexpr(arg));
+ putYMMRegLoAndZU( rG, res );
*uses_vvvv = False;
return delta;
}
Modified: trunk/priv/host_amd64_isel.c
==============================================================================
--- trunk/priv/host_amd64_isel.c (original)
+++ trunk/priv/host_amd64_isel.c Tue Apr 7 10:07:51 2015
@@ -3227,7 +3227,6 @@
case Iop_RecipEst32Fx4: op = Asse_RCPF; goto do_32Fx4_unary;
case Iop_RSqrtEst32Fx4: op = Asse_RSQRTF; goto do_32Fx4_unary;
- case Iop_Sqrt32Fx4: op = Asse_SQRTF; goto do_32Fx4_unary;
do_32Fx4_unary:
{
HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
@@ -3236,15 +3235,6 @@
return dst;
}
- case Iop_Sqrt64Fx2: op = Asse_SQRTF; goto do_64Fx2_unary;
- do_64Fx2_unary:
- {
- HReg arg = iselVecExpr(env, e->Iex.Unop.arg);
- HReg dst = newVRegV(env);
- addInstr(env, AMD64Instr_Sse64Fx2(op, arg, dst));
- return dst;
- }
-
case Iop_RecipEst32F0x4: op = Asse_RCPF; goto do_32F0x4_unary;
case Iop_RSqrtEst32F0x4: op = Asse_RSQRTF; goto do_32F0x4_unary;
case Iop_Sqrt32F0x4: op = Asse_SQRTF; goto do_32F0x4_unary;
@@ -3313,6 +3303,19 @@
if (e->tag == Iex_Binop) {
switch (e->Iex.Binop.op) {
+ case Iop_Sqrt64Fx2:
+ case Iop_Sqrt32Fx4: {
+ /* :: (rmode, vec) -> vec */
+ HReg arg = iselVecExpr(env, e->Iex.Binop.arg2);
+ HReg dst = newVRegV(env);
+ /* XXXROUNDINGFIXME */
+ /* set roundingmode here */
+ addInstr(env, (e->Iex.Binop.op == Iop_Sqrt64Fx2
+ ? AMD64Instr_Sse64Fx2 : AMD64Instr_Sse32Fx4)
+ (Asse_SQRTF, arg, dst));
+ return dst;
+ }
+
/* FIXME: could we generate MOVQ here? */
case Iop_SetV128lo64: {
HReg dst = newVRegV(env);
|
Author: florian
Date: Mon Apr 6 22:34:30 2015
New Revision: 15073
Log:
Followup to r14898 which changes the storage of segment names by
putting them into a string table.
This patch adds reference counting to segment names and frees them
when they are no longer used. The so freed memory can be reclaimed to
store future segment names.
New file coregrind/m_aspacemgr/aspacemgr-segnames.c which has all the
code dealing with segment names. Carved out of aspacemgr-linux.c
Detailled comments in the code.
Fixes BZ 344559.
Added:
trunk/coregrind/m_aspacemgr/aspacemgr-segnames.c
Modified:
trunk/NEWS
trunk/coregrind/Makefile.am
trunk/coregrind/m_aspacemgr/aspacemgr-linux.c
trunk/coregrind/m_aspacemgr/priv_aspacemgr.h
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Mon Apr 6 22:34:30 2015
@@ -140,6 +140,7 @@
obvious and non-obvious issues
344512 Fix unhandled syscall: unix:348 (__pthread_chdir) and unhandled
syscall: unix:349 (__pthread_fchdir) on OS X
+344559 Garbage collection of unused segment names in address space manager
344560 Fix stack traces missing penultimate frame on OS X
344621 Fix memcheck/tests/err_disable4 test on OS X
344686 Fix suppression for pthread_rwlock_init on OS X 10.10
Modified: trunk/coregrind/Makefile.am
==============================================================================
--- trunk/coregrind/Makefile.am (original)
+++ trunk/coregrind/Makefile.am Mon Apr 6 22:34:30 2015
@@ -312,6 +312,7 @@
m_aspacehl.c \
m_aspacemgr/aspacemgr-common.c \
m_aspacemgr/aspacemgr-linux.c \
+ m_aspacemgr/aspacemgr-segnames.c \
m_coredump/coredump-elf.c \
m_coredump/coredump-macho.c \
m_debuginfo/misc.c \
Modified: trunk/coregrind/m_aspacemgr/aspacemgr-linux.c
==============================================================================
--- trunk/coregrind/m_aspacemgr/aspacemgr-linux.c (original)
+++ trunk/coregrind/m_aspacemgr/aspacemgr-linux.c Mon Apr 6 22:34:30 2015
@@ -280,27 +280,6 @@
# define VG_N_SEGMENTS 30000
#endif
-/* Max number of segment file names we can track. These are big (1002
- bytes) so on Android limit the space usage to ~1MB. */
-#if defined(VGPV_arm_linux_android) \
- || defined(VGPV_x86_linux_android) \
- || defined(VGPV_mips32_linux_android) \
- || defined(VGPV_arm64_linux_android)
-# define VG_N_SEGNAMES 1000
-#else
-# define VG_N_SEGNAMES 6000
-#endif
-
-/* Max length of a segment file name. FIXME: to be removed */
-#define VG_MAX_SEGNAMELEN 1000
-
-/* String table for segment names */
-
-/* FIXME: This is just for backward compatibility for now. To be adjusted. */
-static HChar segnames[VG_N_SEGNAMES * VG_MAX_SEGNAMELEN];
-static SizeT segnames_used = 0; /* number of characters used */
-static UInt num_segnames = 0; /* number of names in string table */
-
/* Array [0 .. nsegments_used-1] of all mappings. */
/* Sorted by .addr field. */
/* I: len may not be zero. */
@@ -379,48 +358,6 @@
#endif
-/*-----------------------------------------------------------------*/
-/*--- ---*/
-/*--- Segment name management. ---*/
-/*--- ---*/
-/*-----------------------------------------------------------------*/
-
-/* Searches the string table to find an index for the given name.
- If none is found, an index is allocated and the name stored.
- If the string is too long to store, return -1.
-*/
-static Int allocate_segname ( const HChar* name )
-{
- SizeT len, l, ix;
-
- aspacem_assert(name);
-
- if (0) VG_(debugLog)(0,"aspacem","allocate_segname %s\n", name);
-
- len = VG_(strlen)(name);
-
- /* first see if we already have the name. */
- for (ix = 0; ix < segnames_used; ix += l + 1) {
- l = VG_(strlen)(segnames + ix);
- if (l == len && VG_(strcmp)(name, segnames + ix) == 0) return ix;
- }
-
- /* Is there enough room in the string table? */
- if (len + 1 > (sizeof segnames) - segnames_used) {
- return -1;
- }
-
- ++num_segnames;
-
- /* copy it in */
- ix = segnames_used;
-
- VG_(strcpy)(segnames + segnames_used, name);
- segnames_used += len + 1;
-
- return ix;
-}
-
/*-----------------------------------------------------------------*/
/*--- ---*/
@@ -479,33 +416,15 @@
ML_(am_sprintf)(buf, fmt, len);
}
-/* Returns a sequence number for the fnIdx position in segnames.
- Used in aspacemgr debug output to associate a segment with
- the list of segments output at the beginning. */
-static Int fnIdx_seqnr(Int fnIdx)
-{
- SizeT ix;
- Int seqnr = -1;
-
- for (ix = 0; ix < segnames_used; ix += VG_(strlen)(segnames + ix) + 1) {
- seqnr++;
- if (ix == fnIdx)
- return seqnr;
- }
-
- return -1;
-}
-
/* Show full details of an NSegment */
static void show_nsegment_full ( Int logLevel, Int segNo, const NSegment* seg )
{
HChar len_buf[20];
- const HChar* name = "(none)";
+ const HChar* name = VG_(am_get_segname)( seg->fnIdx );
- if (seg->fnIdx >= 0 && seg->fnIdx < segnames_used
- && segnames[seg->fnIdx] != 0)
- name = segnames + seg->fnIdx;
+ if (name == NULL)
+ name = "(none)";
show_len_concisely(len_buf, seg->start, seg->end);
@@ -520,7 +439,7 @@
seg->isCH ? 'H' : '-',
show_ShrinkMode(seg->smode),
seg->dev, seg->ino, seg->offset,
- fnIdx_seqnr(seg->fnIdx), seg->fnIdx,
+ VG_(am_segname_get_seqnr)(seg->fnIdx), seg->fnIdx,
name
);
}
@@ -567,7 +486,7 @@
seg->hasX ? 'x' : '-', seg->hasT ? 'T' : '-',
seg->isCH ? 'H' : '-',
seg->dev, seg->ino, seg->offset,
- fnIdx_seqnr(seg->fnIdx), seg->fnIdx
+ VG_(am_segname_get_seqnr)(seg->fnIdx), seg->fnIdx
);
break;
@@ -598,15 +517,10 @@
void VG_(am_show_nsegments) ( Int logLevel, const HChar* who )
{
Int i;
- SizeT ix;
VG_(debugLog)(logLevel, "aspacem",
- "<<< SHOW_SEGMENTS: %s (%d segments, %u segnames)\n",
- who, nsegments_used, num_segnames);
- i = 0;
- for (ix = 0; ix < segnames_used; ix += VG_(strlen)(segnames + ix) + 1) {
- VG_(debugLog)(logLevel, "aspacem",
- "(%d,%lu) %s\n", i++, ix, segnames + ix);
- }
+ "<<< SHOW_SEGMENTS: %s (%d segments)\n",
+ who, nsegments_used);
+ VG_(am_show_segnames)( logLevel, who);
for (i = 0; i < nsegments_used; i++)
show_nsegment( logLevel, i, &nsegments[i] );
VG_(debugLog)(logLevel, "aspacem",
@@ -618,10 +532,8 @@
has one. */
const HChar* VG_(am_get_filename)( NSegment const * seg )
{
- Int i;
aspacem_assert(seg);
- i = seg->fnIdx;
- return (i < 0) ? NULL : segnames + i;
+ return VG_(am_get_segname)( seg->fnIdx );
}
/* Collect up the start addresses of segments whose kind matches one of
@@ -709,8 +621,7 @@
case SkFileC: case SkFileV:
return
s->smode == SmFixed
- && (s->fnIdx == -1 ||
- (s->fnIdx >= 0 && s->fnIdx < segnames_used))
+ && VG_(am_sane_segname)(s->fnIdx)
&& !s->isCH;
case SkResvn:
@@ -764,6 +675,7 @@
+ ((ULong)s2->start) - ((ULong)s1->start) ) {
s1->end = s2->end;
s1->hasT |= s2->hasT;
+ VG_(am_dec_refcount)(s1->fnIdx);
return True;
}
break;
@@ -1441,6 +1353,8 @@
nsegments[i+1].offset
+= ((ULong)nsegments[i+1].start) - ((ULong)nsegments[i].start);
+ VG_(am_inc_refcount)(nsegments[i].fnIdx);
+
aspacem_assert(sane_NSegment(&nsegments[i]));
aspacem_assert(sane_NSegment(&nsegments[i+1]));
}
@@ -1500,7 +1414,11 @@
/* Now iLo .. iHi inclusive is the range of segment indices which
seg will replace. If we're replacing more than one segment,
- slide those above the range down to fill the hole. */
+ slide those above the range down to fill the hole. Before doing
+ that decrement the reference counters for the segments names of
+ the replaced segments. */
+ for (i = iLo; i <= iHi; ++i)
+ VG_(am_dec_refcount)(nsegments[i].fnIdx);
delta = iHi - iLo;
aspacem_assert(delta >= 0);
if (delta > 0) {
@@ -1597,7 +1515,7 @@
# endif // defined(VGP_arm_linux)
if (filename)
- seg.fnIdx = allocate_segname( filename );
+ seg.fnIdx = VG_(am_allocate_segname)( filename );
if (0) show_nsegment( 2,0, &seg );
add_segment( &seg );
@@ -1638,6 +1556,9 @@
aspacem_assert(sizeof(SizeT) == sizeof(void*));
aspacem_assert(sizeof(SSizeT) == sizeof(void*));
+ /* Initialise the string table for segment names. */
+ VG_(am_segnames_init)();
+
/* Check that we can store the largest imaginable dev, ino and
offset numbers in an NSegment. */
aspacem_assert(sizeof(seg.dev) == 8);
@@ -2080,7 +2001,7 @@
seg.mode = mode;
}
if (ML_(am_resolve_filename)(fd, buf, VKI_PATH_MAX)) {
- seg.fnIdx = allocate_segname( buf );
+ seg.fnIdx = VG_(am_allocate_segname)( buf );
}
}
add_segment( &seg );
@@ -2302,9 +2223,9 @@
seg.mode = mode;
}
if (name) {
- seg.fnIdx = allocate_segname( name );
+ seg.fnIdx = VG_(am_allocate_segname)( name );
} else if (ML_(am_resolve_filename)(fd, buf, VKI_PATH_MAX)) {
- seg.fnIdx = allocate_segname( buf );
+ seg.fnIdx = VG_(am_allocate_segname)( buf );
}
add_segment( &seg );
@@ -2609,7 +2530,7 @@
seg.mode = mode;
}
if (ML_(am_resolve_filename)(fd, buf, VKI_PATH_MAX)) {
- seg.fnIdx = allocate_segname( buf );
+ seg.fnIdx = VG_(am_allocate_segname)( buf );
}
add_segment( &seg );
Added: trunk/coregrind/m_aspacemgr/aspacemgr-segnames.c
==============================================================================
--- trunk/coregrind/m_aspacemgr/aspacemgr-segnames.c (added)
+++ trunk/coregrind/m_aspacemgr/aspacemgr-segnames.c Mon Apr 6 22:34:30 2015
@@ -0,0 +1,440 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
+
+/*--------------------------------------------------------------------*/
+/*--- Segment name management aspacemgr-segnames.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2015-2015 Florian Krohm
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Segment names are stored in a string table.
+
+ The string table is organised into slots of varying length. Slots are
+ adjacent and there are no holes between slots.
+ A slot consists of two parts:
+
+ (1) a fixed size overhead of length 4 bytes
+ (2) a variable size payload of up to 65535 bytes
+
+ The segment name is stored in the payload area. Therefore:
+ a segment name cannot be longer than 65535 bytes including the '\0'
+ terminator. This looks like a reasonable limitation.
+
+ Overall slot layout:
+
+ | 4 bytes | max 65535 bytes |
+ +-----------------------------+-------------------------+
+ | overhead | payload |
+ +-----------------------------+-------------------------+
+ ^ ^
+ | |
+ -4 +----- seg->fnIdx
+
+ Each slot is uniquely identified by an index which points to the first
+ byte of the payload area. It is this value that is stored in seg->fnIdx.
+ Note, that this value is at least 4.
+
+ A slot either holds a string or it is free. The status of a slot is
+ identified by the leftmost bit in the overhead field, the so called F-bit.
+ F-bit == 1 means that slot is free; otherwise it is occupied and holds a
+ string.
+
+ Slot containing a string (segment name):
+
+ bits | 1 | 15 | 16 |
+ +---+--------------+----------+-------------------------+
+ | 0 | refcount | slotsize | the string including \0 |
+ +---+--------------+----------+-------------------------+
+ ^ ^ ^
+ | | |
+ -4 -2 +----- seg->fnIdx
+
+ Segment names are reference counted. 15 bits are available which allows
+ for up to 32767 references. If the string is referenced more than 32767
+ times, the reference count will be frozen and the slot can never
+ become free. I'm not unduly concerned.
+ Two bytes are reserved to hold the size of the slot. Well, it's actually
+ the size of the payload aread (i.e. the size of the slot minus the
+ overhead). Ah well -- the name sticks.
+ With two bytes to store the size, the payload area can be at most 65535
+ bytes large.
+
+ A free slot looks like this:
+
+ bits | 1 | 31 | 16 |
+ +---+-------------------------+----------+--------------+
+ | 1 | index of next free slot | slotsize | .. unused .. |
+ +---+-------------------------+----------+--------------+
+ ^ ^
+ | |
+ -4 +----- seg->fnIdx
+
+ Free slots are chained together in a singly linked list. An index of
+ zero indicates the end of the chain. Note that zero cannot conflict
+ with an index into the string table as the minumum index is at least
+ four (see above).
+
+ The typical way to traverse the segment names is:
+
+ for (ix = overhead; (size = get_slotsize(ix)) != 0; ix += size + overhead) {
+ if (is_freeslot(ix))
+ do this
+ else
+ do that
+ }
+
+ Important detail: there is a sentinel at the end of the list, namely a
+ slot with a zero-sized payload area.
+
+ Whenever a new segment name needs to be stashed away, the list of free
+ slots is traversed and the first slot which is large enough is being taken
+ (first fit). There will be no splitting of slots, as that complicates
+ matters and without slot coalescing would lead to memory fragmentation.
+ So we leave it as is until a use case comes up that needs something better.
+*/
+
+#include "pub_core_basics.h" // types
+#include "priv_aspacemgr.h"
+
+// A few constants.
+enum {
+ refcount_size = sizeof(UShort),
+ slotsize_size = sizeof(UShort),
+ overhead = refcount_size + slotsize_size,
+ max_refcount = 0x7fff, // 2 bytes - F-bit
+ max_slotsize = 0xffff, // 2 bytes
+ max_slotindex = 0x7fffffff, // 4 bytes - F-bit
+ fbit_mask = 0x80,
+ end_of_chain = 0
+};
+
+/* The old segname implementation allowed for 1000 names on Android and
+ 6000 names on other platforms. Each name was allowed to be 1000 characters
+ long. That was very wasteful. */
+#define VG_TABLE_SIZE 1000000
+
+/* String table for segment names */
+
+static HChar segnames[VG_TABLE_SIZE]; /* her majesty, the string table */
+static SizeT segnames_used = 0; /* number of bytes used */
+static UInt num_segnames = 0; /* number of names in string table */
+static UInt num_slots = 0; /* number of slots in string table */
+static UInt freeslot_chain = end_of_chain;
+
+static Bool
+is_freeslot(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ return (segnames[ix - 4] & fbit_mask) != 0;
+}
+
+static void
+put_slotindex(UInt ix, UInt slotindex)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ if (slotindex != 0)
+ aspacem_assert(slotindex >= overhead && slotindex <= segnames_used);
+
+ slotindex |= fbit_mask << 24;
+ segnames[ix - 1] = slotindex & 0xFF; slotindex >>= 8;
+ segnames[ix - 2] = slotindex & 0xFF; slotindex >>= 8;
+ segnames[ix - 3] = slotindex & 0xFF; slotindex >>= 8;
+ segnames[ix - 4] = slotindex & 0xFF;
+}
+
+static UInt
+get_slotindex(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ aspacem_assert(is_freeslot(ix));
+
+ // Avoid unexpected sign extension
+ const UChar *unames = (const UChar *)segnames;
+
+ UInt slotindex = 0;
+ slotindex |= unames[ix - 4]; slotindex <<= 8;
+ slotindex |= unames[ix - 3]; slotindex <<= 8;
+ slotindex |= unames[ix - 2]; slotindex <<= 8;
+ slotindex |= unames[ix - 1];
+
+ return slotindex & max_slotindex; // removes the F-bit
+}
+
+static void
+put_slotsize(UInt ix, UInt size)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ aspacem_assert(size <= max_slotsize);
+ segnames[ix - 1] = size & 0xff;
+ segnames[ix - 2] = size >> 8;
+}
+
+static UInt
+get_slotsize(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+
+ // Avoid unexpected sign extension
+ const UChar *unames = (const UChar *)segnames;
+ if (is_freeslot(ix))
+ return (unames[ix] << 8) | unames[ix+1];
+ else
+ return (unames[ix - 2] << 8) | unames[ix - 1];
+}
+
+static void
+put_refcount(UInt ix, UInt rc)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ aspacem_assert(rc <= max_refcount);
+ // rc <= max_refcount ensures that the F-bit is zero
+ segnames[ix - 3] = rc & 0xff;
+ segnames[ix - 4] = rc >> 8;
+}
+
+static UInt
+get_refcount(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ // must not be a free slot
+ aspacem_assert(! is_freeslot(ix));
+
+ // Avoid unexpected sign extension
+ const UChar *unames = (const UChar *)segnames;
+ return (unames[ix - 4] << 8) | unames[ix - 3];
+}
+
+static void
+inc_refcount(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ UInt rc = get_refcount(ix);
+ if (rc != max_refcount)
+ put_refcount(ix, rc + 1);
+}
+
+static void
+dec_refcount(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+ UInt rc = get_refcount(ix);
+ aspacem_assert(rc > 0);
+ if (rc != max_refcount) {
+ --rc;
+ if (rc != 0) {
+ put_refcount(ix, rc);
+ } else {
+ UInt size = get_slotsize(ix);
+ /* Chain this slot in the freelist */
+ put_slotindex(ix, freeslot_chain);
+ get_slotindex(ix);
+ put_slotsize(ix + slotsize_size, size);
+ get_slotindex(ix);
+ freeslot_chain = ix;
+ --num_segnames;
+ if (0) VG_(am_show_nsegments)(0, "AFTER DECREASE rc -> 0");
+ }
+ }
+}
+
+static void
+put_sentinel(UInt ix)
+{
+ aspacem_assert(ix >= overhead && ix <= segnames_used);
+
+ put_refcount(ix, 0);
+ put_slotsize(ix, 0);
+}
+
+
+/* Searches the string table to find an index for the given name.
+ If none is found, an index is allocated and the name stored.
+ If running ouf of memory, return -1. */
+Int
+VG_(am_allocate_segname)(const HChar *name)
+{
+ UInt len, ix, size, next_freeslot;
+
+ aspacem_assert(name);
+
+ if (0) VG_(debugLog)(0, "aspacem", "allocate_segname %s\n", name);
+
+ len = VG_(strlen)(name);
+
+ /* First see if we already have the name. */
+ for (ix = overhead; (size = get_slotsize(ix)) != 0; ix += size + overhead) {
+ if (is_freeslot(ix)) continue;
+ if (VG_(strcmp)(name, segnames + ix) == 0) {
+ inc_refcount(ix);
+ return ix;
+ }
+ }
+
+ /* Is there a free slot in the string table from a previously "freed"
+ segment name ? */
+ Int prev;
+ for (prev = -1, ix = freeslot_chain; ix != end_of_chain;
+ prev = ix, ix = next_freeslot) {
+ next_freeslot = get_slotindex(ix); // next in chain
+ size = get_slotsize(ix);
+
+ if (size >= len + 1) {
+ /* Note, if the size of the slot is a lot larger than the length
+ of the string we're about to store in it, we could split the
+ slot into two. But that complicates matters and as we're not
+ doing any coalescing of adjacent free slots this could lead to
+ fragmentation. */
+ if (prev == -1)
+ freeslot_chain = next_freeslot;
+ else
+ put_slotindex(prev, next_freeslot);
+ put_refcount(ix, 1);
+ put_slotsize(ix, size);
+ VG_(strcpy)(segnames + ix, name);
+ ++num_segnames;
+ return ix;
+ }
+ }
+
+ /* We need to add a new name. */
+
+ /* Note, that we need at least two bytes in the payload. The reason is
+ that the payload area will be used to store the size of the slot when
+ the slot is on the freelist. */
+ if (len == 0) len = 1;
+
+ /* Is there enough room in the string table? The OVERHEAD is for the
+ sentinel following the payload of new slot. */
+ SizeT need = len + 1 + overhead;
+ if (need > (sizeof segnames) - segnames_used) {
+ return -1;
+ }
+
+ ++num_segnames;
+ ++num_slots;
+
+ /* copy it in */
+ ix = segnames_used;
+ put_refcount(ix, 1);
+ put_slotsize(ix, len + 1);
+ VG_(strcpy)(segnames + ix, name);
+ segnames_used += need;
+
+ /* Add sentinel at end of segment name list */
+ put_sentinel(segnames_used);
+
+ return ix;
+}
+
+/* Debugging output */
+void
+VG_(am_show_segnames)(Int logLevel, const HChar *prefix)
+{
+ UInt size, ix, i;
+
+ VG_(debugLog)(logLevel, "aspacem", "%u segment names in %u slots\n",
+ num_segnames, num_slots);
+
+ if (freeslot_chain == end_of_chain)
+ VG_(debugLog)(logLevel, "aspacem", "freelist is empty\n");
+ else
+ VG_(debugLog)(logLevel, "aspacem", "freelist begins at %u\n",
+ freeslot_chain);
+ for (i = 0, ix = overhead; (size = get_slotsize(ix)) != 0;
+ ix += size + overhead, ++i) {
+ if (is_freeslot(ix))
+ VG_(debugLog)(logLevel, "aspacem",
+ "(%u,%u,0) [free slot: size=%u next=%u]\n", i, ix,
+ get_slotsize(ix), get_slotindex(ix));
+ else
+ VG_(debugLog)(logLevel, "aspacem",
+ "(%u,%u,%u) %s\n", i, ix, get_refcount(ix),
+ segnames + ix);
+ }
+}
+
+/* Returns a sequence number for the fnIdx position in segnames.
+ Used in aspacemgr debug output to associate a segment with
+ a segment name. */
+Int
+VG_(am_segname_get_seqnr)(Int fnIdx)
+{
+ SizeT ix, size;
+ Int seqnr = -1;
+
+ if (fnIdx == -1) return -1; // shortcut
+
+ for (ix = overhead; (size = get_slotsize(ix)) != 0; ix += size + overhead) {
+ seqnr++;
+ if (ix == fnIdx)
+ return seqnr;
+ }
+
+ // We should always find the given index; something's busted
+ aspacem_assert(0);
+ return -1;
+}
+
+/* Initialise the string table for segment names. It contains an empty
+ string which is not referenced. */
+void
+VG_(am_segnames_init)(void)
+{
+ aspacem_assert(sizeof segnames >= overhead);
+
+ segnames_used = overhead;
+ put_sentinel(segnames_used);
+}
+
+/* Increase reference count of segment name identified by IX. */
+void
+VG_(am_inc_refcount)(Int ix)
+{
+ if (ix != -1)
+ inc_refcount(ix);
+}
+
+/* Decrease reference count of segment name identified by IX. */
+void
+VG_(am_dec_refcount)(Int ix)
+{
+ if (ix != -1)
+ dec_refcount(ix);
+}
+
+Bool
+VG_(am_sane_segname)(Int ix)
+{
+ return ix == -1 || (ix >= overhead && ix < segnames_used);
+}
+
+const HChar *
+VG_(am_get_segname)(Int ix)
+{
+ return (ix == -1) ? NULL : segnames + ix;
+}
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_aspacemgr/priv_aspacemgr.h
==============================================================================
--- trunk/coregrind/m_aspacemgr/priv_aspacemgr.h (original)
+++ trunk/coregrind/m_aspacemgr/priv_aspacemgr.h Mon Apr 6 22:34:30 2015
@@ -131,6 +131,29 @@
extern void ML_(am_do_sanity_check)( void );
+/* ------ Implemented in aspacemgr-segnames.c ------ */
+void VG_(am_segnames_init)(void);
+void VG_(am_show_segnames)(Int logLevel, const HChar *prefix);
+
+/* Put NAME into the string table of segment names. Return index for
+ future reference. A return value of -1 indicates that the segment name
+ could not be stored. Basically an out-of-memory situation. */
+Int VG_(am_allocate_segname)(const HChar *name);
+
+/* Increment / decrement the reference counter for this segment name. */
+void VG_(am_inc_refcount)(Int);
+void VG_(am_dec_refcount)(Int);
+
+/* Check whether the segname index is sane. */
+Bool VG_(am_sane_segname)(Int fnIdx);
+
+/* Return the segment name for the given index. Maybe return NULL, if the
+ segment does not have a name. */
+const HChar *VG_(am_get_segname)(Int fnIdx);
+
+/* Return the sequence number of the segment name */
+Int VG_(am_segname_get_seqnr)(Int fnIdx);
+
#endif // __PRIV_ASPACEMGR_H
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2015-04-06 19:41:20
|
Author: sewardj
Date: Mon Apr 6 20:41:12 2015
New Revision: 15072
Log:
arm64: remove redundant comment on test cases for FSQRT 2d_2d, 4s_4s, 2s_2s
(should have been included in r15071). No functional change.
Modified:
trunk/none/tests/arm64/fp_and_simd.c
Modified: trunk/none/tests/arm64/fp_and_simd.c
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.c (original)
+++ trunk/none/tests/arm64/fp_and_simd.c Mon Apr 6 20:41:12 2015
@@ -4585,9 +4585,9 @@
// fsqrt 2d,4s,2s
if (1) test_fsqrt_d_d(TyDF);
if (1) test_fsqrt_s_s(TySF);
- if (1) test_fsqrt_2d_2d(TySF); // need to change primop type
- if (1) test_fsqrt_4s_4s(TyDF); // ditto
- if (1) test_fsqrt_2s_2s(TySF); // ditto
+ if (1) test_fsqrt_2d_2d(TySF);
+ if (1) test_fsqrt_4s_4s(TyDF);
+ if (1) test_fsqrt_2s_2s(TySF);
// fadd d,s
// fsub d,s
|
|
From: <sv...@va...> - 2015-04-06 19:35:21
|
Author: sewardj
Date: Mon Apr 6 20:35:08 2015
New Revision: 15071
Log:
arm64: enable test cases for
FSQRT 2d_2d, 4s_4s, 2s_2s
Modified:
trunk/none/tests/arm64/fp_and_simd.c
trunk/none/tests/arm64/fp_and_simd.stdout.exp
Modified: trunk/none/tests/arm64/fp_and_simd.c
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.c (original)
+++ trunk/none/tests/arm64/fp_and_simd.c Mon Apr 6 20:35:08 2015
@@ -4585,9 +4585,9 @@
// fsqrt 2d,4s,2s
if (1) test_fsqrt_d_d(TyDF);
if (1) test_fsqrt_s_s(TySF);
- if (0) test_fsqrt_2d_2d(TySF); // need to change primop type
- if (0) test_fsqrt_4s_4s(TyDF); // ditto
- if (0) test_fsqrt_2s_2s(TySF); // ditto
+ if (1) test_fsqrt_2d_2d(TySF); // need to change primop type
+ if (1) test_fsqrt_4s_4s(TyDF); // ditto
+ if (1) test_fsqrt_2s_2s(TySF); // ditto
// fadd d,s
// fsub d,s
Modified: trunk/none/tests/arm64/fp_and_simd.stdout.exp
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.stdout.exp (original)
+++ trunk/none/tests/arm64/fp_and_simd.stdout.exp Mon Apr 6 20:35:08 2015
@@ -10,26 +10,29 @@
fneg v22.2s, v23.2s 36b2a38dcef18acf0e0f01a829ba3c66 f078b65e01737fd22bfa8f668c8b14f4 0000000000000000abfa8f660c8b14f4 f078b65e01737fd22bfa8f668c8b14f4 fpsr=00000000
fsqrt d22, d23 c5e48064a393c8e947a34273c10a3c47 6ec34f98a2199d3c810bdacfab80ee3d 00000000000000007ff8000000000000 6ec34f98a2199d3c810bdacfab80ee3d fpsr=00000000
fsqrt s22, s23 b984aed62671e865e6f21d40fc7bc013 5d0f926ce1157eaa95c45b338afcb3df 0000000000000000000000007fc00000 5d0f926ce1157eaa95c45b338afcb3df fpsr=00000000
-fadd d2, d11, d29 acb722146c6cbfa9ea4a022e1d3d7dbb 048612e51a468e36c51cdd8f87e12ab4 0c05cb6ebd128663d7568e3e8a3ac80e 0000000000000000d7568e3e8a3ac80e 048612e51a468e36c51cdd8f87e12ab4 0c05cb6ebd128663d7568e3e8a3ac80e fpsr=00000000
-fadd s2, s11, s29 6489eab2c96df363d52c4330a7aae391 c1fbfd8f4d8698c2cb9dfb4ea5d18713 14575775bc3a12029d8e66ea90352a18 000000000000000000000000a5d18713 c1fbfd8f4d8698c2cb9dfb4ea5d18713 14575775bc3a12029d8e66ea90352a18 fpsr=00000000
-fsub d2, d11, d29 4784d95987cd4ed80c3ca578a32bd88e 08aebee85fda964fbba02737f3c98220 837be65197abe2686b1fba2604afb8d5 0000000000000000eb1fba2604afb8d5 08aebee85fda964fbba02737f3c98220 837be65197abe2686b1fba2604afb8d5 fpsr=00000000
-fsub s2, s11, s29 0aaa836b194e242cc5fc3ae904033357 8ca3e752c306df00caab752f630ff07e 0e780c65c22b4ab8778d9ed6d9eb46ea 000000000000000000000000630ff09b 8ca3e752c306df00caab752f630ff07e 0e780c65c22b4ab8778d9ed6d9eb46ea fpsr=00000000
-fadd v9.2d, v7.2d, v8.2d 61ff7d4df3b6ca8131f01866bd76c58f 02dd0e32eecfc5fa2c3ffa1aebe6a4d2 61ff7d4df3b6ca8131f01866bd76c58f fpsr=00000000
-fadd v9.4s, v7.4s, v8.4s f0f1798fe3c1699cf02b3b25bca27a9c d4ba52a206ff21b170fbbab6a7f19faf f0f1798fe3c1699c70a61d24bca27a9c fpsr=00000000
-fadd v9.2s, v7.2s, v8.2s 0088596389c893fd879d51d4c5c764db 1e61c5ec52f79c6015e3c8dc7e9273bf 000000000000000015e3c8dc7e9273bf fpsr=00000000
-fsub v9.2d, v7.2d, v8.2d 16559ec50352a3d92d460a61a5dd0f6f 0784892e9360315bf0177599dbe14b46 16559ec50352a3d970177599dbe14b46 fpsr=00000000
-fsub v9.4s, v7.4s, v8.4s 9a49ac115048d4c4f987fa170d3ce4dd 9432a2e46543b956b819f459105730e9 9a49a0e7e543b956f987fa1790543d56 fpsr=00000000
-fsub v9.2s, v7.2s, v8.2s d2b3c4044ef23fb2e22093a48a9d2e0b adddf0eb4808f06704c857e949cc0fac 0000000000000000e22093a4c9cc0fac fpsr=00000000
-fabd d2, d11, d29 e4450ababbfae0f9bc3127138b19183c 1755377e9a786f014a6592749579b0f4 5f2619b1a20662f012305efa0acd1475 00000000000000004a6592749579b0f4 1755377e9a786f014a6592749579b0f4 5f2619b1a20662f012305efa0acd1475 fpsr=00000000
-fabd s2, s11, s29 918107c43ea20cc00420edac31a0d599 5cce191e65591384ff4cb613013cc685 0194ddb82b49abf059a93d4f11d611db 00000000000000000000000011d611db 5cce191e65591384ff4cb613013cc685 0194ddb82b49abf059a93d4f11d611db fpsr=00000000
-fabd v9.2d, v7.2d, v8.2d 570037914d04ab3d05d75ec6f616ee9a 17a0dc273ba9f8030a52741849e54740 570037914d04ab3d0a52741849e54740 fpsr=00000000
-fabd v9.4s, v7.4s, v8.4s 8fcf04e5b2dca44fcf4c517ea3a413ff 5d700527e24d9241c57eb74d70183523 5d700527624d92414f4c516e70183523 fpsr=00000000
-fabd v9.2s, v7.2s, v8.2s e8c72e865de41295f2db8f44cbbf37e2 fcd015ff8f2e73a3a0fae06860b606c7 000000000000000072db8f4460b606c7 fpsr=00000000
-faddp d2, v23.2d a93bf6332d650e0266478ac4fc21a428 da30ef8bc0b5573e34a901384a97a32f 0000000000000000da30ef8bc0b5573e da30ef8bc0b5573e34a901384a97a32f fpsr=00000000
-faddp s2, v23.2s be625608d5abd787f5c90ee73af5d7c0 ac8dd5bbc503330eb9dd5dab8e212ab7 000000000000000000000000b9dd5dab ac8dd5bbc503330eb9dd5dab8e212ab7 fpsr=00000000
-faddp v2.2d, v23.2d, v11.2d db43c391c6b69f3af17a6312e7c28d9a 3d3cc0784c2f856363d9810079bbabd9 125934a781e479d33d431279cce48fce 3d431279cce48fce63d9810079bbabd9 3d3cc0784c2f856363d9810079bbabd9 125934a781e479d33d431279cce48fce fpsr=00000000
-faddp v2.4s, v23.4s, v11.4s 9e477892854b43e0beafe48541dc8da0 69f2843d15223a224edb6a053a967ecf acb9433f079dacacabeb000208c90296 acb9433fabeb000269f2843d4edb6a05 69f2843d15223a224edb6a053a967ecf acb9433f079dacacabeb000208c90296 fpsr=00000000
-faddp v2.2s, v23.2s, v11.2s 200d17261638b12a2a6a07863ec28077 31005fb9ada2074bf63a63fedcb4d29c 3f871736dc9ac5357446eb65e4e703bb 00000000000000007446eb65f63a63fe 31005fb9ada2074bf63a63fedcb4d29c 3f871736dc9ac5357446eb65e4e703bb fpsr=00000000
+fsqrt v22.2d, v23.2d acb722146c6cbfa9ea4a022e1d3d7dbb 048612e51a468e36c51cdd8f87e12ab4 223a93d504b215df7ff8000000000000 048612e51a468e36c51cdd8f87e12ab4 fpsr=00000000
+fsqrt v22.4s, v23.4s 80ddba7e53e42d123208cf9b04b0569c 4288ae612c0dad40f0733f448390351b 410444f635be71e37fc000007fc00000 4288ae612c0dad40f0733f448390351b fpsr=00000000
+fsqrt v22.2s, v23.2s 14575775bc3a12029d8e66ea90352a18 f9754842f9c9ba28f82a63b15c68b274 00000000000000007fc000004df41212 f9754842f9c9ba28f82a63b15c68b274 fpsr=00000000
+fadd d2, d11, d29 4784d95987cd4ed80c3ca578a32bd88e 08aebee85fda964fbba02737f3c98220 837be65197abe2686b1fba2604afb8d5 00000000000000006b1fba2604afb8d5 08aebee85fda964fbba02737f3c98220 837be65197abe2686b1fba2604afb8d5 fpsr=00000000
+fadd s2, s11, s29 0aaa836b194e242cc5fc3ae904033357 8ca3e752c306df00caab752f630ff07e 0e780c65c22b4ab8778d9ed6d9eb46ea 000000000000000000000000630ff061 8ca3e752c306df00caab752f630ff07e 0e780c65c22b4ab8778d9ed6d9eb46ea fpsr=00000000
+fsub d2, d11, d29 61ff7d4df3b6ca8131f01866bd76c58f 02dd0e32eecfc5fa2c3ffa1aebe6a4d2 69505d14b27d9d16f25b26e0042fa9fa 0000000000000000725b26e0042fa9fa 02dd0e32eecfc5fa2c3ffa1aebe6a4d2 69505d14b27d9d16f25b26e0042fa9fa fpsr=00000000
+fsub s2, s11, s29 0088596389c893fd879d51d4c5c764db 1e61c5ec52f79c6015e3c8dc7e9273bf 47086cc3da642fa7130d662777beb4a9 0000000000000000000000007e9270c4 1e61c5ec52f79c6015e3c8dc7e9273bf 47086cc3da642fa7130d662777beb4a9 fpsr=00000000
+fadd v9.2d, v7.2d, v8.2d 9a49ac115048d4c4f987fa170d3ce4dd 9432a2e46543b956b819f459105730e9 9a49ac115048d4c4f987fa170d3ce4dd fpsr=00000000
+fadd v9.4s, v7.4s, v8.4s d2b3c4044ef23fb2e22093a48a9d2e0b adddf0eb4808f06704c857e949cc0fac d2b3c4044ef243fae22093a449cc0fac fpsr=00000000
+fadd v9.2s, v7.2s, v8.2s e4450ababbfae0f9bc3127138b19183c 1755377e9a786f014a6592749579b0f4 00000000000000004a6592749579b0fe fpsr=00000000
+fsub v9.2d, v7.2d, v8.2d d70f7fb13667914c413cead25e27ac14 7acb193b9abab2f9e1917689e3f6bf86 facb193b9abab2f961917689e3f6bf86 fpsr=00000000
+fsub v9.4s, v7.4s, v8.4s 918107c43ea20cc00420edac31a0d599 5cce191e65591384ff4cb613013cc685 dcce191ee55913847f4cb61331a0d599 fpsr=00000000
+fsub v9.2s, v7.2s, v8.2s da6c63303173ecc97e1e22cf15bd5c2f 24509983fc3bcc36baf7e45e9fa43077 00000000000000007e1e22cf1fa43083 fpsr=00000000
+fabd d2, d11, d29 570037914d04ab3d05d75ec6f616ee9a 17a0dc273ba9f8030a52741849e54740 f6f2b14fbb3184b2141625713239066f 0000000000000000141625713239066f 17a0dc273ba9f8030a52741849e54740 f6f2b14fbb3184b2141625713239066f fpsr=00000000
+fabd s2, s11, s29 e8c72e865de41295f2db8f44cbbf37e2 fcd015ff8f2e73a3a0fae06860b606c7 f34428d9c8833f5b78fb29445f3bc8d7 000000000000000000000000609e8dac fcd015ff8f2e73a3a0fae06860b606c7 f34428d9c8833f5b78fb29445f3bc8d7 fpsr=00000000
+fabd v9.2d, v7.2d, v8.2d f9da7f07e00794eb00b0940ba5e08516 be625608d5abd787f5c90ee73af5d7c0 79da7f07e00794eb75c90ee73af5d7c0 fpsr=00000000
+fabd v9.4s, v7.4s, v8.4s ddb5cd8016d27d057796e0861576e44f 4e94ec120b386f523bfcd80321664d3e 5db5cd8016d27d047796e08621664d3d fpsr=00000000
+fabd v9.2s, v7.2s, v8.2s 3d3cc0784c2f856363d9810079bbabd9 125934a781e479d33d431279cce48fce 000000000000000063d9810079bbabd9 fpsr=00000000
+faddp d2, v23.2d df411d2ee2e7467c38bb69a6e1e9a617 6f9f902235982fa010fd4e94e9c808f5 00000000000000006f9f902235982fa0 6f9f902235982fa010fd4e94e9c808f5 fpsr=00000000
+faddp s2, v23.2s acb9433f079dacacabeb000208c90296 20162517609f0f22a1a7a4c9c0a51f6b 000000000000000000000000c0a51f6b 20162517609f0f22a1a7a4c9c0a51f6b fpsr=00000000
+faddp v2.2d, v23.2d, v11.2d 200d17261638b12a2a6a07863ec28077 31005fb9ada2074bf63a63fedcb4d29c 3f871736dc9ac5357446eb65e4e703bb 7446eb65e4e703bbf63a63fedcb4d29c 31005fb9ada2074bf63a63fedcb4d29c 3f871736dc9ac5357446eb65e4e703bb fpsr=00000000
+faddp v2.4s, v23.4s, v11.4s 139832afee423c3d6930e0fad3ba39c4 4969e55289753f038f7980d1535979e5 80c745ef729f1792ccd7e987538166e1 729f1792538163814969e552535979e5 4969e55289753f038f7980d1535979e5 80c745ef729f1792ccd7e987538166e1 fpsr=00000000
+faddp v2.2s, v23.2s, v11.2s 237d5fcd3f71f6e8e6230d4d4add00ad e309aef8a605af130821eb96e737777e b5a9377eb31749ef710cf757885d2728 0000000000000000710cf757e737777e e309aef8a605af130821eb96e737777e b5a9377eb31749ef710cf757885d2728 fpsr=00000000
special value 0 = 0.000000e+00
special value 1 = -0.000000e+00
@@ -43,103 +46,37 @@
special value 9 = -1.230001e-318
FCCMP_D_D_0xF_EQ before
- 7ff8000000000000435cdd69fd701834
- c36fe19c3f30229ec3643359fb06a1aa
- c359b6f43046885d436a527859a054e2
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- 7ff8000000000000435cdd69fd701834
- c36fe19c3f30229ec3643359fb06a1aa
- c359b6f43046885d436a527859a054e2
- aaaaaaaaaaaaaaaa0000000020000000
-
-FCCMP_D_D_0xF_EQ before
- 7ff8000000000000c3645e06664558db
- 43606b7d27d0e6007ff0000000000000
- 80000000000000004366a680c06f869b
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- 7ff8000000000000c3645e06664558db
- 43606b7d27d0e6007ff0000000000000
- 80000000000000004366a680c06f869b
- aaaaaaaaaaaaaaaa0000000080000000
-
-FCCMP_D_D_0xF_EQ before
- 7ff0000000000000fff8000000000000
- fff0000000000000435c98b12851cb40
- 7ff800000000000043554683f9e2c242
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- 7ff0000000000000fff8000000000000
- fff0000000000000435c98b12851cb40
- 7ff800000000000043554683f9e2c242
- aaaaaaaaaaaaaaaa0000000030000000
-
-FCCMP_D_D_0xF_EQ before
- 4367fb4b1392b265fff8000000000000
- 0000000000000000434c4c6d365e1e6a
- 436c4ff357df48e042fba949a1a47cd0
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- 4367fb4b1392b265fff8000000000000
- 0000000000000000434c4c6d365e1e6a
- 436c4ff357df48e042fba949a1a47cd0
- aaaaaaaaaaaaaaaa0000000030000000
-
-FCCMP_D_D_0xF_EQ before
- c344def7ec50fa5a8000000000000000
- 800000000003cc7b4333c6aaae4c4156
- bff0000000000000436e073da2699bc0
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- c344def7ec50fa5a8000000000000000
- 800000000003cc7b4333c6aaae4c4156
- bff0000000000000436e073da2699bc0
- aaaaaaaaaaaaaaaa0000000080000000
-
-FCCMP_D_D_0xF_EQ before
- fff00000000000004365fdc31c7bd246
- fff0000000000000c362acac049b4d3f
- 7ff8000000000000c361f03333fbf822
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_EQ after
- fff00000000000004365fdc31c7bd246
- fff0000000000000c362acac049b4d3f
- 7ff8000000000000c361f03333fbf822
- aaaaaaaaaaaaaaaa0000000020000000
-
-FCCMP_D_D_0xF_EQ before
- 7ff0000000000000436daa18eb504878
- 435fddccb5d6fc2d7ff0000000000000
- fff8000000000000c362328154c918c0
+ c3644db84da30e484299097f1e1dcc00
+ 800000000003cc7b7ff0000000000000
+ c3430a060201716ebff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
FCCMP_D_D_0xF_EQ after
- 7ff0000000000000436daa18eb504878
- 435fddccb5d6fc2d7ff0000000000000
- fff8000000000000c362328154c918c0
+ c3644db84da30e484299097f1e1dcc00
+ 800000000003cc7b7ff0000000000000
+ c3430a060201716ebff0000000000000
aaaaaaaaaaaaaaaa0000000080000000
FCCMP_D_D_0xF_EQ before
- 000000000003cc7bc35e230396289b71
- c3340c0402e2da81434226b801bd1354
- 7ff80000000000004364872e89d45f4e
+ 0000000000000000c3696b78d1762ba1
+ 000000000003cc7b3ff0000000000000
+ c3645782717ed83d43652c293bde3a48
aaaaaaaaaaaaaaaa5555555555555555
FCCMP_D_D_0xF_EQ after
- 000000000003cc7bc35e230396289b71
- c3340c0402e2da81434226b801bd1354
- 7ff80000000000004364872e89d45f4e
+ 0000000000000000c3696b78d1762ba1
+ 000000000003cc7b3ff0000000000000
+ c3645782717ed83d43652c293bde3a48
aaaaaaaaaaaaaaaa0000000080000000
FCCMP_D_D_0xF_EQ before
- 434e8fd5aea1f63a435b5e692a585278
- c362df6f956fc3a243396834828cef42
+ 800000000003cc7bfff0000000000000
+ 7ff8000000000000432b9ed20906a902
4363c5fe8d036ba2bff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
FCCMP_D_D_0xF_EQ after
- 434e8fd5aea1f63a435b5e692a585278
- c362df6f956fc3a243396834828cef42
+ 800000000003cc7bfff0000000000000
+ 7ff8000000000000432b9ed20906a902
4363c5fe8d036ba2bff0000000000000
- aaaaaaaaaaaaaaaa0000000020000000
+ aaaaaaaaaaaaaaaa0000000080000000
FCCMP_D_D_0xF_EQ before
c31260dc28f7c548c36569e853c29c7e
@@ -592,71 +529,71 @@
4338e24489d8314e436972eadfcaa7b9
aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
7ff00000000000008000000000000000
3ff00000000000008000000000000000
436f22b72a8c2cefc34d9d26d63d04da
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
7ff00000000000008000000000000000
3ff00000000000008000000000000000
436f22b72a8c2cefc34d9d26d63d04da
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000060000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
3ff0000000000000c362cd5790d5ac3e
8000000000000000c35a9e1b631dfb22
000000000003cc7b800000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
3ff0000000000000c362cd5790d5ac3e
8000000000000000c35a9e1b631dfb22
000000000003cc7b800000000003cc7b
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
bff0000000000000c3410b5185b11616
c34603b3d7f06b994361830e83678cca
4312f5cf67a5c134435d18c7d69ff1bd
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
bff0000000000000c3410b5185b11616
c34603b3d7f06b994361830e83678cca
4312f5cf67a5c134435d18c7d69ff1bd
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
fff0000000000000c35d38c65d3728f4
c34df8dee813be60c367e9cb7b13c887
0000000000000000fff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
fff0000000000000c35d38c65d3728f4
c34df8dee813be60c367e9cb7b13c887
0000000000000000fff0000000000000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
c3439bddc2b28ef8c36802288faf37e1
c3621d345432a800436b38aae15178db
bff00000000000003ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
c3439bddc2b28ef8c36802288faf37e1
c3621d345432a800436b38aae15178db
bff00000000000003ff0000000000000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0xF_NE before
+FCCMP_D_D_0xF_EQ before
43609de95e8aaa4bc366185c2afb22bc
436380665573f6437ff8000000000000
bff00000000000004356a66836b27ecd
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0xF_NE after
+FCCMP_D_D_0xF_EQ after
43609de95e8aaa4bc366185c2afb22bc
436380665573f6437ff8000000000000
bff00000000000004356a66836b27ecd
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000030000000
FCCMP_D_D_0xF_NE before
c3634e54ba2add184355d0162b180e30
@@ -1142,71 +1079,71 @@
fff8000000000000fff8000000000000
aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
bff00000000000007ff0000000000000
bff0000000000000c36fda7b5825930a
bff0000000000000c368deac227bcb70
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
bff00000000000007ff0000000000000
bff0000000000000c36fda7b5825930a
bff0000000000000c368deac227bcb70
- aaaaaaaaaaaaaaaa0000000020000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
80000000000000003ff0000000000000
c334d407d44f20d43ff0000000000000
0000000000000000436d9363d10ab396
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
80000000000000003ff0000000000000
c334d407d44f20d43ff0000000000000
0000000000000000436d9363d10ab396
- aaaaaaaaaaaaaaaa0000000060000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
c3617eb21fa5073bfff8000000000000
800000000003cc7bc3456d59ecd2027c
7ff0000000000000436993bb7cf128bf
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
c3617eb21fa5073bfff8000000000000
800000000003cc7bc3456d59ecd2027c
7ff0000000000000436993bb7cf128bf
- aaaaaaaaaaaaaaaa0000000030000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
435a657e053b24947ff8000000000000
436780d81f9d1d78434bc8271eaaddb2
fff80000000000007ff8000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
435a657e053b24947ff8000000000000
436780d81f9d1d78434bc8271eaaddb2
fff80000000000007ff8000000000000
- aaaaaaaaaaaaaaaa0000000030000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
436fe391e48527224368390ddc76dcb1
7ff00000000000007ff8000000000000
fff00000000000008000000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
436fe391e48527224368390ddc76dcb1
7ff00000000000007ff8000000000000
fff00000000000008000000000000000
- aaaaaaaaaaaaaaaa0000000030000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_D_D_0x0_EQ before
+FCCMP_D_D_0xF_NE before
80000000000000007ff0000000000000
c365800155119ed07ff0000000000000
4361f18d4b91f4dec3548cc82762b836
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_EQ after
+FCCMP_D_D_0xF_NE after
80000000000000007ff0000000000000
c365800155119ed07ff0000000000000
4361f18d4b91f4dec3548cc82762b836
- aaaaaaaaaaaaaaaa0000000060000000
+ aaaaaaaaaaaaaaaa00000000f0000000
FCCMP_D_D_0x0_EQ before
fff8000000000000c3646e93a22690e3
@@ -1692,71 +1629,71 @@
c3482f3757711546c3301775e22895e3
aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
3ff00000000000007ff0000000000000
c356950ced1fee23436c38a9b5c0720b
7ff0000000000000800000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
3ff00000000000007ff0000000000000
c356950ced1fee23436c38a9b5c0720b
7ff0000000000000800000000003cc7b
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
c353344f7ef05c7f000000000003cc7b
fff8000000000000800000000003cc7b
7ff80000000000003ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
c353344f7ef05c7f000000000003cc7b
fff8000000000000800000000003cc7b
7ff80000000000003ff0000000000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
c36f20005fd5bc8ec35a0d0c8b5ee13e
c3680eed2e3b278f43640c9b33d5f611
fff0000000000000c350b55e60d96ef2
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
c36f20005fd5bc8ec35a0d0c8b5ee13e
c3680eed2e3b278f43640c9b33d5f611
fff0000000000000c350b55e60d96ef2
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
fff8000000000000c342d9b9719cedb7
c36f5174d4b7fc91000000000003cc7b
436062bbf7c9eb61c36e37d4cdbf7627
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
fff8000000000000c342d9b9719cedb7
c36f5174d4b7fc91000000000003cc7b
436062bbf7c9eb61c36e37d4cdbf7627
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
c36aa8a5281a242e43513eb38a37e81c
435118bb476cb9867ff0000000000000
c361f36d404f08217ff8000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
c36aa8a5281a242e43513eb38a37e81c
435118bb476cb9867ff0000000000000
c361f36d404f08217ff8000000000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_D_D_0x0_NE before
+FCCMP_D_D_0x0_EQ before
800000000003cc7bfff0000000000000
c3628e5cfab0657ac36e2d1586a10682
4357f8aef827a6687ff8000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_D_D_0x0_NE after
+FCCMP_D_D_0x0_EQ after
800000000003cc7bfff0000000000000
c3628e5cfab0657ac36e2d1586a10682
4357f8aef827a6687ff8000000000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
FCCMP_D_D_0x0_NE before
436b1fd2e44955687ff8000000000000
@@ -2242,38 +2179,71 @@
43625410fe7328eac366ac3df086e22d
aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- 4c54a8a7cbb4c0c6cb8913324a93c328
- 80000000cc1f43a84c63916ccbea984e
- cbd2c9134c436518cc49ec0a7fc00000
+FCCMP_D_D_0x0_NE before
+ c351226625ee800d43327865081811ff
+ 436a9514ec285eddc3569818b4ef099a
+ 436c722d820bb39cc35d5309b975b080
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_EQ after
- 4c54a8a7cbb4c0c6cb8913324a93c328
- 80000000cc1f43a84c63916ccbea984e
- cbd2c9134c436518cc49ec0a7fc00000
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMP_D_D_0x0_NE after
+ c351226625ee800d43327865081811ff
+ 436a9514ec285eddc3569818b4ef099a
+ 436c722d820bb39cc35d5309b975b080
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- ffc000007fc000004af35f4a4c39a0fe
- 7f8000004c2fd3343f8000004c0f940a
- 3f800000cc1a3aaccbac1b227f800000
+FCCMP_D_D_0x0_NE before
+ 800000000003cc7bc363e874f6026a73
+ c3693d8137c347b67ff8000000000000
+ c35a5922507e83c943686ca316b709c9
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_EQ after
- ffc000007fc000004af35f4a4c39a0fe
- 7f8000004c2fd3343f8000004c0f940a
- 3f800000cc1a3aaccbac1b227f800000
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMP_D_D_0x0_NE after
+ 800000000003cc7bc363e874f6026a73
+ c3693d8137c347b67ff8000000000000
+ c35a5922507e83c943686ca316b709c9
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- cb360065cc47b312ff8000004b9c5f02
- 4bc3b9bbcc483cfc8000000080000000
- ff800000bf800000cb4262594c36785a
+FCCMP_D_D_0x0_NE before
+ 433e6be96ec598434367341fc9e674c1
+ fff80000000000007ff8000000000000
+ 3ff00000000000004361f28148144759
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_EQ after
- cb360065cc47b312ff8000004b9c5f02
- 4bc3b9bbcc483cfc8000000080000000
- ff800000bf800000cb4262594c36785a
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMP_D_D_0x0_NE after
+ 433e6be96ec598434367341fc9e674c1
+ fff80000000000007ff8000000000000
+ 3ff00000000000004361f28148144759
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMP_D_D_0x0_NE before
+ 7ff00000000000004365fa66707eb80a
+ c3558364385afa7d7ff0000000000000
+ 3ff0000000000000c363475584c2ffdd
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMP_D_D_0x0_NE after
+ 7ff00000000000004365fa66707eb80a
+ c3558364385afa7d7ff0000000000000
+ 3ff0000000000000c363475584c2ffdd
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMP_D_D_0x0_NE before
+ fff000000000000043538be035661674
+ c346c00c8ee2fc62c368f66232a9d0c5
+ 80000000000000008000000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMP_D_D_0x0_NE after
+ fff000000000000043538be035661674
+ c346c00c8ee2fc62c368f66232a9d0c5
+ 80000000000000008000000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMP_D_D_0x0_NE before
+ 435877376bafb372c369079f8363528a
+ c3484c4b032bdc8e4366cf0b50653472
+ fff0000000000000bff0000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMP_D_D_0x0_NE after
+ 435877376bafb372c369079f8363528a
+ c3484c4b032bdc8e4366cf0b50653472
+ fff0000000000000bff0000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
FCCMP_S_S_0xF_EQ before
ff800000ff800000ffc000003f800000
@@ -2792,38 +2762,38 @@
ffc000007f800000800000004af210c8
aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
4be0c0927fc00000cb901e987fc00000
ffc00000bf8000003f800000cc51fc60
4ba88d507f800000cb9eab9f00000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_NE after
+FCCMP_S_S_0xF_EQ after
4be0c0927fc00000cb901e987fc00000
ffc00000bf8000003f800000cc51fc60
4ba88d507f800000cb9eab9f00000000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000030000000
-FCCMP_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
4c10179b00000000ff800000ff800000
4c7898f24c009f7ecc1c578f4c6ded18
4c2912f9cbb85cc900000000ffc00000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_NE after
+FCCMP_S_S_0xF_EQ after
4c10179b00000000ff800000ff800000
4c7898f24c009f7ecc1c578f4c6ded18
4c2912f9cbb85cc900000000ffc00000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
3f800000cb95ebd2000000004bdf9ebf
7fc00000ffc000003f8000007fc00000
ca965a404c550b09cb1852ab7f800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0xF_NE after
+FCCMP_S_S_0xF_EQ after
3f800000cb95ebd2000000004bdf9ebf
7fc00000ffc000003f8000007fc00000
ca965a404c550b09cb1852ab7f800000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000030000000
FCCMP_S_S_0xF_NE before
cc1c825fbf800000cc7aa4683f800000
@@ -3342,38 +3312,38 @@
4c06cc66ff80000000000000cc37d6d9
aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMP_S_S_0xF_NE before
000000004c07b058ca9f5f803f800000
000000008000000080000000bf800000
0000000000000000cc71f6c24c59efc4
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_EQ after
+FCCMP_S_S_0xF_NE after
000000004c07b058ca9f5f803f800000
000000008000000080000000bf800000
0000000000000000cc71f6c24c59efc4
- aaaaaaaaaaaaaaaa0000000020000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMP_S_S_0xF_NE before
ffc000007fc000004beb74bcff800000
4b83c63e3f8000004c26677880000000
4bbd1b1c4c4147134b778de2ff800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_EQ after
+FCCMP_S_S_0xF_NE after
ffc000007fc000004beb74bcff800000
4b83c63e3f8000004c26677880000000
4bbd1b1c4c4147134b778de2ff800000
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMP_S_S_0xF_NE before
7fc00000cc5201a1cb6643984bc5aa80
cb3c6a534bc22411bf8000004c5d969b
000000007fc000004ae062e27f800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_EQ after
+FCCMP_S_S_0xF_NE after
7fc00000cc5201a1cb6643984bc5aa80
cb3c6a534bc22411bf8000004c5d969b
000000007fc000004ae062e27f800000
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
FCCMP_S_S_0x0_EQ before
800000007fc000008000000080000000
@@ -3892,38 +3862,38 @@
ff8000007f8000004bf81e0200000000
aaaaaaaaaaaaaaaa0000000030000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
cc46fc47cc70030c7f8000003f800000
ff8000004c6cae61cc6b2de0cc33cece
7fc00000bf800000cc7bd59f4bfca5da
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_NE after
+FCCMP_S_S_0x0_EQ after
cc46fc47cc70030c7f8000003f800000
ff8000004c6cae61cc6b2de0cc33cece
7fc00000bf800000cc7bd59f4bfca5da
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
ffc000004c1dc64c4c61dae900000000
cc1c70e17fc00000bf800000ff800000
ffc00000cb3ee4674b909421c969c140
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_NE after
+FCCMP_S_S_0x0_EQ after
ffc000004c1dc64c4c61dae900000000
cc1c70e17fc00000bf800000ff800000
ffc00000cb3ee4674b909421c969c140
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
0000000080000000cc5c56edffc00000
ffc00000cc5c78787f800000ffc00000
bf800000ff8000004c529dd080000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMP_S_S_0x0_NE after
+FCCMP_S_S_0x0_EQ after
0000000080000000cc5c56edffc00000
ffc00000cc5c78787f800000ffc00000
bf800000ff8000004c529dd080000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000030000000
FCCMP_S_S_0x0_NE before
4a477d6c7f800000cc2a173480000000
@@ -4442,71 +4412,38 @@
7f8000007f800000000000004c1d9a11
aaaaaaaaaaaaaaaa0000000000000000
-FCCMPE_D_D_0xF_EQ before
- c347ede713e26782c31a385074e24c20
- 7ff00000000000000000000000000000
- 434828f6f053f09e000000000003cc7b
+FCCMP_S_S_0x0_NE before
+ 7f80000000000000cb3f6f39c9d1c288
+ 80000000ca4356ec4b4147b700000000
+ 4b8c82e44c2a00414c658f46ff800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- c347ede713e26782c31a385074e24c20
- 7ff00000000000000000000000000000
- 434828f6f053f09e000000000003cc7b
- aaaaaaaaaaaaaaaa0000000080000000
+FCCMP_S_S_0x0_NE after
+ 7f80000000000000cb3f6f39c9d1c288
+ 80000000ca4356ec4b4147b700000000
+ 4b8c82e44c2a00414c658f46ff800000
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMPE_D_D_0xF_EQ before
- 8000000000000000c3286add28fa84c4
- 436cb1e8b4fd7c16fff0000000000000
- 4351905c84c260f1436540081c831ce3
+FCCMP_S_S_0x0_NE before
+ 4b8df574cabdfe50cc282ab23f800000
+ 4c03a59480000000cab95f62cb4d3074
+ 00000000cc27a2e3cbd2e91c80000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- 8000000000000000c3286add28fa84c4
- 436cb1e8b4fd7c16fff0000000000000
- 4351905c84c260f1436540081c831ce3
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMP_S_S_0x0_NE after
+ 4b8df574cabdfe50cc282ab23f800000
+ 4c03a59480000000cab95f62cb4d3074
+ 00000000cc27a2e3cbd2e91c80000000
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMPE_D_D_0xF_EQ before
- c36505562a47fe8c3ff0000000000000
- 4351beae779d4610c337bfc9f7650f52
- c3372bec394df5a9c349a60e67b9be68
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- c36505562a47fe8c3ff0000000000000
- 4351beae779d4610c337bfc9f7650f52
- c3372bec394df5a9c349a60e67b9be68
- aaaaaaaaaaaaaaaa0000000020000000
-
-FCCMPE_D_D_0xF_EQ before
- 436074b2813f3f778000000000000000
- c35a5d237bad29de8000000000000000
- 000000000003cc7bc364f45c5e957cfe
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- 436074b2813f3f778000000000000000
- c35a5d237bad29de8000000000000000
- 000000000003cc7bc364f45c5e957cfe
- aaaaaaaaaaaaaaaa0000000060000000
-
-FCCMPE_D_D_0xF_EQ before
- 4364fe5eaae6e99d000000000003cc7b
- 800000000003cc7b7ff8000000000000
- c35ff065d314a2ea000000000003cc7b
- aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- 4364fe5eaae6e99d000000000003cc7b
- 800000000003cc7b7ff8000000000000
- c35ff065d314a2ea000000000003cc7b
- aaaaaaaaaaaaaaaa0000000030000000
-
-FCCMPE_D_D_0xF_EQ before
- 7ff00000000000003ff0000000000000
- 435a48921368f3b17ff0000000000000
- bff0000000000000434ba14835830da4
+FCCMP_S_S_0x0_NE before
+ 800000007fc000004c27f2f500000000
+ 7f8000003f800000cbff832f00000000
+ bf8000004b5d0a414bd244907f800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_EQ after
- 7ff00000000000003ff0000000000000
- 435a48921368f3b17ff0000000000000
- bff0000000000000434ba14835830da4
- aaaaaaaaaaaaaaaa0000000080000000
+FCCMP_S_S_0x0_NE after
+ 800000007fc000004c27f2f500000000
+ 7f8000003f800000cbff832f00000000
+ bf8000004b5d0a414bd244907f800000
+ aaaaaaaaaaaaaaaa0000000000000000
FCCMPE_D_D_0xF_EQ before
000000000003cc7b000000000003cc7b
@@ -4992,71 +4929,71 @@
c367007c18ba82027ff8000000000000
aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
4359c39905d666df435ba42c97cc2c9c
3ff0000000000000fff8000000000000
c35fc6bb386374ac434e296b3cf424ae
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
4359c39905d666df435ba42c97cc2c9c
3ff0000000000000fff8000000000000
c35fc6bb386374ac434e296b3cf424ae
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000030000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
80000000000000003ff0000000000000
fff80000000000000000000000000000
4363467446121ada000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
80000000000000003ff0000000000000
fff80000000000000000000000000000
4363467446121ada000000000003cc7b
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
c3623f7983eeaae07ff0000000000000
3ff0000000000000c35517a66fc3ba8d
c320e581560fdf08c35c3ea13162686e
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
c3623f7983eeaae07ff0000000000000
3ff0000000000000c35517a66fc3ba8d
c320e581560fdf08c35c3ea13162686e
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
43176054fc7b21a40000000000000000
c36f0715e990e340800000000003cc7b
4364dc9ee73279e97ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
43176054fc7b21a40000000000000000
c36f0715e990e340800000000003cc7b
4364dc9ee73279e97ff0000000000000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
434e648f2ec22be7c36e0dce9ac18d1f
435be0f881740207fff0000000000000
fff8000000000000fff8000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
434e648f2ec22be7c36e0dce9ac18d1f
435be0f881740207fff0000000000000
fff8000000000000fff8000000000000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_D_D_0xF_NE before
+FCCMPE_D_D_0xF_EQ before
4355e6f6df78898b0000000000000000
436e1948e5459afb8000000000000000
43513ed83e22b7d8800000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0xF_NE after
+FCCMPE_D_D_0xF_EQ after
4355e6f6df78898b0000000000000000
436e1948e5459afb8000000000000000
43513ed83e22b7d8800000000003cc7b
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000060000000
FCCMPE_D_D_0xF_NE before
435409827e1d68f7bff0000000000000
@@ -5542,71 +5479,71 @@
8000000000000000800000000003cc7b
aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
bff0000000000000c35c262599d8d6d4
c36bead3feb1eafdc3399ecbd02a42a9
0000000000000000435f767eaa6be48c
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
bff0000000000000c35c262599d8d6d4
c36bead3feb1eafdc3399ecbd02a42a9
0000000000000000435f767eaa6be48c
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
0000000000000000000000000003cc7b
7ff8000000000000435dc797d9c22992
43538d85592ebefec3607675057bfc4c
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
0000000000000000000000000003cc7b
7ff8000000000000435dc797d9c22992
43538d85592ebefec3607675057bfc4c
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
43613d48942b1543bff0000000000000
c343a93e27fa652ebff0000000000000
0000000000000000c34375245baaf716
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
43613d48942b1543bff0000000000000
c343a93e27fa652ebff0000000000000
0000000000000000c34375245baaf716
- aaaaaaaaaaaaaaaa0000000060000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
80000000000000000000000000000000
3ff0000000000000c3493062d49b07b1
fff0000000000000435b0575eb08f142
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
80000000000000000000000000000000
3ff0000000000000c3493062d49b07b1
fff0000000000000435b0575eb08f142
- aaaaaaaaaaaaaaaa0000000020000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
c36ae8b955fb92b6c36e924e54bf3c10
800000000003cc7b4354081990529ed3
c366c780a58c3c5b7ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
c36ae8b955fb92b6c36e924e54bf3c10
800000000003cc7b4354081990529ed3
c366c780a58c3c5b7ff0000000000000
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMPE_D_D_0x0_EQ before
+FCCMPE_D_D_0xF_NE before
c368fab557e2df4dc365d5379dcf797d
fff0000000000000c36e883bd8f08df6
c3675c0bd87a7218bff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_EQ after
+FCCMPE_D_D_0xF_NE after
c368fab557e2df4dc365d5379dcf797d
fff0000000000000c36e883bd8f08df6
c3675c0bd87a7218bff0000000000000
- aaaaaaaaaaaaaaaa0000000020000000
+ aaaaaaaaaaaaaaaa00000000f0000000
FCCMPE_D_D_0x0_EQ before
436b7a26ebf93cbac3452e3aec14f3b4
@@ -6092,71 +6029,71 @@
80000000000000000000000000000000
aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
800000000003cc7b3ff0000000000000
3ff00000000000003ff0000000000000
c36d4c525e5f5b7a3ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
800000000003cc7b3ff0000000000000
3ff00000000000003ff0000000000000
c36d4c525e5f5b7a3ff0000000000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000060000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
fff8000000000000c3573b13f90c7c02
4364644fb077477a8000000000000000
c3646650c8f2e85f4365c1882f88d1ee
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
fff8000000000000c3573b13f90c7c02
4364644fb077477a8000000000000000
c3646650c8f2e85f4365c1882f88d1ee
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
432c8be6c4785dc0000000000003cc7b
80000000000000003ff0000000000000
fff0000000000000436b35c869c99fa1
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
432c8be6c4785dc0000000000003cc7b
80000000000000003ff0000000000000
fff0000000000000436b35c869c99fa1
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
c36442b030d875f18000000000000000
c342a6a024a184f0432bb40116d9afb4
0000000000000000000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
c36442b030d875f18000000000000000
c342a6a024a184f0432bb40116d9afb4
0000000000000000000000000003cc7b
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
c369c2ee7a34fde7800000000003cc7b
fff00000000000008000000000000000
4366bcc51a093a65000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
c369c2ee7a34fde7800000000003cc7b
fff00000000000008000000000000000
4366bcc51a093a65000000000003cc7b
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMPE_D_D_0x0_NE before
+FCCMPE_D_D_0x0_EQ before
436c0050f0ae4d6e435fbf9dbac14930
7ff8000000000000436bc4e80a6816d5
435fe6a46229e302000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_D_D_0x0_NE after
+FCCMPE_D_D_0x0_EQ after
436c0050f0ae4d6e435fbf9dbac14930
7ff8000000000000436bc4e80a6816d5
435fe6a46229e302000000000003cc7b
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
FCCMPE_D_D_0x0_NE before
800000000003cc7b0000000000000000
@@ -6642,38 +6579,71 @@
c358e66ee70674407ff8000000000000
aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- 000000003f800000000000003f800000
- cc59837d7f800000ff8000007f800000
- 00000000ffc00000bf800000ff800000
+FCCMPE_D_D_0x0_NE before
+ 00000000000000003ff0000000000000
+ 000000000003cc7b3ff0000000000000
+ fff00000000000007ff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_EQ after
- 000000003f800000000000003f800000
- cc59837d7f800000ff8000007f800000
- 00000000ffc00000bf800000ff800000
- aaaaaaaaaaaaaaaa0000000080000000
+FCCMPE_D_D_0x0_NE after
+ 00000000000000003ff0000000000000
+ 000000000003cc7b3ff0000000000000
+ fff00000000000007ff0000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- 80000000cc31f7704b641e237f800000
- cc2e0f0bcbd6330ccc5b26184b4cfb53
- 000000003f800000cc0ba5027fc00000
+FCCMPE_D_D_0x0_NE before
+ c36b306fa1a076c87ff0000000000000
+ bff0000000000000fff0000000000000
+ 0000000000000000fff8000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_EQ after
- 80000000cc31f7704b641e237f800000
- cc2e0f0bcbd6330ccc5b26184b4cfb53
- 000000003f800000cc0ba5027fc00000
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMPE_D_D_0x0_NE after
+ c36b306fa1a076c87ff0000000000000
+ bff0000000000000fff0000000000000
+ 0000000000000000fff8000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
-FCCMP_S_S_0xF_EQ before
- 80000000ff800000ff8000007f800000
- 00000000cb893bc97f8000004c5bc49e
- bf800000ffc00000cc76ec9480000000
+FCCMPE_D_D_0x0_NE before
+ 434c83c46b7ba6397ff0000000000000
+ 8000000000000000c3663eee0cfdce57
+ c36b64c3087b840d43499f6a7dbe503a
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_EQ after
- 80000000ff800000ff8000007f800000
- 00000000cb893bc97f8000004c5bc49e
- bf800000ffc00000cc76ec9480000000
- aaaaaaaaaaaaaaaa0000000020000000
+FCCMPE_D_D_0x0_NE after
+ 434c83c46b7ba6397ff0000000000000
+ 8000000000000000c3663eee0cfdce57
+ c36b64c3087b840d43499f6a7dbe503a
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMPE_D_D_0x0_NE before
+ c365c1e16479a95ac35ac6618de83596
+ c36174a04d6b1aa07ff8000000000000
+ 000000000003cc7b3ff0000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMPE_D_D_0x0_NE after
+ c365c1e16479a95ac35ac6618de83596
+ c36174a04d6b1aa07ff8000000000000
+ 000000000003cc7b3ff0000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMPE_D_D_0x0_NE before
+ fff00000000000007ff0000000000000
+ 8000000000000000fff0000000000000
+ 7ff0000000000000436b7893bb69fea5
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMPE_D_D_0x0_NE after
+ fff00000000000007ff0000000000000
+ 8000000000000000fff0000000000000
+ 7ff0000000000000436b7893bb69fea5
+ aaaaaaaaaaaaaaaa0000000000000000
+
+FCCMPE_D_D_0x0_NE before
+ 000000000003cc7bc35127791de69d89
+ c36edd927e33b0ce800000000003cc7b
+ bff0000000000000fff8000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCCMPE_D_D_0x0_NE after
+ 000000000003cc7bc35127791de69d89
+ c36edd927e33b0ce800000000003cc7b
+ bff0000000000000fff8000000000000
+ aaaaaaaaaaaaaaaa0000000000000000
FCCMP_S_S_0xF_EQ before
80000000ffc000004c63f0687fc00000
@@ -7192,38 +7162,38 @@
4a9a68be4c037a6480000000ffc00000
aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
bf800000bf80000049bbf960ff800000
3f8000004bf31150bf800000ffc00000
000000007fc00000cc0993504c45b358
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_NE after
+FCCMPE_S_S_0xF_EQ after
bf800000bf80000049bbf960ff800000
3f8000004bf31150bf800000ffc00000
000000007fc00000cc0993504c45b358
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000030000000
-FCCMPE_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
80000000000000007f8000004c0b89fa
caade2c4800000000000000000000000
3f8000004a96cd364ba7e0d4c9db00b0
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_NE after
+FCCMPE_S_S_0xF_EQ after
80000000000000007f8000004c0b89fa
caade2c4800000000000000000000000
3f8000004a96cd364ba7e0d4c9db00b0
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
-FCCMPE_S_S_0xF_NE before
+FCCMP_S_S_0xF_EQ before
ff800000cc2d401a4b59b0e180000000
8000000048947e8080000000cbb80acc
80000000cbef61804a450588ffc00000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0xF_NE after
+FCCMPE_S_S_0xF_EQ after
ff800000cc2d401a4b59b0e180000000
8000000048947e8080000000cbb80acc
80000000cbef61804a450588ffc00000
- aaaaaaaaaaaaaaaa00000000f0000000
+ aaaaaaaaaaaaaaaa0000000020000000
FCCMPE_S_S_0xF_NE before
cc60161ac9518be0cb1416a8cb9700b6
@@ -7742,38 +7712,38 @@
cb583717caf444f6cc1eaedc7fc00000
aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMPE_S_S_0xF_NE before
4c64cb7bcc012c9acc27756500000000
4c32a9e9bf8000004c5af8af4c443445
3f8000004c46bde2bf80000080000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_EQ after
+FCCMPE_S_S_0xF_NE after
4c64cb7bcc012c9acc27756500000000
4c32a9e9bf8000004c5af8af4c443445
3f8000004c46bde2bf80000080000000
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMPE_S_S_0xF_NE before
800000004a170f04c9b7f10000000000
bf800000ff8000004c5c1ac37f800000
80000000cbae7d4aff800000ff800000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_EQ after
+FCCMPE_S_S_0xF_NE after
800000004a170f04c9b7f10000000000
bf800000ff8000004c5c1ac37f800000
80000000cbae7d4aff800000ff800000
- aaaaaaaaaaaaaaaa0000000080000000
+ aaaaaaaaaaaaaaaa00000000f0000000
-FCCMP_S_S_0x0_EQ before
+FCCMPE_S_S_0xF_NE before
4c71da5a80000000800000007fc00000
4c71a92bcb679beeca853c96cc4db614
cbf620a5cc2266ccffc0000080000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_EQ after
+FCCMPE_S_S_0xF_NE after
4c71da5a80000000800000007fc00000
4c71a92bcb679beeca853c96cc4db614
cbf620a5cc2266ccffc0000080000000
- aaaaaaaaaaaaaaaa0000000030000000
+ aaaaaaaaaaaaaaaa00000000f0000000
FCCMP_S_S_0x0_EQ before
7f8000007f800000cc71a53c7fc00000
@@ -8292,38 +8262,38 @@
7fc000007f800000cb8a30e73f800000
aaaaaaaaaaaaaaaa0000000030000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
cc06de19800000007fc00000cc4f5c90
ffc00000bf800000cb81940c00000000
ca5d11e43f8000007f8000004c2000f6
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_NE after
+FCCMPE_S_S_0x0_EQ after
cc06de19800000007fc00000cc4f5c90
ffc00000bf800000cb81940c00000000
ca5d11e43f8000007f8000004c2000f6
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
4c3976f27fc00000c9bc17b8ff800000
cc5787afffc000004c06057acc3484c6
cc01fc5ebf800000cc014b114c4adec4
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_NE after
+FCCMPE_S_S_0x0_EQ after
4c3976f27fc00000c9bc17b8ff800000
cc5787afffc000004c06057acc3484c6
cc01fc5ebf800000cc014b114c4adec4
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000080000000
-FCCMP_S_S_0x0_NE before
+FCCMP_S_S_0x0_EQ before
cba5e7f24c23e7d43f80000080000000
cb08c01b000000007f8000007fc00000
ffc000004c1955e54b2af51c00000000
aaaaaaaaaaaaaaaa5555555555555555
-FCCMPE_S_S_0x0_NE after
+FCCMPE_S_S_0x0_EQ after
cba5e7f24c23e7d43f80000080000000
cb08c01b000000007f8000007fc00000
ffc000004c1955e54b2af51c00000000
- aaaaaaaaaaaaaaaa0000000000000000
+ aaaaaaaaaaaaaaaa0000000030000000
FCCMP_S_S_0x0_NE before
4b5bc289cc1903513f8000004c5eb326
@@ -8842,71 +8812,38 @@
cc7f825ccb4d5b744c3a3182ffc00000
aaaaaaaaaaaaaaaa0000000000000000
-FCMEQ_D_D_D before
- c36323b68e5966120000000000000000
- bff0000000000000435c06e61978eec7
- 000000000003cc7b7ff8000000000000
+FCCMP_S_S_0x0_NE before
+ bf8000004be03730cc191db400000000
+ ffc00000cc6aa702000000007fc00000
+ 7fc0000000000000ffc000004c3324f1
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- bff0000000000000435c06e61978eec7
- 000000000003cc7b7ff8000000000000
- aaaaaaaaaaaaaaaa0000000050000000
+FCCMPE_S_S_0x0_NE after
+ bf8000004be03730cc191db400000000
+ ffc00000cc6aa702000000007fc00000
+ 7fc0000000000000ffc000004c3324f1
+ aaaaaaaaaaaaaaaa0000000000000000
-FCMEQ_D_D_D before
- fff8000000000000c36d54e03c54a9cb
- fff80000000000004366649e18100aa0
- 7ff8000000000000000000000003cc7b
+FCCMP_S_S_0x0_NE before
+ ff8000004b02f285bf800000480d2d40
+ bf800000cc18a1163f800000cb5042ad
+ bf800000cc107220800000004b234bbe
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- fff80000000000004366649e18100aa0
- 7ff8000000000000000000000003cc7b
- aaaaaaaaaaaaaaaa0000000050000000
+FCCMPE_S_S_0x0_NE after
+ ff8000004b02f285bf800000480d2d40
+ bf800000cc18a1163f800000cb5042ad
+ bf800000cc107220800000004b234bbe
+ aaaaaaaaaaaaaaaa0000000000000000
-FCMEQ_D_D_D before
- bff000000000000042e1a5ae15af2e00
- fff000000000000043405e50bdc39214
- 3ff0000000000000c34a085599fce623
- aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- fff000000000000043405e50bdc39214
- 3ff0000000000000c34a085599fce623
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMEQ_D_D_D before
- bff0000000000000c3631422aabacf18
- 800000000003cc7b43446977ca86f216
- bff0000000000000c3620e43f7e8c5bc
- aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- 800000000003cc7b43446977ca86f216
- bff0000000000000c3620e43f7e8c5bc
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMEQ_D_D_D before
- c36c57587c883304435ee098d45cb7f2
- c36d5502da949d0243519c6a6e53248e
- c3604497fcd3353d7ff8000000000000
- aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- c36d5502da949d0243519c6a6e53248e
- c3604497fcd3353d7ff8000000000000
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMEQ_D_D_D before
- 7ff0000000000000000000000003cc7b
- 80000000000000007ff0000000000000
- c36c62118ad6cf34fff0000000000000
+FCCMP_S_S_0x0_NE before
+ cc6aa8174b8ce353cc62bac44bf704c6
+ 7f80000000000000cc0224c07fc00000
+ cc63108cff800000800000007f800000
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_D_D_D after
- 00000000000000000000000000000000
- 80000000000000007ff0000000000000
- c36c62118ad6cf34fff0000000000000
- aaaaaaaaaaaaaaaa0000000050000000
+FCCMPE_S_S_0x0_NE after
+ cc6aa8174b8ce353cc62bac44bf704c6
+ 7f80000000000000cc0224c07fc00000
+ cc63108cff800000800000007f800000
+ aaaaaaaaaaaaaaaa0000000000000000
FCMEQ_D_D_D before
800000000003cc7b7ff8000000000000
@@ -9392,37 +9329,70 @@
bff0000000000000fff0000000000000
aaaaaaaaaaaaaaaa0000000050000000
-FCMEQ_S_S_S before
- 4c6a338b00000000bf8000004c5738d6
- cbf61c187f8000004c66df2800000000
- 7f800000bf8000003f8000004be9ecb0
+FCMEQ_D_D_D before
+ bff0000000000000436ae71ad6cccea3
+ 436d46716cdeea720000000000000000
+ 436cdbe5092ba06f000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_S_S_S after
+FCMEQ_D_D_D after
00000000000000000000000000000000
- cbf61c187f8000004c66df2800000000
- 7f800000bf8000003f8000004be9ecb0
+ 436d46716cdeea720000000000000000
+ 436cdbe5092ba06f000000000003cc7b
aaaaaaaaaaaaaaaa0000000050000000
-FCMEQ_S_S_S before
- 4c2cb10000000000cc609db1cb82ac58
- cbd0e09d4c31a91480000000cbf58e87
- 7f8000007fc000008000000080000000
+FCMEQ_D_D_D before
+ c35ec382e6afa7397ff0000000000000
+ 3ff0000000000000435d3d961556920f
+ 7ff0000000000000bff0000000000000
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_S_S_S after
+FCMEQ_D_D_D after
00000000000000000000000000000000
- cbd0e09d4c31a91480000000cbf58e87
- 7f8000007fc000008000000080000000
+ 3ff0000000000000435d3d961556920f
+ 7ff0000000000000bff0000000000000
aaaaaaaaaaaaaaaa0000000050000000
-FCMEQ_S_S_S before
- 4b7d1d977f800000ffc0000000000000
- 00000000ffc00000bf8000007f800000
- ffc00000000000004b3b24fbffc00000
+FCMEQ_D_D_D before
+ c36c13b621ba463ec350558ae02edc5c
+ 4365962008e9869a000000000003cc7b
+ 8000000000000000c35eb1d0df5f72f9
aaaaaaaaaaaaaaaa5555555555555555
-FCMEQ_S_S_S after
+FCMEQ_D_D_D after
+ 00000000000000000000000000000000
+ 4365962008e9869a000000000003cc7b
+ 8000000000000000c35eb1d0df5f72f9
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMEQ_D_D_D before
+ c35a1c1394d8022543663522897ce3fd
+ 800000000003cc7b800000000003cc7b
+ 7ff00000000000007ff8000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMEQ_D_D_D after
+ 00000000000000000000000000000000
+ 800000000003cc7b800000000003cc7b
+ 7ff00000000000007ff8000000000000
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMEQ_D_D_D before
+ fff80000000000000000000000000000
+ 434fa3b2eb193aa27ff0000000000000
+ bff00000000000007ff0000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMEQ_D_D_D after
+ 0000000000000000ffffffffffffffff
+ 434fa3b2eb193aa27ff0000000000000
+ bff00000000000007ff0000000000000
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMEQ_D_D_D before
+ 0000000000000000fff8000000000000
+ 4347649f72192e60fff8000000000000
+ fff80000000000000000000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMEQ_D_D_D after
00000000000000000000000000000000
- 00000000ffc00000bf8000007f800000
- ffc00000000000004b3b24fbffc00000
+ 4347649f72192e60fff8000000000000
+ fff80000000000000000000000000000
aaaaaaaaaaaaaaaa0000000050000000
FCMEQ_S_S_S before
@@ -9942,70 +9912,37 @@
7f8000004be067f2bf800000cc53eda2
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_D_D_D before
- 7ff80000000000007ff8000000000000
- 436c7771c77871b9c35c64df18a203b7
- 80000000000000008000000000000000
+FCMEQ_S_S_S before
+ 4c63bb8ecbe326f97fc000007fc00000
+ 4bf6e7b24c0c6a208000000080000000
+ bf8000004c3ec2a4cb4d5c0400000000
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
- 00000000000000000000000000000000
- 436c7771c77871b9c35c64df18a203b7
- 80000000000000008000000000000000
+FCMEQ_S_S_S after
+ 000000000000000000000000ffffffff
+ 4bf6e7b24c0c6a208000000080000000
+ bf8000004c3ec2a4cb4d5c0400000000
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_D_D_D before
- 435edcf641a704dc43618d440b930455
- c349ab80778e6ab6000000000003cc7b
- bff00000000000004367d8547a23fec6
+FCMEQ_S_S_S before
+ 00000000cc26efdbff80000000000000
+ 000000003f8000004c05e309ff800000
+ cc30e358cc1f7da480000000cbf93f2c
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
+FCMEQ_S_S_S after
00000000000000000000000000000000
- c349ab80778e6ab6000000000003cc7b
- bff00000000000004367d8547a23fec6
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMGE_D_D_D before
- fff0000000000000000000000003cc7b
- 0000000000000000c364ddfb649ae444
- 4360bc612f9ab852fff0000000000000
- aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
- 0000000000000000ffffffffffffffff
- 0000000000000000c364ddfb649ae444
- 4360bc612f9ab852fff0000000000000
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMGE_D_D_D before
- 000000000003cc7b3ff0000000000000
- 8000000000000000c35f27e57b7f7f84
- c3661c6b0fee39c7c363efb475b7faaf
- aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
- 0000000000000000ffffffffffffffff
- 8000000000000000c35f27e57b7f7f84
- c3661c6b0fee39c7c363efb475b7faaf
+ 000000003f8000004c05e309ff800000
+ cc30e358cc1f7da480000000cbf93f2c
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_D_D_D before
- 4362b8e48a7ac3ed7ff0000000000000
- 80000000000000007ff8000000000000
- 800000000003cc7b435acaedbbbf973f
+FCMEQ_S_S_S before
+ 800000007fc000004c15c7247f800000
+ 80000000cb0e9eaf800000004bd6576e
+ 4c7ba0bbff8000004bd707b400000000
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
+FCMEQ_S_S_S after
00000000000000000000000000000000
- 80000000000000007ff8000000000000
- 800000000003cc7b435acaedbbbf973f
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMGE_D_D_D before
- 800000000003cc7bc341d3d5cb05c362
- 435ae0f682d2413a000000000003cc7b
- 436f74175e46ea65fff0000000000000
- aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_D_D_D after
- 0000000000000000ffffffffffffffff
- 435ae0f682d2413a000000000003cc7b
- 436f74175e46ea65fff0000000000000
+ 80000000cb0e9eaf800000004bd6576e
+ 4c7ba0bbff8000004bd707b400000000
aaaaaaaaaaaaaaaa0000000050000000
FCMGE_D_D_D before
@@ -10492,37 +10429,70 @@
4362cd6b6acbc792436fe4756c199c18
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_S_S_S before
- cc7a78c8ff8000004b9bdc6880000000
- cc611f26cc242be94c5ed55900000000
- 7f800000cc04629c4b6f4ea54a6631ec
+FCMGE_D_D_D before
+ 43537b8cfa955ae2800000000003cc7b
+ c36f4f1900be4f91fff0000000000000
+ 436bdaab1bb3ecb9000000000003cc7b
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_S_S_S after
+FCMGE_D_D_D after
00000000000000000000000000000000
- cc611f26cc242be94c5ed55900000000
- 7f800000cc04629c4b6f4ea54a6631ec
+ c36f4f1900be4f91fff0000000000000
+ 436bdaab1bb3ecb9000000000003cc7b
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_S_S_S before
- cc68ab7bffc000004c6e144affc00000
- 800000004c2e59067f8000004c2407c1
- 4c09f095cc5d30d680000000bf800000
+FCMGE_D_D_D before
+ c36c23e4b85d4e29c364857d27ce5165
+ 434de9d4ac69dda0432cc63de46a85f8
+ 7ff0000000000000c3608c536907a2b4
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_S_S_S after
- 000000000000000000000000ffffffff
- 800000004c2e59067f8000004c2407c1
- 4c09f095cc5d30d680000000bf800000
+FCMGE_D_D_D after
+ 0000000000000000ffffffffffffffff
+ 434de9d4ac69dda0432cc63de46a85f8
+ 7ff0000000000000c3608c536907a2b4
aaaaaaaaaaaaaaaa0000000050000000
-FCMGE_S_S_S before
- c8a4a8c07f8000007fc0000080000000
- 000000007f8000008000000080000000
- ff800000cc01a6724b77f21980000000
+FCMGE_D_D_D before
+ 436dc28950d9c566fff8000000000000
+ c36d156f56d622d0fff8000000000000
+ 7ff0000000000000436480f82d2d1910
aaaaaaaaaaaaaaaa5555555555555555
-FCMGE_S_S_S after
- 000000000000000000000000ffffffff
- 000000007f8000008000000080000000
- ff800000cc01a6724b77f21980000000
+FCMGE_D_D_D after
+ 00000000000000000000000000000000
+ c36d156f56d622d0fff8000000000000
+ 7ff0000000000000436480f82d2d1910
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMGE_D_D_D before
+ 800000000003cc7b4365cb20b6e1bf06
+ 800000000003cc7bbff0000000000000
+ 43613e129ee34a3ac36ba61ac9fe1d33
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMGE_D_D_D after
+ 0000000000000000ffffffffffffffff
+ 800000000003cc7bbff0000000000000
+ 43613e129ee34a3ac36ba61ac9fe1d33
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMGE_D_D_D before
+ 7ff80000000000008000000000000000
+ c2f495151a1069507ff0000000000000
+ 80000000000000008000000000000000
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMGE_D_D_D after
+ 0000000000000000ffffffffffffffff
+ c2f495151a1069507ff0000000000000
+ 80000000000000008000000000000000
+ aaaaaaaaaaaaaaaa0000000050000000
+
+FCMGE_D_D_D before
+ 000000000003cc7b7ff0000000000000
+ 434efe433372d092800000000003cc7b
+ fff0000000000000c36034ce357da73e
+ aaaaaaaaaaaaaaaa5555555555555555
+FCMGE_D_D_D after
+ 0000000000000000ffffffffffffffff
+ 434efe433372d092800000000003cc7b
+ fff0000000000000c36034ce357da73e
aaaaaaaaaaaaaaaa0000000050000000
FCMGE_S_S_S before
@@ -11042,70 +11012,37 @@
4be4768c000000004c193da84c38f3fc
aaaaaaaaaaaaaaaa0000000050000000
-FCMGT_D_D_D before
- 000000000003cc7b7ff0000000000000
- c368a71cbaf6e8563ff0000000000000
- 436dbd1d790d86b6000000000003cc7b
- aaaaaaaaaaaaaaaa5555555555555555
-FCMGT_D_D_D after
- 0000000000000000ffffffffffffffff
- c368a71cbaf6e8563ff0000000000000
- 436dbd1d790d86b6000000000003cc7b
- aaaaaaaaaaaaaaaa0000000050000000
-
-FCMGT_D_D_D before
- 4364c135310f9bec4368dd41ce6cafd2
- c364ee5913ffe28d436fe22132a05b70
- 7ff8000000000000fff8000000000000
+FCMGE_S_S_S before
+ cc4538e63f800000000000007f800000
+ 4c2609aa4c46ea0e4c6de8ec00000000
+ 7fc00000ffc00000cc2772c94c7f110a
aaaaaaaaaaaaaaaa5555555555555555
-FCMGT_D_D_D after
+FCMGE_S_S_S after
00000000000000000000000000000000
- c364ee5913ffe28d436fe22132a05b70
- 7ff8000000000000fff8000000000000
+ 4c2609aa4c46ea0e4c6de8ec00000000
+ 7fc00000ffc00000cc2772c94c7f110a
aaaaaaaaaaaaaaaa0000000050000000
-FCMGT_D_D_D before
- 435467ada5a60a04c35e176a5be9d66d
- c363ba6c59219f9ec36b9b47b4858d84
- c358e457dd91bfa6c363ec441682ab5a
+FCMGE_S_S_S before
+ cc1dd363cc5cda3e4ba33d6dcbf0bb53
+ 4c52f74effc00000cbc722bfcc1f6221
+ 7fc00000ffc000004bf8bb6800000000
aaaaaaaaaaaaaaaa5555555555555555
-FCMGT_D_D_D after
+FCMGE_S_S_S after
00000000000000000000000000000000
- c363ba6c59219f9ec36b9b47b4858d84
- c358e457dd91bfa6c363ec441682ab5a
+ 4c52f74effc00...
[truncated message content] |
Author: sewardj
Date: Mon Apr 6 20:34:03 2015
New Revision: 3120
Log:
arm64: implement FSQRT 2d_2d, 4s_4s, 2s_2s
AFAICS this completes the AArch64 SIMD implementation, except for the
crypto instructions.
This changes the type of Iop_Sqrt64x2 and Iop_Sqrt32x4 so as to take a
rounding mode argument. This will (temporarily, of course) break all
of the other targets that implement vector fsqrt.
Modified:
trunk/priv/guest_arm64_toIR.c
trunk/priv/host_arm64_defs.c
trunk/priv/host_arm64_defs.h
trunk/priv/host_arm64_isel.c
trunk/priv/ir_defs.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Mon Apr 6 20:34:03 2015
@@ -12437,6 +12437,21 @@
return True;
}
+ if (bitU == 1 && size >= X10 && opcode == BITS5(1,1,1,1,1)) {
+ /* -------- 1,1x,11111: FSQRT 2d_2d, 4s_4s, 2s_2s -------- */
+ Bool isD = (size & 1) == 1;
+ IROp op = isD ? Iop_Sqrt64Fx2 : Iop_Sqrt32Fx4;
+ if (bitQ == 0 && isD) return False; // implied 1d case
+ IRTemp resV = newTempV128();
+ assign(resV, binop(op, mkexpr(mk_get_IR_rounding_mode()),
+ getQReg128(nn)));
+ putQReg128(dd, math_MAYBE_ZERO_HI64(bitQ, resV));
+ const HChar* arr = bitQ == 0 ? "2s" : (size == X11 ? "2d" : "4s");
+ DIP("%s %s.%s, %s.%s\n", "fsqrt",
+ nameQReg128(dd), arr, nameQReg128(nn), arr);
+ return True;
+ }
+
return False;
# undef INSN
}
Modified: trunk/priv/host_arm64_defs.c
==============================================================================
--- trunk/priv/host_arm64_defs.c (original)
+++ trunk/priv/host_arm64_defs.c Mon Apr 6 20:34:03 2015
@@ -749,6 +749,8 @@
case ARM64vecu_FRECPE32x4: *nm = "frecpe"; *ar = "4s"; return;
case ARM64vecu_FRSQRTE64x2: *nm = "frsqrte"; *ar = "2d"; return;
case ARM64vecu_FRSQRTE32x4: *nm = "frsqrte"; *ar = "4s"; return;
+ case ARM64vecu_FSQRT64x2: *nm = "fsqrt"; *ar = "2d"; return;
+ case ARM64vecu_FSQRT32x4: *nm = "fsqrt"; *ar = "4s"; return;
default: vpanic("showARM64VecUnaryOp");
}
}
@@ -4869,6 +4871,9 @@
011 01110 11 1 00001 110110 n d FRECPE Vd.2d, Vn.2d
011 01110 10 1 00001 110110 n d FRECPE Vd.4s, Vn.4s
+
+ 011 01110 11 1 00001 111110 n d FSQRT Vd.2d, Vn.2d
+ 011 01110 10 1 00001 111110 n d FSQRT Vd.4s, Vn.4s
*/
UInt vD = qregEnc(i->ARM64in.VUnaryV.dst);
UInt vN = qregEnc(i->ARM64in.VUnaryV.arg);
@@ -4960,6 +4965,12 @@
case ARM64vecu_FRSQRTE32x4:
*p++ = X_3_8_5_6_5_5(X011, X01110101, X00001, X110110, vN, vD);
break;
+ case ARM64vecu_FSQRT64x2:
+ *p++ = X_3_8_5_6_5_5(X011, X01110111, X00001, X111110, vN, vD);
+ break;
+ case ARM64vecu_FSQRT32x4:
+ *p++ = X_3_8_5_6_5_5(X011, X01110101, X00001, X111110, vN, vD);
+ break;
default:
goto bad;
}
Modified: trunk/priv/host_arm64_defs.h
==============================================================================
--- trunk/priv/host_arm64_defs.h (original)
+++ trunk/priv/host_arm64_defs.h Mon Apr 6 20:34:03 2015
@@ -414,6 +414,7 @@
ARM64vecu_URSQRTE32x4,
ARM64vecu_FRECPE64x2, ARM64vecu_FRECPE32x4,
ARM64vecu_FRSQRTE64x2, ARM64vecu_FRSQRTE32x4,
+ ARM64vecu_FSQRT64x2, ARM64vecu_FSQRT32x4,
ARM64vecu_INVALID
}
ARM64VecUnaryOp;
Modified: trunk/priv/host_arm64_isel.c
==============================================================================
--- trunk/priv/host_arm64_isel.c (original)
+++ trunk/priv/host_arm64_isel.c Mon Apr 6 20:34:03 2015
@@ -2363,6 +2363,17 @@
if (e->tag == Iex_Binop) {
switch (e->Iex.Binop.op) {
+ case Iop_Sqrt32Fx4:
+ case Iop_Sqrt64Fx2: {
+ HReg arg = iselV128Expr(env, e->Iex.Binop.arg2);
+ HReg res = newVRegV(env);
+ set_FPCR_rounding_mode(env, e->Iex.Binop.arg1);
+ ARM64VecUnaryOp op
+ = e->Iex.Binop.op == Iop_Sqrt32Fx4
+ ? ARM64vecu_FSQRT32x4 : ARM64vecu_FSQRT64x2;
+ addInstr(env, ARM64Instr_VUnaryV(op, res, arg));
+ return res;
+ }
case Iop_64HLtoV128: {
HReg res = newVRegV(env);
HReg argL = iselIntExpr_R(env, e->Iex.Binop.arg1);
Modified: trunk/priv/ir_defs.c
==============================================================================
--- trunk/priv/ir_defs.c (original)
+++ trunk/priv/ir_defs.c Mon Apr 6 20:34:03 2015
@@ -2859,6 +2859,10 @@
case Iop_RSqrtEst32Ux4:
UNARY(Ity_V128, Ity_V128);
+ case Iop_Sqrt64Fx2:
+ case Iop_Sqrt32Fx4:
+ BINARY(ity_RMode,Ity_V128, Ity_V128);
+
case Iop_64HLtoV128:
BINARY(Ity_I64,Ity_I64, Ity_V128);
@@ -3019,8 +3023,8 @@
case Iop_RecipEst64Fx2: case Iop_RSqrtEst64Fx2:
case Iop_RecipEst32Ux4:
case Iop_RSqrtEst32F0x4:
- case Iop_Sqrt32Fx4: case Iop_Sqrt32F0x4:
- case Iop_Sqrt64Fx2: case Iop_Sqrt64F0x2:
+ case Iop_Sqrt32F0x4:
+ case Iop_Sqrt64F0x2:
case Iop_CmpNEZ8x16: case Iop_CmpNEZ16x8:
case Iop_CmpNEZ32x4: case Iop_CmpNEZ64x2:
case Iop_Cnt8x16:
Modified: trunk/pub/libvex_ir.h
==============================================================================
--- trunk/pub/libvex_ir.h (original)
+++ trunk/pub/libvex_ir.h Mon Apr 6 20:34:03 2015
@@ -1294,9 +1294,11 @@
/* unary */
Iop_Abs32Fx4,
- Iop_Sqrt32Fx4,
Iop_Neg32Fx4,
+ /* binary :: IRRoundingMode(I32) x V128 -> V128 */
+ Iop_Sqrt32Fx4,
+
/* Vector Reciprocal Estimate finds an approximate reciprocal of each
element in the operand vector, and places the results in the
destination vector. */
@@ -1359,9 +1361,11 @@
/* unary */
Iop_Abs64Fx2,
- Iop_Sqrt64Fx2,
Iop_Neg64Fx2,
+ /* binary :: IRRoundingMode(I32) x V128 -> V128 */
+ Iop_Sqrt64Fx2,
+
/* see 32Fx4 variants for description */
Iop_RecipEst64Fx2, // unary
Iop_RecipStep64Fx2, // binary
|
|
From: <sv...@va...> - 2015-04-06 14:52:35
|
Author: sewardj
Date: Mon Apr 6 15:52:28 2015
New Revision: 15070
Log:
Memcheck: add support for recently added IROps:
Iop_F64toF16
Iop_F32toF16
Iop_F16toF64
Iop_F16toF32
Modified:
trunk/memcheck/mc_translate.c
trunk/memcheck/tests/vbit-test/irops.c
trunk/memcheck/tests/vbit-test/vtest.h
Modified: trunk/memcheck/mc_translate.c
==============================================================================
--- trunk/memcheck/mc_translate.c (original)
+++ trunk/memcheck/mc_translate.c Mon Apr 6 15:52:28 2015
@@ -381,6 +381,7 @@
case Ity_I32:
case Ity_I64:
case Ity_I128: return ty;
+ case Ity_F16: return Ity_I16;
case Ity_F32: return Ity_I32;
case Ity_D32: return Ity_I32;
case Ity_F64: return Ity_I64;
@@ -3801,6 +3802,11 @@
/* First arg is I32 (rounding mode), second is F32/I32 (data). */
return mkLazy2(mce, Ity_I32, vatom1, vatom2);
+ case Iop_F64toF16:
+ case Iop_F32toF16:
+ /* First arg is I32 (rounding mode), second is F64/F32 (data). */
+ return mkLazy2(mce, Ity_I16, vatom1, vatom2);
+
case Iop_F128toI32S: /* IRRoundingMode(I32) x F128 -> signed I32 */
case Iop_F128toI32U: /* IRRoundingMode(I32) x F128 -> unsigned I32 */
case Iop_F128toF32: /* IRRoundingMode(I32) x F128 -> F32 */
@@ -4335,6 +4341,7 @@
case Iop_I64UtoD128: /* unsigned I64 -> D128 */
return mkPCastTo(mce, Ity_I128, vatom);
+ case Iop_F16toF64:
case Iop_F32toF64:
case Iop_I32StoF64:
case Iop_I32UtoF64:
@@ -4364,6 +4371,7 @@
case Iop_TruncF64asF32:
case Iop_NegF32:
case Iop_AbsF32:
+ case Iop_F16toF32:
return mkPCastTo(mce, Ity_I32, vatom);
case Iop_Ctz32:
Modified: trunk/memcheck/tests/vbit-test/irops.c
==============================================================================
--- trunk/memcheck/tests/vbit-test/irops.c (original)
+++ trunk/memcheck/tests/vbit-test/irops.c Mon Apr 6 15:52:28 2015
@@ -259,11 +259,11 @@
{ DEFOP(Iop_RecpExpF64, UNDEF_UNKNOWN), },
{ DEFOP(Iop_RecpExpF32, UNDEF_UNKNOWN), },
- /* ------------------ 16-bit scalar FP --------------------- */
- { DEFOP(Iop_F16toF64, UNDEF_UNKNOWN), },
- { DEFOP(Iop_F64toF16, UNDEF_UNKNOWN), },
- { DEFOP(Iop_F16toF32, UNDEF_UNKNOWN), },
- { DEFOP(Iop_F32toF16, UNDEF_UNKNOWN), },
+ /* ------------------ 16-bit scalar FP ------------------ */
+ { DEFOP(Iop_F16toF64, UNDEF_ALL), .arm64 = 1 },
+ { DEFOP(Iop_F64toF16, UNDEF_ALL), .arm64 = 1 },
+ { DEFOP(Iop_F16toF32, UNDEF_ALL), .arm64 = 1 },
+ { DEFOP(Iop_F32toF16, UNDEF_ALL), .arm64 = 1 },
/* ------------------ 32-bit SIMD Integer ------------------ */
{ DEFOP(Iop_QAdd32S, UNDEF_UNKNOWN), },
Modified: trunk/memcheck/tests/vbit-test/vtest.h
==============================================================================
--- trunk/memcheck/tests/vbit-test/vtest.h (original)
+++ trunk/memcheck/tests/vbit-test/vtest.h Mon Apr 6 15:52:28 2015
@@ -72,6 +72,7 @@
unsigned ppc32 : 1;
unsigned ppc64 : 1;
unsigned arm : 1;
+ unsigned arm64 : 1;
unsigned x86 : 1;
unsigned mips32 : 1;
unsigned mips64 : 1;
|
|
From: <sv...@va...> - 2015-04-06 14:49:54
|
Author: sewardj
Date: Mon Apr 6 15:49:42 2015
New Revision: 15069
Log:
arm64: enable test cases for
SCVTF d_d_imm, s_s_imm
UCVTF d_d_imm, s_s_imm
FCVTZS d_d_imm, s_s_imm
FCVTZU d_d_imm, s_s_imm
FCVTXN s_d
SCVTF d_d, s_s
UCVTF d_d, s_s
SCVTF {2d_2d,4s_4s,2s_2s}_imm
UCVTF {2d_2d,4s_4s,2s_2s}_imm
FCVTZS {2d_2d,4s_4s,2s_2s}_imm
FCVTZU {2d_2d,4s_4s,2s_2s}_imm
FCVTXN 2s/4s_2d
FCVTZ{S,U} {w,x}_{s,x}_#fbits
Modified:
trunk/none/tests/arm64/fp_and_simd.c
trunk/none/tests/arm64/fp_and_simd.stdout.exp
Modified: trunk/none/tests/arm64/fp_and_simd.c
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.c (original)
+++ trunk/none/tests/arm64/fp_and_simd.c Mon Apr 6 15:49:42 2015
@@ -5179,110 +5179,110 @@
// fcvtzu 2d,4s,2s (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
// fcvtzs w_s,x_s,w_d,x_d (fcvt to signed fixedpt, to zero) (w/ #fbits)
// fcvtzu w_s,x_s,w_d,x_d (fcvt to unsigned fixedpt, to zero) (w/ #fbits)
- if (0) test_fcvtzs_d_d_fbits1(TyDF);
- if (0) test_fcvtzs_d_d_fbits32(TyDF);
- if (0) test_fcvtzs_d_d_fbits64(TyDF);
- if (0) test_fcvtzu_d_d_fbits1(TyDF);
- if (0) test_fcvtzu_d_d_fbits32(TyDF);
- if (0) test_fcvtzu_d_d_fbits64(TyDF);
- if (0) test_fcvtzs_s_s_fbits1(TySF);
- if (0) test_fcvtzs_s_s_fbits16(TySF);
- if (0) test_fcvtzs_s_s_fbits32(TySF);
- if (0) test_fcvtzu_s_s_fbits1(TySF);
- if (0) test_fcvtzu_s_s_fbits16(TySF);
- if (0) test_fcvtzu_s_s_fbits32(TySF);
- if (0) test_fcvtzs_2d_2d_fbits1(TyDF);
- if (0) test_fcvtzs_2d_2d_fbits32(TyDF);
- if (0) test_fcvtzs_2d_2d_fbits64(TyDF);
- if (0) test_fcvtzu_2d_2d_fbits1(TyDF);
- if (0) test_fcvtzu_2d_2d_fbits32(TyDF);
- if (0) test_fcvtzu_2d_2d_fbits64(TyDF);
- if (0) test_fcvtzs_4s_4s_fbits1(TySF);
- if (0) test_fcvtzs_4s_4s_fbits16(TySF);
- if (0) test_fcvtzs_4s_4s_fbits32(TySF);
- if (0) test_fcvtzu_4s_4s_fbits1(TySF);
- if (0) test_fcvtzu_4s_4s_fbits16(TySF);
- if (0) test_fcvtzu_4s_4s_fbits32(TySF);
- if (0) test_fcvtzs_2s_2s_fbits1(TySF);
- if (0) test_fcvtzs_2s_2s_fbits16(TySF);
- if (0) test_fcvtzs_2s_2s_fbits32(TySF);
- if (0) test_fcvtzu_2s_2s_fbits1(TySF);
- if (0) test_fcvtzu_2s_2s_fbits16(TySF);
- if (0) test_fcvtzu_2s_2s_fbits32(TySF);
- if (0) test_fcvtzs_w_s_fbits1(TySF);
- if (0) test_fcvtzs_w_s_fbits16(TySF);
- if (0) test_fcvtzs_w_s_fbits32(TySF);
- if (0) test_fcvtzu_w_s_fbits1(TySF);
- if (0) test_fcvtzu_w_s_fbits16(TySF);
- if (0) test_fcvtzu_w_s_fbits32(TySF);
- if (0) test_fcvtzs_x_s_fbits1(TySF);
- if (0) test_fcvtzs_x_s_fbits32(TySF);
- if (0) test_fcvtzs_x_s_fbits64(TySF);
- if (0) test_fcvtzu_x_s_fbits1(TySF);
- if (0) test_fcvtzu_x_s_fbits32(TySF);
- if (0) test_fcvtzu_x_s_fbits64(TySF);
- if (0) test_fcvtzs_w_d_fbits1(TyDF);
- if (0) test_fcvtzs_w_d_fbits16(TyDF);
- if (0) test_fcvtzs_w_d_fbits32(TyDF);
- if (0) test_fcvtzu_w_d_fbits1(TyDF);
- if (0) test_fcvtzu_w_d_fbits16(TyDF);
- if (0) test_fcvtzu_w_d_fbits32(TyDF);
- if (0) test_fcvtzs_x_d_fbits1(TyDF);
- if (0) test_fcvtzs_x_d_fbits32(TyDF);
- if (0) test_fcvtzs_x_d_fbits64(TyDF);
- if (0) test_fcvtzu_x_d_fbits1(TyDF);
- if (0) test_fcvtzu_x_d_fbits32(TyDF);
- if (0) test_fcvtzu_x_d_fbits64(TyDF);
+ if (1) test_fcvtzs_d_d_fbits1(TyDF);
+ if (1) test_fcvtzs_d_d_fbits32(TyDF);
+ if (1) test_fcvtzs_d_d_fbits64(TyDF);
+ if (1) test_fcvtzu_d_d_fbits1(TyDF);
+ if (1) test_fcvtzu_d_d_fbits32(TyDF);
+ if (1) test_fcvtzu_d_d_fbits64(TyDF);
+ if (1) test_fcvtzs_s_s_fbits1(TySF);
+ if (1) test_fcvtzs_s_s_fbits16(TySF);
+ if (1) test_fcvtzs_s_s_fbits32(TySF);
+ if (1) test_fcvtzu_s_s_fbits1(TySF);
+ if (1) test_fcvtzu_s_s_fbits16(TySF);
+ if (1) test_fcvtzu_s_s_fbits32(TySF);
+ if (1) test_fcvtzs_2d_2d_fbits1(TyDF);
+ if (1) test_fcvtzs_2d_2d_fbits32(TyDF);
+ if (1) test_fcvtzs_2d_2d_fbits64(TyDF);
+ if (1) test_fcvtzu_2d_2d_fbits1(TyDF);
+ if (1) test_fcvtzu_2d_2d_fbits32(TyDF);
+ if (1) test_fcvtzu_2d_2d_fbits64(TyDF);
+ if (1) test_fcvtzs_4s_4s_fbits1(TySF);
+ if (1) test_fcvtzs_4s_4s_fbits16(TySF);
+ if (1) test_fcvtzs_4s_4s_fbits32(TySF);
+ if (1) test_fcvtzu_4s_4s_fbits1(TySF);
+ if (1) test_fcvtzu_4s_4s_fbits16(TySF);
+ if (1) test_fcvtzu_4s_4s_fbits32(TySF);
+ if (1) test_fcvtzs_2s_2s_fbits1(TySF);
+ if (1) test_fcvtzs_2s_2s_fbits16(TySF);
+ if (1) test_fcvtzs_2s_2s_fbits32(TySF);
+ if (1) test_fcvtzu_2s_2s_fbits1(TySF);
+ if (1) test_fcvtzu_2s_2s_fbits16(TySF);
+ if (1) test_fcvtzu_2s_2s_fbits32(TySF);
+ if (1) test_fcvtzs_w_s_fbits1(TySF);
+ if (1) test_fcvtzs_w_s_fbits16(TySF);
+ if (1) test_fcvtzs_w_s_fbits32(TySF);
+ if (1) test_fcvtzu_w_s_fbits1(TySF);
+ if (1) test_fcvtzu_w_s_fbits16(TySF);
+ if (1) test_fcvtzu_w_s_fbits32(TySF);
+ if (1) test_fcvtzs_x_s_fbits1(TySF);
+ if (1) test_fcvtzs_x_s_fbits32(TySF);
+ if (1) test_fcvtzs_x_s_fbits64(TySF);
+ if (1) test_fcvtzu_x_s_fbits1(TySF);
+ if (1) test_fcvtzu_x_s_fbits32(TySF);
+ if (1) test_fcvtzu_x_s_fbits64(TySF);
+ if (1) test_fcvtzs_w_d_fbits1(TyDF);
+ if (1) test_fcvtzs_w_d_fbits16(TyDF);
+ if (1) test_fcvtzs_w_d_fbits32(TyDF);
+ if (1) test_fcvtzu_w_d_fbits1(TyDF);
+ if (1) test_fcvtzu_w_d_fbits16(TyDF);
+ if (1) test_fcvtzu_w_d_fbits32(TyDF);
+ if (1) test_fcvtzs_x_d_fbits1(TyDF);
+ if (1) test_fcvtzs_x_d_fbits32(TyDF);
+ if (1) test_fcvtzs_x_d_fbits64(TyDF);
+ if (1) test_fcvtzu_x_d_fbits1(TyDF);
+ if (1) test_fcvtzu_x_d_fbits32(TyDF);
+ if (1) test_fcvtzu_x_d_fbits64(TyDF);
// fcvtxn s_d (fcvt to lower prec narrow, rounding to odd)
// fcvtxn 2s_2d,4s_2d
- if (0) test_fcvtxn_s_d(TyDF);
- if (0) test_fcvtxn_2s_2d(TyDF);
- if (0) test_fcvtxn_4s_2d(TyDF);
+ if (1) test_fcvtxn_s_d(TyDF);
+ if (1) test_fcvtxn_2s_2d(TyDF);
+ if (1) test_fcvtxn_4s_2d(TyDF);
// scvtf d,s _#fbits
// ucvtf d,s _#fbits
// scvtf 2d,4s,2s _#fbits
// ucvtf 2d,4s,2s _#fbits
- if (0) test_scvtf_d_d_fbits1(TyD);
- if (0) test_scvtf_d_d_fbits32(TyD);
- if (0) test_scvtf_d_d_fbits64(TyD);
- if (0) test_ucvtf_d_d_fbits1(TyD);
- if (0) test_ucvtf_d_d_fbits32(TyD);
- if (0) test_ucvtf_d_d_fbits64(TyD);
- if (0) test_scvtf_s_s_fbits1(TyS);
- if (0) test_scvtf_s_s_fbits16(TyS);
- if (0) test_scvtf_s_s_fbits32(TyS);
- if (0) test_ucvtf_s_s_fbits1(TyS);
- if (0) test_ucvtf_s_s_fbits16(TyS);
- if (0) test_ucvtf_s_s_fbits32(TyS);
- if (0) test_scvtf_2d_2d_fbits1(TyD);
- if (0) test_scvtf_2d_2d_fbits32(TyD);
- if (0) test_scvtf_2d_2d_fbits64(TyD);
- if (0) test_ucvtf_2d_2d_fbits1(TyD);
- if (0) test_ucvtf_2d_2d_fbits32(TyD);
- if (0) test_ucvtf_2d_2d_fbits64(TyD);
- if (0) test_scvtf_4s_4s_fbits1(TyS);
- if (0) test_scvtf_4s_4s_fbits16(TyS);
- if (0) test_scvtf_4s_4s_fbits32(TyS);
- if (0) test_ucvtf_4s_4s_fbits1(TyS);
- if (0) test_ucvtf_4s_4s_fbits16(TyS);
- if (0) test_ucvtf_4s_4s_fbits32(TyS);
- if (0) test_scvtf_2s_2s_fbits1(TyS);
- if (0) test_scvtf_2s_2s_fbits16(TyS);
- if (0) test_scvtf_2s_2s_fbits32(TyS);
- if (0) test_ucvtf_2s_2s_fbits1(TyS);
- if (0) test_ucvtf_2s_2s_fbits16(TyS);
- if (0) test_ucvtf_2s_2s_fbits32(TyS);
+ if (1) test_scvtf_d_d_fbits1(TyD);
+ if (1) test_scvtf_d_d_fbits32(TyD);
+ if (1) test_scvtf_d_d_fbits64(TyD);
+ if (1) test_ucvtf_d_d_fbits1(TyD);
+ if (1) test_ucvtf_d_d_fbits32(TyD);
+ if (1) test_ucvtf_d_d_fbits64(TyD);
+ if (1) test_scvtf_s_s_fbits1(TyS);
+ if (1) test_scvtf_s_s_fbits16(TyS);
+ if (1) test_scvtf_s_s_fbits32(TyS);
+ if (1) test_ucvtf_s_s_fbits1(TyS);
+ if (1) test_ucvtf_s_s_fbits16(TyS);
+ if (1) test_ucvtf_s_s_fbits32(TyS);
+ if (1) test_scvtf_2d_2d_fbits1(TyD);
+ if (1) test_scvtf_2d_2d_fbits32(TyD);
+ if (1) test_scvtf_2d_2d_fbits64(TyD);
+ if (1) test_ucvtf_2d_2d_fbits1(TyD);
+ if (1) test_ucvtf_2d_2d_fbits32(TyD);
+ if (1) test_ucvtf_2d_2d_fbits64(TyD);
+ if (1) test_scvtf_4s_4s_fbits1(TyS);
+ if (1) test_scvtf_4s_4s_fbits16(TyS);
+ if (1) test_scvtf_4s_4s_fbits32(TyS);
+ if (1) test_ucvtf_4s_4s_fbits1(TyS);
+ if (1) test_ucvtf_4s_4s_fbits16(TyS);
+ if (1) test_ucvtf_4s_4s_fbits32(TyS);
+ if (1) test_scvtf_2s_2s_fbits1(TyS);
+ if (1) test_scvtf_2s_2s_fbits16(TyS);
+ if (1) test_scvtf_2s_2s_fbits32(TyS);
+ if (1) test_ucvtf_2s_2s_fbits1(TyS);
+ if (1) test_ucvtf_2s_2s_fbits16(TyS);
+ if (1) test_ucvtf_2s_2s_fbits32(TyS);
// scvtf d,s
// ucvtf d,s
// scvtf 2d,4s,2s
// ucvtf 2d,4s,2s
- if (0) test_scvtf_d_d(TyD);
- if (0) test_ucvtf_d_d(TyD);
- if (0) test_scvtf_s_s(TyS);
- if (0) test_ucvtf_s_s(TyS);
+ if (1) test_scvtf_d_d(TyD);
+ if (1) test_ucvtf_d_d(TyD);
+ if (1) test_scvtf_s_s(TyS);
+ if (1) test_ucvtf_s_s(TyS);
if (1) test_scvtf_2d_2d(TyD);
if (1) test_ucvtf_2d_2d(TyD);
if (1) test_scvtf_4s_4s(TyS);
Modified: trunk/none/tests/arm64/fp_and_simd.stdout.exp
==============================================================================
--- trunk/none/tests/arm64/fp_and_simd.stdout.exp (original)
+++ trunk/none/tests/arm64/fp_and_simd.stdout.exp Mon Apr 6 15:49:42 2015
@@ -26777,1924 +26777,2016 @@
fcvtzu w21, d10 5603d7762626b1389e5067719c25e928 ce5caa70b80f3e168af470804cf4b647 5603d7762626b1389e5067719c25e928 52d8c54c6eda36e90000000000000000 fpsr=00000000
fcvtzs x21, d10 f9226f3e7e73d5fe512a2600b8bd2b4e ebaeb9b199c8a3b9ebea9209d65056bc f9226f3e7e73d5fe512a2600b8bd2b4e 067a12d8e2b54f007fffffffffffffff fpsr=00000000
fcvtzu x21, d10 c9e2849dfd0461ac83ca97a90e7dc8a1 0dd95c00f87c073ca5df7e24f28de955 c9e2849dfd0461ac83ca97a90e7dc8a1 6e67246485fb97e90000000000000000 fpsr=00000000
-scvtf v10.2d, v21.2d 2524777202b8b423970f184eff452101 93bff53f350dcb8118b193b3018ad0f3 c3db1002b032bc8d43b8b193b3018ad1 93bff53f350dcb8118b193b3018ad0f3 fpsr=00000000
-ucvtf v10.2d, v21.2d 6dc8a79fed702e44eadb0bceeaf4954e de3ee44cb1594e66a241319461266a76 43ebc7dc89962b2a43e44826328c24cd de3ee44cb1594e66a241319461266a76 fpsr=00000000
-scvtf v10.4s, v21.4s 4c388708cb41f1cca56eb9a8754317be f7fff43f4076020a62b1bf4143180937 cd0000bc4e80ec044ec5637f4e863012 f7fff43f4076020a62b1bf4143180937 fpsr=00000000
-ucvtf v10.4s, v21.4s 408b4153e4a51394811a8acf9abf38ab 526ce1f9efcc43451b9ff198241fa648 4ea4d9c44f6fcc434ddcff8d4e107e99 526ce1f9efcc43451b9ff198241fa648 fpsr=00000000
-scvtf v10.2s, v21.2s 17186f0d5b65149c952405e9327b2c1c 6a4a5c995536fbb8e423e55acf1eaed6 0000000000000000cddee0d5ce438545 6a4a5c995536fbb8e423e55acf1eaed6 fpsr=00000000
-ucvtf v10.2s, v21.2s 33bf7316906155c4416b89d69d5754f3 9e7bc401d1938a441d1dfa66a5f581c1 00000000000000004de8efd34f25f582 9e7bc401d1938a441d1dfa66a5f581c1 fpsr=00000000
-scvtf s7, w15, #1 f460ac4ee47935eee5d1767539330f0e 4fdd7a0fc3c551c9266d919d068480e8 0000000000000000000000004c50901d 83a7d0cb571348df266d919d068480e8 fpsr=00000000
-scvtf s7, w15, #16 b8da7b95b68c15f9e2342da868efbd4f db51dda58cabb02760f209e050ab0a2d 00000000000000000000000046a15614 c2782dd80f67561d60f209e050ab0a2d fpsr=00000000
-scvtf s7, w15, #32 e10f3fca677b53c497750d4d8a6bbf94 a5b74da18b24053e2b8ec30de54a806e 000000000000000000000000bdd5abfd eeabc83cadbe8b042b8ec30de54a806e fpsr=00000000
-scvtf d7, w15, #1 cfdd58ce5627523165747645fe8674be 0aef2be42011b2ede61f1d052540408c 000000000000000041b2a02046000000 662001d691f94874e61f1d052540408c fpsr=00000000
-scvtf d7, w15, #16 e1262782e36e6f1eab11c97024213cad 6cd9d64eac521716f18779a76e6fad67 000000000000000040db9beb59c00000 8ab737881cf8ec4df18779a76e6fad67 fpsr=00000000
-scvtf d7, w15, #32 77c80bc46f310c6cca2b65ae5c1d7840 2a55afbf8ec79397aca437d523b524df 00000000000000003fc1da926f800000 ba4fca30ae9bd76faca437d523b524df fpsr=00000000
-scvtf s7, x15, #1 f1a46475595089fb20a4abdf07588759 a5421417275086517857b66ea1f307d4 0000000000000000000000005e70af6d 57ca1aafa6c26aba7857b66ea1f307d4 fpsr=00000000
-scvtf s7, x15, #32 b09a937501aa44ab105afae385b3cad6 3c826835d6cd5024b48056514a09b626 000000000000000000000000ce96ff53 c00688e5644d040db48056514a09b626 fpsr=00000000
-scvtf s7, x15, #64 148af8a3c8219f5cf72fb29a340ea099 4ff308fbfb1d52f0c1ff78607dd790b4 000000000000000000000000be78021e 56e474b2481b064ac1ff78607dd790b4 fpsr=00000000
-scvtf d7, x15, #1 7b53f1e10d94faed370134e376496980 3f765647f722ec95feb37b799b3cf560 0000000000000000c364c848664c30aa 78443cf6b30dcf4ffeb37b799b3cf560 fpsr=00000000
-scvtf d7, x15, #32 48d7e00d30e2b4402fb1dfa0ab43866c 6bebb2fa29ba7cf3cb7ebf7d031a4508 0000000000000000c1ca40a0417e72dd 860642900504bffdcb7ebf7d031a4508 fpsr=00000000
-scvtf d7, x15, #64 d8f4250992ec2d33401f13af32de563d 34327af4f2c664e9893ea54c1650e18d 0000000000000000bfddb056acfa6bc8 e10ae6629cde3734893ea54c1650e18d fpsr=00000000
+fcvtzs d10, d21, #1 2524777202b8b423970f184eff452101 93bff53f350dcb8118b193b3018ad0f3 00000000000000000000000000000000 93bff53f350dcb8118b193b3018ad0f3 fpsr=00000000
+fcvtzs d10, d21, #32 6dc8a79fed702e44eadb0bceeaf4954e de3ee44cb1594e66a241319461266a76 00000000000000000000000000000000 de3ee44cb1594e66a241319461266a76 fpsr=00000000
+fcvtzs d10, d21, #64 4c388708cb41f1cca56eb9a8754317be f7fff43f4076020a62b1bf4143180937 00000000000000007fffffffffffffff f7fff43f4076020a62b1bf4143180937 fpsr=00000000
+fcvtzu d10, d21, #1 408b4153e4a51394811a8acf9abf38ab 526ce1f9efcc43451b9ff198241fa648 00000000000000000000000000000000 526ce1f9efcc43451b9ff198241fa648 fpsr=00000000
+fcvtzu d10, d21, #32 17186f0d5b65149c952405e9327b2c1c 6a4a5c995536fbb8e423e55acf1eaed6 00000000000000000000000000000000 6a4a5c995536fbb8e423e55acf1eaed6 fpsr=00000000
+fcvtzu d10, d21, #64 33bf7316906155c4416b89d69d5754f3 9e7bc401d1938a441d1dfa66a5f581c1 00000000000000000000000000000000 9e7bc401d1938a441d1dfa66a5f581c1 fpsr=00000000
+fcvtzs s10, s21, #1 f460ac4ee47935eee5d1767539330f0e 4fdd7a0fc3c551c9266d919d068480e8 00000000000000000000000000000000 4fdd7a0fc3c551c9266d919d068480e8 fpsr=00000000
+fcvtzs s10, s21, #16 b8da7b95b68c15f9e2342da868efbd4f db51dda58cabb02760f209e050ab0a2d 0000000000000000000000007fffffff db51dda58cabb02760f209e050ab0a2d fpsr=00000000
+fcvtzs s10, s21, #32 e10f3fca677b53c497750d4d8a6bbf94 a5b74da18b24053e2b8ec30de54a806e 00000000000000000000000080000000 a5b74da18b24053e2b8ec30de54a806e fpsr=00000000
+fcvtzu s10, s21, #1 cfdd58ce5627523165747645fe8674be 0aef2be42011b2ede61f1d052540408c 00000000000000000000000000000000 0aef2be42011b2ede61f1d052540408c fpsr=00000000
+fcvtzu s10, s21, #16 e1262782e36e6f1eab11c97024213cad 6cd9d64eac521716f18779a76e6fad67 000000000000000000000000ffffffff 6cd9d64eac521716f18779a76e6fad67 fpsr=00000000
+fcvtzu s10, s21, #32 77c80bc46f310c6cca2b65ae5c1d7840 2a55afbf8ec79397aca437d523b524df 00000000000000000000000000000000 2a55afbf8ec79397aca437d523b524df fpsr=00000000
+fcvtzs v10.2d, v21.2d, #1 f1a46475595089fb20a4abdf07588759 a5421417275086517857b66ea1f307d4 00000000000000007fffffffffffffff a5421417275086517857b66ea1f307d4 fpsr=00000000
+fcvtzs v10.2d, v21.2d, #32 b09a937501aa44ab105afae385b3cad6 3c826835d6cd5024b48056514a09b626 00000000000000000000000000000000 3c826835d6cd5024b48056514a09b626 fpsr=00000000
+fcvtzs v10.2d, v21.2d, #64 148af8a3c8219f5cf72fb29a340ea099 4ff308fbfb1d52f0c1ff78607dd790b4 7fffffffffffffff8000000000000000 4ff308fbfb1d52f0c1ff78607dd790b4 fpsr=00000000
+fcvtzu v10.2d, v21.2d, #1 7b53f1e10d94faed370134e376496980 3f765647f722ec95feb37b799b3cf560 00000000000000000000000000000000 3f765647f722ec95feb37b799b3cf560 fpsr=00000000
+fcvtzu v10.2d, v21.2d, #32 48d7e00d30e2b4402fb1dfa0ab43866c 6bebb2fa29ba7cf3cb7ebf7d031a4508 ffffffffffffffff0000000000000000 6bebb2fa29ba7cf3cb7ebf7d031a4508 fpsr=00000000
+fcvtzu v10.2d, v21.2d, #64 d8f4250992ec2d33401f13af32de563d 34327af4f2c664e9893ea54c1650e18d 00000000000000000000000000000000 34327af4f2c664e9893ea54c1650e18d fpsr=00000000
randV128: 1792 calls, 1849 iters
-ucvtf s7, w15, #1 8d8c1eb39292c6a7c92b31f16bf839d3 f92b1015b026045997d58cc632bd28d0 0000000000000000000000004dcaf4a3 e830864ada7c96d497d58cc632bd28d0 fpsr=00000000
-ucvtf s7, w15, #16 c67d2dec91b4de7c2ab49846b672900e 1ab5d43dc6babb215621d5cab9427baf 0000000000000000000000004739427c fc5785291fbe3dbd5621d5cab9427baf fpsr=00000000
-ucvtf s7, w15, #32 e4a8b294ee32d592c49ca98e742dbacd f8b2254c9162e9222503df3a0bbf390a 0000000000000000000000003d3bf391 7b6140e0c9848bce2503df3a0bbf390a fpsr=00000000
-ucvtf d7, w15, #1 46ed0c8b09ec0cc9f6c1c3a9050718f2 f200632173feee3c645b0af48714c2c3 000000000000000041d0e29858600000 c82c194d3bade0e9645b0af48714c2c3 fpsr=00000000
-ucvtf d7, w15, #16 4c2c9bb143c2e20121054676c7e0095b 6881ee9ecc6e2b4f7408b7da8d2177b9 000000000000000040e1a42ef7200000 40996f50d21b9dec7408b7da8d2177b9 fpsr=00000000
-ucvtf d7, w15, #32 5744c0e5fb93b71aa44693d71d9aedea bb1327a1fa91003bb4ec45ca7ec6b7cb 00000000000000003fdfb1adf2c00000 4589a3cbf0ac21b8b4ec45ca7ec6b7cb fpsr=00000000
-ucvtf s7, x15, #1 c617da099240ecf3df6509aa6414257d 4a976e0b5f48cbe084e614a5b9e2e3db 0000000000000000000000005e84e615 37d9149df442cc2e84e614a5b9e2e3db fpsr=00000000
-ucvtf s7, x15, #32 f98349fb67aae06e334208d0fe2d10f5 76ed21bc5b74ee1e45d5854b9e575ac7 0000000000000000000000004e8bab0b 746c22a53fbbff2c45d5854b9e575ac7 fpsr=00000000
-ucvtf s7, x15, #64 9ef4a3944df3c9d4569af79c8e037c70 f9b0c2a55df2670d205bfb7f010913d0 0000000000000000000000003e016fee 2daaa8cc4b3087c5205bfb7f010913d0 fpsr=00000000
-ucvtf d7, x15, #1 228e517395a6bbe31716cb78e8c8aab6 5bf2ab5052451e0d74e776296d47a2f8 000000000000000043cd39dd8a5b51e9 639a8d39936d242c74e776296d47a2f8 fpsr=00000000
-ucvtf d7, x15, #32 52dd395b5564e43fb140cab5fb343595 b870bec8853d831ba6edf160396535df 000000000000000041e4ddbe2c072ca7 c0f7b6c5a827648da6edf160396535df fpsr=00000000
-ucvtf d7, x15, #64 3d51cda4c62e1981374858040bb12b87 e7ca026ca90693fc6583dc4ba1f9e4a1 00000000000000003fd960f712e87e79 99862df934b6dce76583dc4ba1f9e4a1 fpsr=00000000
-scvtf s7, w15 7c30c60c06851eb465dd7ff6fe9de5ae 43c7c3a7f4130bc7a4df785044b4ed90 0000000000000000000000004e8969db 4f2751b395f8ec19a4df785044b4ed90 fpsr=00000000
-scvtf d7, w15 70598473754752b89be09f6b34dac2ea 5ccf2bbc8b97fcdfa7918b6db5dd9cc5 0000000000000000c1d28898cec00000 79ab68b97156166da7918b6db5dd9cc5 fpsr=00000000
-scvtf s7, x15 ff253e627c77b0962268452db8249275 328ac5a5d35f6be03ddd55aa6275a2e4 0000000000000000000000005e777557 f508d1be5c90c9b33ddd55aa6275a2e4 fpsr=00000000
-scvtf d7, x15 2047b7a17a8f9e5b225535c34997ee2b 2dc0153eb9c3fa624dc7091ac18dbbc8 000000000000000043d371c246b0636f 464e1f6196d6cb6a4dc7091ac18dbbc8 fpsr=00000000
-ucvtf s7, w15 ed8a2ef71e6c7389238957f495b2258d ac4f7a659ea30845342f069d33064851 0000000000000000000000004e4c1921 cc5eb3847e087d71342f069d33064851 fpsr=00000000
-ucvtf d7, w15 c6d00245c8eb900083e20aa0fc56977c 101855fbe1dff56954f4ad1317bea85f 000000000000000041b7bea85f000000 e518ec0574063eaa54f4ad1317bea85f fpsr=00000000
-ucvtf s7, x15 0cf79369d9ef54a0a441afa7dc61a5d9 b8fb05e0e25722ae0cf85d5ccd963cd1 0000000000000000000000005d4f85d6 f45c2bc6d8af6ef30cf85d5ccd963cd1 fpsr=00000000
-ucvtf d7, x15 1ee14244b0571f48e685a5e998b4ae82 04d8eaf302ebeef4bc197657b66e6289 000000000000000043e7832ecaf6cdcc 5d6c6fb6ae0252dabc197657b66e6289 fpsr=00000000
-abs d22, d23 558e6516a07aba1bc53859e631267d65 fbb4d27dc958b03067c6e0950cc1c54a 000000000000000067c6e0950cc1c54a fbb4d27dc958b03067c6e0950cc1c54a fpsr=00000000
-neg d22, d23 0affd5281de6e502873565e79e9dea46 5056ee55944df1623d1dc61eed5ba627 0000000000000000c2e239e112a459d9 5056ee55944df1623d1dc61eed5ba627 fpsr=00000000
-abs v8.2d, v7.2d83099a08d80dcf8a60f0fb3b5eb50b0c 7cf665f727f2307660f0fb3b5eb50b0c fpsr=00000000
-abs v8.4s, v7.4s384edbbc3a8d0a41041bf79b0be27d3b 384edbbc3a8d0a41041bf79b0be27d3b fpsr=00000000
-abs v8.2s, v7.2s218e159731d0d894b24979c2d04c4097 00000000000000004db6863e2fb3bf69 fpsr=00000000
-abs v8.8h, v7.8hac63d4d667b207ff56978e6fda4e9f1c 539d2b2a67b207ff5697719125b260e4 fpsr=00000000
-abs v8.4h, v7.4h446ca5b5880f61fedd20425c5543e8c7 000000000000000022e0425c55431739 fpsr=00000000
-abs v8.16b, v7.16b5442137042c3b40d31009f476c896592 54421370423d4c0d310061476c77656e fpsr=00000000
-abs v8.8b, v7.8b4a84aa423eaacaa94054b3e94c7a637b 000000000000000040544d174c7a637b fpsr=00000000
-neg v8.2d, v7.2d91cbf7682ba0704df438890120742e7d 6e340897d45f8fb30bc776fedf8bd183 fpsr=00000000
-neg v8.4s, v7.4s95b6851eb38171753bc72e4915d21195 6a497ae24c7e8e8bc438d1b7ea2dee6b fpsr=00000000
-neg v8.2s, v7.2sc2dee1a082289b9dff1dad7e57ef5abd 000000000000000000e25282a810a543 fpsr=00000000
-neg v8.8h, v7.8h84e295294673b8412e57125c112853f3 7b1e6ad7b98d47bfd1a9eda4eed8ac0d fpsr=00000000
-neg v8.4h, v7.4h485b2ff6a83d96deb3906a9e6fda4a32 00000000000000004c7095629026b5ce fpsr=00000000
-neg v8.16b, v7.16bbfb9abff94af4c7e6467b20eb6320f5d 414755016c51b4829c994ef24acef1a3 fpsr=00000000
-neg v8.8b, v7.8b3e25e79c36592546e9193ca251e28a22 000000000000000017e7c45eaf1e76de fpsr=00000000
-add d21, d22, d23 776ab28f92c3c8f73eed236e6b0ccca1 d0127d7fdf8a79b394a03047c87ff33a d823991353cb02104eff712c2e0b20d8 0000000000000000e39fa173f68b1412 d0127d7fdf8a79b394a03047c87ff33a d823991353cb02104eff712c2e0b20d8 fpsr=00000000
-sub d21, d22, d23 bf63e8c0b7216563544a787066fd325c 2dd36ca840d48ffd3043412377039d9d 1d226962b128289621bc486f32a787a1 00000000000000000e86f8b4445c15fc 2dd36ca840d48ffd3043412377039d9d 1d226962b128289621bc486f32a787a1 fpsr=00000000
-add v9.2d, v7.2d, v8.2d cae8d9659338cb7aecc4bccf0528461c f59fcb149e76c2e133c1386a509e8a33 c088a47a31af8e5b2085f53955c6d04f fpsr=00000000
-add v9.4s, v7.4s, v8.4s 9c685842346c7620432c1178192ff6d0 3421d5502a5be597c762f29ba2a17014 d08a2d925ec85bb70a8f0413bbd166e4 fpsr=00000000
-add v9.2s, v7.2s, v8.2s fd6e47d2483b7d51e84f345feb400b74 8ae95e141ba29973810e57eff505bf90 0000000000000000695d8c4ee045cb04 fpsr=00000000
-add v9.8h, v7.8h, v8.8h a9d9ef31c499a07f88bcdccf6002b5ac d575cc1b85e0be8830f23f4f4c11caec 7f4ebb4c4a795f07b9ae1c1eac138098 fpsr=00000000
-add v9.4h, v7.4h, v8.4h bc67f75afc5ffffc2ee022f3bdfb86fa 5125e8ffdd8d96c7fe1ee4860cec4048 00000000000000002cfe0779cae7c742 fpsr=00000000
-add v9.16b, v7.16b, v8.16b b3b86927a5411cfb470a7fd5a5916dc0 9b36dc39f7fec0047a7fdc3ff99b32a8 4eee45609c3fdcffc1895b149e2c9f68 fpsr=00000000
-add v9.8b, v7.8b, v8.8b 6b49ae52d3d7d78fa069cc5f1e0bba41 aec72f26086b3df18ee52104380610ef 00000000000000002e4eed635611ca30 fpsr=00000000
-sub v9.2d, v7.2d, v8.2d 207a8c76fa986faa650c405d8b8f1f9e e8d6cbffa3e96e2088fe0c404ef3abde 37a3c07756af018adc0e341d3c9b73c0 fpsr=00000000
-sub v9.4s, v7.4s, v8.4s 6e882e0df0d9861e23e07478b225acdc 0543f6dfbe6f13051558543d1e093419 6944372e326a73190e88203b941c78c3 fpsr=00000000
-sub v9.2s, v7.2s, v8.2s 52911c72e8d11d9fc6b5613bb6b1d2dc 22cb5bc1aed44df140621225eecd3b21 000000000000000086534f16c7e497bb fpsr=00000000
-sub v9.8h, v7.8h, v8.8h 28963ddf779793bd9b3960111dfc6061 ba0e027e25ce9c17766ac00361a7af5a 6e883b6151c9f7a624cfa00ebc55b107 fpsr=00000000
-sub v9.4h, v7.4h, v8.4h ae73db709221a9ed4ef92845cbab880c ab8952d23af4e089849f34c37ddce305 0000000000000000ca5af3824dcfa507 fpsr=00000000
-sub v9.16b, v7.16b, v8.16b 309a155661bc5b3a970fa92da5948645 9a5d259b64d5d57e2e0bfacf56240216 963df0bbfde786bc6904af5e4f70842f fpsr=00000000
-sub v9.8b, v7.8b, v8.8b e88273866d7cacfd3aa9b5ed9fd5aa1e a84b547b9e027d9928d262d8020de9d3 000000000000000012d753159dc8c14b fpsr=00000000
-addhn v9.2s, v7.2d, v8.2d cd5df4bc956cd5845a3b538d8f86bd70 4d4d9595c587107358421905c51da516 00000000000000001aab8a52b27d6c93 fpsr=00000000
-addhn2 v9.4s, v7.2d, v8.2d 3c2c82326ba235624474d977f96c92ff 0601f0c38c1911402ca7966043ba2841 422e72f5711c6fd8a7105e28d4fd2d2c fpsr=00000000
-addhn v9.4h, v7.4s, v8.4s f3cb6403e5138d08a4e302f7c22f576e b0e6ccbf084e60116f32b3d4822cc297 0000000000000000a4b2ed611415445c fpsr=00000000
-addhn2 v9.8h, v7.4s, v8.4s 0df943295698feca87f5e4362e559f3e 8759f324ad9e3dd94ef0a72be697243a 95530437d6e614ecda75fe0c05d30f1c fpsr=00000000
-addhn v9.8b, v7.8h, v8.8h 0756277f75e509da59f9fa40e24459d3 289a8d6d515e486a56cf0c0f33045d2d 00000000000000002fb4c752b00615b7 fpsr=00000000
-addhn2 v9.16b, v7.8h, v8.8h bd5f7ac055938c4ae61f1afee343d66e 8ec723f327c58378749fda0c8e58df52 4c9e7d0f5af571b57780359341ebc6d9 fpsr=00000000
-subhn v9.2s, v7.2d, v8.2d 6d7403856a16ca0d5c737f3b9478c732 17df9df2c5eb4d94f30e688b7b5a796c 000000000000000055946592696516b0 fpsr=00000000
-subhn2 v9.4s, v7.2d, v8.2d b2d2eb4a89c663f647e6c0a2bbeb3b22 7ec043831ec4683180aa71d8dfb05d1d 3412a7c7c73c4ec95f2348932df957f8 fpsr=00000000
-subhn v9.4h, v7.4s, v8.4s 8998bb68e7d956b79344d5bd7b80a421 e128bea28728f3a128e20c1cfee21be8 0000000000000000a86f60b06a627c9e fpsr=00000000
-subhn2 v9.8h, v7.4s, v8.4s 4ec45a1b186606e28c3e18f65a00d1f0 bdb71629b4cd6f185704b1627d54a32f 910d63983539dcac795479e06cb1c60b fpsr=00000000
-subhn v9.8b, v7.8h, v8.8h be36127d106331ebe06141993b10f432 eceab5d2bb4abda7da3f3a94614f4635 0000000000000000d15c55740607d9ad fpsr=00000000
-subhn2 v9.16b, v7.8h, v8.8h f6ab8c8825a7f9229b1b68cf64389d6b ad2062380f151d41dda1df7e0df8b51c 492a16dbbd8956e8a8060d4da2c617a7 fpsr=00000000
-raddhn v9.2s, v7.2d, v8.2d 72c2ce180ae8dfbc29bc05a479dcbcfb 9b9747d6868530b8ed1938ca4756ffe7 00000000000000000e5a15ef16d53e6f fpsr=00000000
-raddhn2 v9.4s, v7.2d, v8.2d 0efa43e5d4bdc2cb5672f2017e45a226 b36fea0553d0f6c0f6753d0133509678 c26a2deb4ce82f03cf2d49af74ed4d60 fpsr=00000000
-raddhn v9.4h, v7.4s, v8.4s 07b1b28bf89ce340504b67b1d898000f 51a536010b0ccfea4465488f54ab4a92 0000000000000000595703aa94b12d43 fpsr=00000000
-raddhn2 v9.8h, v7.4s, v8.4s f92545854adbe3efa236fc5f4cdbe6b7 331872e3a2317da9857511bf910f4bd7 2c3eed0d27acddebd3bd70d985da6ccb fpsr=00000000
-raddhn v9.8b, v7.8h, v8.8h 738748a76e141f4fc515b0b92d022aca 336918da9bd26682e4add5efad76d954 0000000000000000a7620a86aa87da04 fpsr=00000000
-raddhn2 v9.16b, v7.8h, v8.8h 9090bf27226d360f70949e8acdead7cd 4a7a78d0e881730899abc69f7940797a db380ba90a654751cad311238aae0a66 fpsr=00000000
-rsubhn v9.2s, v7.2d, v8.2d 65b13f1dd4d1a3fc521fb31c750ea423 23e47090a4848bd6df853b73101dbe1d 000000000000000041ccce8d729a77a9 fpsr=00000000
-rsubhn2 v9.4s, v7.2d, v8.2d 30499324f7b8a70899c628398b953fee 1aa3e85464f00e7f03e98ed6f5d47802 15a5aad195dc9963e6b3e22f2570d9d3 fpsr=00000000
-rsubhn v9.4h, v7.4s, v8.4s 8b97e1b66077e106d177958bd184bb30 ed9828371abcbe75b16777120d0cd8c9 00000000000000009e0045bb2010c478 fpsr=00000000
-rsubhn2 v9.8h, v7.4s, v8.4s 75b9b32e434552a7e5fff39e6dc387cd b781da341dc0ba0af56d0e529c4a6df7 be382585f093d1797097608e72f233da fpsr=00000000
-rsubhn v9.8b, v7.8h, v8.8h 49aef1c736395a7f240f9adbe4187487 f5fb052421b084713d4acc9f47f628ed 000000000000000054ed15d6e7ce9c4c fpsr=00000000
-rsubhn2 v9.16b, v7.8h, v8.8h c454e49a2d49bb003834438d1929b200 838612c33924fbbc552b8ae513565bed 41d2f4bfe3b906564e72cf1414e81d11 fpsr=00000000
-addp d22, v23.2d 036933a37b4c947c30dd06df527dd2bb 9f80c9aadb9261df691f7eef6390b41b 000000000000000008a0489a3f2315fa 9f80c9aadb9261df691f7eef6390b41b fpsr=00000000
-addp v9.2d, v7.2d, v8.2d e3285455db5155ab05154466fcab4678 edb634797806f54f62387494af069a0a 4feea90e270d8f59e83d98bcd7fc9c23 fpsr=00000000
-addp v9.4s, v7.4s, v8.4s 4e9b3a1e6e97d8d317dbd2d5048d80e8 c098422e32a9cc522c238398b11065f2 f3420e80dd33e98abd3312f11c6953bd fpsr=00000000
-addp v9.2s, v7.2s, v8.2s 3bda643f287a4ae9eb2181a7fdfe332c 9f05a10f05b1c8e091dd91e2e700af5a 000000000000000078de413ce91fb4d3 fpsr=00000000
-addp v9.8h, v7.8h, v8.8h 68c11bd3fef26d612d730a26cea390e8 6779bad604b4c90a5d94765d561bc885 224fcdbed3f11ea084946c5337995f8b fpsr=00000000
+fcvtzs v10.4s, v21.4s, #1 8d8c1eb39292c6a7c92b31f16bf839d3 f92b1015b026045997d58cc632bd28d0 80000000000000000000000000000000 f92b1015b026045997d58cc632bd28d0 fpsr=00000000
+fcvtzs v10.4s, v21.4s, #16 c67d2dec91b4de7c2ab49846b672900e 1ab5d43dc6babb215621d5cab9427baf 00000000a2a26f807ffffffffffffff4 1ab5d43dc6babb215621d5cab9427baf fpsr=00000000
+fcvtzs v10.4s, v21.4s, #32 e4a8b294ee32d592c49ca98e742dbacd f8b2254c9162e9222503df3a0bbf390a 80000000000000000000000000000000 f8b2254c9162e9222503df3a0bbf390a fpsr=00000000
+fcvtzu v10.4s, v21.4s, #1 46ed0c8b09ec0cc9f6c1c3a9050718f2 f200632173feee3c645b0af48714c2c3 00000000ffffffffffffffff00000000 f200632173feee3c645b0af48714c2c3 fpsr=00000000
+fcvtzu v10.4s, v21.4s, #16 4c2c9bb143c2e20121054676c7e0095b 6881ee9ecc6e2b4f7408b7da8d2177b9 ffffffff00000000ffffffff00000000 6881ee9ecc6e2b4f7408b7da8d2177b9 fpsr=00000000
+fcvtzu v10.4s, v21.4s, #32 5744c0e5fb93b71aa44693d71d9aedea bb1327a1fa91003bb4ec45ca7ec6b7cb 000000000000000000000000ffffffff bb1327a1fa91003bb4ec45ca7ec6b7cb fpsr=00000000
+fcvtzs v10.2s, v21.2s, #1 c617da099240ecf3df6509aa6414257d 4a976e0b5f48cbe084e614a5b9e2e3db 00000000000000000000000000000000 4a976e0b5f48cbe084e614a5b9e2e3db fpsr=00000000
+fcvtzs v10.2s, v21.2s, #16 f98349fb67aae06e334208d0fe2d10f5 76ed21bc5b74ee1e45d5854b9e575ac7 00000000000000001ab0a96000000000 76ed21bc5b74ee1e45d5854b9e575ac7 fpsr=00000000
+fcvtzs v10.2s, v21.2s, #32 9ef4a3944df3c9d4569af79c8e037c70 f9b0c2a55df2670d205bfb7f010913d0 00000000000000000000000000000000 f9b0c2a55df2670d205bfb7f010913d0 fpsr=00000000
+fcvtzu v10.2s, v21.2s, #1 228e517395a6bbe31716cb78e8c8aab6 5bf2ab5052451e0d74e776296d47a2f8 0000000000000000ffffffffffffffff 5bf2ab5052451e0d74e776296d47a2f8 fpsr=00000000
+fcvtzu v10.2s, v21.2s, #16 52dd395b5564e43fb140cab5fb343595 b870bec8853d831ba6edf160396535df 0000000000000000000000000000000e b870bec8853d831ba6edf160396535df fpsr=00000000
+fcvtzu v10.2s, v21.2s, #32 3d51cda4c62e1981374858040bb12b87 e7ca026ca90693fc6583dc4ba1f9e4a1 0000000000000000ffffffff00000000 e7ca026ca90693fc6583dc4ba1f9e4a1 fpsr=00000000
+fcvtzs w21, s10, #1 7c30c60c06851eb465dd7ff6fe9de5ae 43c7c3a7f4130bc7a4df785044b4ed90 7c30c60c06851eb465dd7ff6fe9de5ae 4f2751b395f8ec190000000080000000 fpsr=00000000
+fcvtzs w21, s10, #16 70598473754752b89be09f6b34dac2ea 5ccf2bbc8b97fcdfa7918b6db5dd9cc5 70598473754752b89be09f6b34dac2ea 79ab68b97156166d0000000000000000 fpsr=00000000
+fcvtzs w21, s10, #32 ff253e627c77b0962268452db8249275 328ac5a5d35f6be03ddd55aa6275a2e4 ff253e627c77b0962268452db8249275 f508d1be5c90c9b300000000fffd6db7 fpsr=00000000
+fcvtzu w21, s10, #1 2047b7a17a8f9e5b225535c34997ee2b 2dc0153eb9c3fa624dc7091ac18dbbc8 2047b7a17a8f9e5b225535c34997ee2b 464e1f6196d6cb6a000000000025fb8a fpsr=00000000
+fcvtzu w21, s10, #16 ed8a2ef71e6c7389238957f495b2258d ac4f7a659ea30845342f069d33064851 ed8a2ef71e6c7389238957f495b2258d cc5eb3847e087d710000000000000000 fpsr=00000000
+fcvtzu w21, s10, #32 c6d00245c8eb900083e20aa0fc56977c 101855fbe1dff56954f4ad1317bea85f c6d00245c8eb900083e20aa0fc56977c e518ec0574063eaa0000000000000000 fpsr=00000000
+fcvtzs x21, s10, #1 0cf79369d9ef54a0a441afa7dc61a5d9 b8fb05e0e25722ae0cf85d5ccd963cd1 0cf79369d9ef54a0a441afa7dc61a5d9 f45c2bc6d8af6ef3f8f2d13800000000 fpsr=00000000
+fcvtzs x21, s10, #32 1ee14244b0571f48e685a5e998b4ae82 04d8eaf302ebeef4bc197657b66e6289 1ee14244b0571f48e685a5e998b4ae82 5d6c6fb6ae0252da0000000000000000 fpsr=00000000
+fcvtzs x21, s10, #64 558e6516a07aba1bc53859e631267d65 fbb4d27dc958b03067c6e0950cc1c54a 558e6516a07aba1bc53859e631267d65 2879789e31d24c340000000a67d65000 fpsr=00000000
+fcvtzu x21, s10, #1 0affd5281de6e502873565e79e9dea46 5056ee55944df1623d1dc61eed5ba627 0affd5281de6e502873565e79e9dea46 dfe8bfde9ca56d370000000000000000 fpsr=00000000
+fcvtzu x21, s10, #32 83099a08d80dcf8a60f0fb3b5eb50b0c 42ca7875f5b68a2e046b4d72784ed3e1 83099a08d80dcf8a60f0fb3b5eb50b0c e399a4554c5c16c3ffffffffffffffff fpsr=00000000
+fcvtzu x21, s10, #64 218e159731d0d894b24979c2d04c4097 30f0cfba4d73db721b8ed5700e78ab59 218e159731d0d894b24979c2d04c4097 936b85e2a3d7a6b80000000000000000 fpsr=00000000
+fcvtzs w21, d10, #1 446ca5b5880f61fedd20425c5543e8c7 7aa85307fb644310e267befa0eba8f6c 446ca5b5880f61fedd20425c5543e8c7 5040c56601f67df60000000080000000 fpsr=00000000
+fcvtzs w21, d10, #16 4a84aa423eaacaa94054b3e94c7a637b 81d1653b606922e6bad669efd9f5defd 4a84aa423eaacaa94054b3e94c7a637b 79f7c1c1c599fc5c000000000052cfa5 fpsr=00000000
+fcvtzs w21, d10, #32 95b6851eb38171753bc72e4915d21195 a44c6436db62d8d503bb362ece06f8eb 95b6851eb38171753bc72e4915d21195 6e6fdbd34fa083cc0000000000000000 fpsr=00000000
+fcvtzu w21, d10, #1 84e295294673b8412e57125c112853f3 43fab1d7cc2ec6bd1bf683994dd03e16 84e295294673b8412e57125c112853f3 78e73b425762ffef0000000000000000 fpsr=00000000
+fcvtzu w21, d10, #16 bfb9abff94af4c7e6467b20eb6320f5d 8222444bfdbdc0f06f712041cb155dbc bfb9abff94af4c7e6467b20eb6320f5d d0a7d64b462ca55d00000000ffffffff fpsr=00000000
+fcvtzu w21, d10, #32 776ab28f92c3c8f73eed236e6b0ccca1 d0127d7fdf8a79b394a03047c87ff33a 776ab28f92c3c8f73eed236e6b0ccca1 ed00c62274b20a6d000000000000e91b fpsr=00000000
+fcvtzs x21, d10, #1 cced2765264b9c0a076a3499c93dd4c3 930d3d71b082220781fdf990c8fa6d8e cced2765264b9c0a076a3499c93dd4c3 2dd36ca840d48ffd0000000000000000 fpsr=00000000
+fcvtzs x21, d10, #32 1d226962b128289621bc486f32a787a1 2af1e103d0861bcc9668dcfb2b642a96 1d226962b128289621bc486f32a787a1 f30127be0b7293ee0000000000000000 fpsr=00000000
+fcvtzs x21, d10, #64 cae8d9659338cb7aecc4bccf0528461c f59fcb149e76c2e133c1386a509e8a33 cae8d9659338cb7aecc4bccf0528461c 9c685842346c76208000000000000000 fpsr=00000000
+fcvtzu x21, d10, #1 3421d5502a5be597c762f29ba2a17014 55f75a837a327928b9e76dbb9788ee45 3421d5502a5be597c762f29ba2a17014 8ae95e141ba299730000000000000000 fpsr=00000000
+fcvtzu x21, d10, #32 baabc002d873d6cd127649b16af26568 a9d9ef31c499a07f88bcdccf6002b5ac baabc002d873d6cd127649b16af26568 1d63991621f45bc70000000000000000 fpsr=00000000
+fcvtzu x21, d10, #64 bc67f75afc5ffffc2ee022f3bdfb86fa 5125e8ffdd8d96c7fe1ee4860cec4048 bc67f75afc5ffffc2ee022f3bdfb86fa b3b86927a5411cfb0000000000000000 fpsr=00000000
+fcvtxn s10, d21 9b36dc39f7fec0047a7fdc3ff99b32a8 aebaa8cb25ecbbe07eeee5c0fa26eef9 0000000000000000000000007f800000 aebaa8cb25ecbbe07eeee5c0fa26eef9 fpsr=00000000
+fcvtxn v10.2s, v21.2d b6f6cf80283277c55635d77680b4c954 207a8c76fa986faa650c405d8b8f1f9e 0000000000000000000000007f800000 207a8c76fa986faa650c405d8b8f1f9e fpsr=00000000
+fcvtxn2 v10.4s, v21.2d 6e882e0df0d9861e23e07478b225acdc 0543f6dfbe6f13051558543d1e093419 000000000000000023e07478b225acdc 0543f6dfbe6f13051558543d1e093419 fpsr=00000000
+scvtf d10, d21 , #1 22cb5bc1aed44df140621225eecd3b21 bff646e8d15206d0edb2813f13728c48 0000000000000000c3a24d7ec0ec8d74 bff646e8d15206d0edb2813f13728c48 fpsr=00000000
+scvtf d10, d21 , #32 32a1b67cc2032b1c0d99125d948dd403 ae73db709221a9ed4ef92845cbab880c 000000000000000041d3be4a1172eae2 ae73db709221a9ed4ef92845cbab880c fpsr=00000000
+scvtf d10, d21 , #64 309a155661bc5b3a970fa92da5948645 9a5d259b64d5d57e2e0bfacf56240216 00000000000000003fc705fd67ab1201 9a5d259b64d5d57e2e0bfacf56240216 fpsr=00000000
+ucvtf d21, d10 , #1 a84b547b9e027d9928d262d8020de9d3 55f3141b5419d27bf95d11160bb41c74 000000000000000043df2ba222c17684 55f3141b5419d27bf95d11160bb41c74 fpsr=00000000
+ucvtf d21, d10 , #32 7366f9bfaad56de86224b52641f60e96 3c2c82326ba235624474d977f96c92ff 000000000000000041d11d365dfe5b25 3c2c82326ba235624474d977f96c92ff fpsr=00000000
+ucvtf d21, d10 , #64 f3cb6403e5138d08a4e302f7c22f576e b0e6ccbf084e60116f32b3d4822cc297 00000000000000003fdbccacf5208b31 b0e6ccbf084e60116f32b3d4822cc297 fpsr=00000000
+scvtf s10, s21 , #1 8759f324ad9e3dd94ef0a72be697243a 110254a48bfeb369da75fe0c05d30f1c 0000000000000000000000004c3a61e4 110254a48bfeb369da75fe0c05d30f1c fpsr=00000000
+scvtf s10, s21 , #16 90f208056454dc3bc12b06a20c10d3dc bd5f7ac055938c4ae61f1afee343d66e 000000000000000000000000c5e5e14d bd5f7ac055938c4ae61f1afee343d66e fpsr=00000000
+scvtf s10, s21 , #32 6d7403856a16ca0d5c737f3b9478c732 17df9df2c5eb4d94f30e688b7b5a796c 0000000000000000000000003ef6b4f3 17df9df2c5eb4d94f30e688b7b5a796c fpsr=00000000
+ucvtf s21, s10 , #1 7ec043831ec4683180aa71d8dfb05d1d 7c611d1b3be756275f2348932df957f8 0000000000000000000000004db7e560 7c611d1b3be756275f2348932df957f8 fpsr=00000000
+ucvtf s21, s10 , #16 24b628e1e03e15858cae3c574c98f77d 4ec45a1b186606e28c3e18f65a00d1f0 00000000000000000000000046b401a4 4ec45a1b186606e28c3e18f65a00d1f0 fpsr=00000000
+ucvtf s21, s10 , #32 be36127d106331ebe06141993b10f432 eceab5d2bb4abda7da3f3a94614f4635 0000000000000000000000003ec29e8c eceab5d2bb4abda7da3f3a94614f4635 fpsr=00000000
+scvtf v10.2d, v21.2d, #1 ad2062380f151d41dda1df7e0df8b51c b7b18d208472dc54a8060d4da2c617a7 c3c2139cb7dee349c3c5fe7cac974e7a b7b18d208472dc54a8060d4da2c617a7 fpsr=00000000
+scvtf v10.2d, v21.2d, #32 505378f23d323868e24f76e62230991b 0efa43e5d4bdc2cb5672f2017e45a226 41adf487cba97b8641d59cbc805f9169 0efa43e5d4bdc2cb5672f2017e45a226 fpsr=00000000
+scvtf v10.2d, v21.2d, #64 07b1b28bf89ce340504b67b1d898000f 51a536010b0ccfea4465488f54ab4a92 3fd4694d8042c3343fd1195223d52ad3 51a536010b0ccfea4465488f54ab4a92 fpsr=00000000
+ucvtf v10.2d, v21.2d, #1 331872e3a2317da9857511bf910f4bd7 e192c653873f6492d3bd70d985da6ccb 43dc3258ca70e7ed43da77ae1b30bb4e e192c653873f6492d3bd70d985da6ccb fpsr=00000000
+ucvtf v10.2d, v21.2d, #32 1da054bdaa36e0a3635bc9bd70b06ab0 9090bf27226d360f70949e8acdead7cd 41e21217e4e44da741dc2527a2b37ab6 9090bf27226d360f70949e8acdead7cd fpsr=00000000
+ucvtf v10.2d, v21.2d, #64 65b13f1dd4d1a3fc521fb31c750ea423 23e47090a4848bd6df853b73101dbe1d 3fc1f238485242463febf0a76e6203b8 23e47090a4848bd6df853b73101dbe1d fpsr=00000000
+scvtf v10.4s, v21.4s, #1 1aa3e85464f00e7f03e98ed6f5d47802 fa52f748e5d71ebee6b3e22f2570d9d3 cc35a117cd51470acd4a60ef4d95c367 fa52f748e5d71ebee6b3e22f2570d9d3 fpsr=00000000
+scvtf v10.4s, v21.4s, #16 9c58ae42ba73810bd399bbcb4fe2482e 75b9b32e434552a7e5fff39e6dc387cd 46eb736646868aa5c5d0006346db8710 75b9b32e434552a7e5fff39e6dc387cd fpsr=00000000
+scvtf v10.4s, v21.4s, #32 49aef1c736395a7f240f9adbe4187487 f5fb052421b084713d4acc9f47f628ed bd204fae3e06c2123e752b323e8fec52 f5fb052421b084713d4acc9f47f628ed fpsr=00000000
+ucvtf v10.4s, v21.4s, #1 838612c33924fbbc552b8ae513565bed d9f74c08dcf616fb4e72cf1414e81d11 4ed9f74c4edcf6174e1ce59e4d2740e9 d9f74c08dcf616fb4e72cf1414e81d11 fpsr=00000000
+ucvtf v10.4s, v21.4s, #16 aac070152212c4a2c7ccebcb3c7b5d40 818ce8bcd6f8672776585cdb337bc51a 47018ce94756f86746ecb0ba464def14 818ce8bcd6f8672776585cdb337bc51a fpsr=00000000
+ucvtf v10.4s, v21.4s, #32 1c3c6b9f52e41311d8d31d6bbf68da5f 4e9b3a1e6e97d8d317dbd2d5048d80e8 3e9d36743edd2fb23dbede973c91b01d 4e9b3a1e6e97d8d317dbd2d5048d80e8 fpsr=00000000
+scvtf v10.2s, v21.2s, #1 3bda643f287a4ae9eb2181a7fdfe332c 9f05a10f05b1c8e091dd91e2e700af5a 0000000000000000ce5c44dccd47fa85 9f05a10f05b1c8e091dd91e2e700af5a fpsr=00000000
randV128: 2048 calls, 2112 iters
-addp v9.4h, v7.4h, v8.4h ef1006d543d4618ce941857cba03269d 5355561fa62a10c3bf566bd361896096 00000000000000002b29c21f6ebde0a0 fpsr=00000000
-addp v9.16b, v7.16b, v8.16b 01d69c62bd683fde401109eece50888e 347396a9bc0d233799e6064377ff9399 a73fc95a7f49762cd7fe251d51f71e16 fpsr=00000000
-addp v9.8b, v7.8b, v8.8b 90ce8097add0532968370d8c6c5414bb 68fa3c52a17d059b1c043a566fe58ad0 00000000000000002090545a9f99c0cf fpsr=00000000
-addv s22, v23.4s 90ac93e8cf6f015d6a4feb53ad076c16 fbd8115274eb004dc093f334f5f12c06 000000000000000000000000274830d9 fbd8115274eb004dc093f334f5f12c06 fpsr=00000000
-addv h22, v23.8h 17f705c4fe150e6fbde6bade8d797ce1 a2d5af74719ba329a8041bc7c806304d 0000000000000000000000000000232b a2d5af74719ba329a8041bc7c806304d fpsr=00000000
-addv h22, v23.4h 62dbcd6e6a76da21293b11bcbf8b3f91 e5a2bbdd05be9f9f816ce42545727f71 00000000000000000000000000002a74 e5a2bbdd05be9f9f816ce42545727f71 fpsr=00000000
-addv b22, v23.16b d23949c77673c6540d2d52cda31c1506 2522946d8e35518daaa9ae2ecd177952 000000000000000000000000000000c7 2522946d8e35518daaa9ae2ecd177952 fpsr=00000000
-addv b22, v23.8b c2349b046fe01bd5849cd9c2bfd37fd0 80b98d48cd8fc65081809256ce20c420 000000000000000000000000000000bb 80b98d48cd8fc65081809256ce20c420 fpsr=00000000
-and v9.16b, v7.16b, v8.16b 8fd871d1ed9452b6fc5d0725d0755876 fbca0bedc3eca76037a883bef4644fcd 8bc801c1c184022034080324d0644844 fpsr=00000000
-and v9.8b, v7.8b, v8.8b 8f8db0c6b25175eec824d40a63132c23 92c55cd3f657603099ddec2c78ea26a0 00000000000000008804c40860022420 fpsr=00000000
-bic v9.16b, v7.16b, v8.16b 81947eb2d6d8c480f279647ed45794b8 ea1cadf3cea53c9cdfea6bd603cfb8fe 018052001058c00020110428d4100400 fpsr=00000000
-bic v9.8b, v7.8b, v8.8b 43d57a6516275782afcc63beab118878 4eadfa24cf13aceb4d04d5fd30338769 0000000000000000a2c822028b000810 fpsr=00000000
-orr v9.16b, v7.16b, v8.16b b606b7a6cbd9f6489b03c0d7035f5323 6d6f1737b72bde1a45d2fc619e02b3ea ff6fb7b7fffbfe5adfd3fcf79f5ff3eb fpsr=00000000
-orr v9.8b, v7.8b, v8.8b a25eeb661a0635bc1303376ad3030b43 5ca209d897eb2653f4961e56e3929141 0000000000000000f7973f7ef3939b43 fpsr=00000000
-orn v9.16b, v7.16b, v8.16b dbf8bd5eb016fab92b6880b9fc6e3f31 6e4fb12915488c0e1bf82a7edaa3825d dbf8ffdefab7fbf9ef6fd5b9fd7e7fb3 fpsr=00000000
-orn v9.8b, v7.8b, v8.8b 141a6728bed649310a2ae55b8641200a c0b48b6ceceaa71f4313faa2e0824ecc 0000000000000000beeee55f9f7db13b fpsr=00000000
-orr v22.8h, #0x5A, LSL #0 a14530b29683b38f1dc9e7e7461045d0 b1a252033d00d371391c03541d752392 a15f30fa96dbb3df1ddbe7ff465a45da b1a252033d00d371391c03541d752392 fpsr=00000000
-orr v22.8h, #0xA5, LSL #8 5dd7afe760612f560a815fbcd6039132 e3d4e43cccf66ce151ddfa2fd659288e fdd7afe7e561af56af81ffbcf703b532 e3d4e43cccf66ce151ddfa2fd659288e fpsr=00000000
-orr v22.4h, #0x5A, LSL #0 35bb1be23f33833667aff8dd8fcea9f0 09907ab5c8987462b14b2bcd12cd92df 000000000000000067fff8df8fdea9fa 09907ab5c8987462b14b2bcd12cd92df fpsr=00000000
-orr v22.4h, #0xA5, LSL #8 8ad2d48596d80d0f95331328d451ecec 83b5764c93c54cd5ba47f50e30b1be64 0000000000000000b533b728f551edec 83b5764c93c54cd5ba47f50e30b1be64 fpsr=00000000
-orr v22.4s, #0x5A, LSL #0 bafa3baec33230c1f3ed0f7f026cba04 b22537e28c5f5318cbb2b8d290e50eff bafa3bfec33230dbf3ed0f7f026cba5e b22537e28c5f5318cbb2b8d290e50eff fpsr=00000000
-orr v22.4s, #0x6B, LSL #8 2814b03e261f492ce1bc4cc07cff731a f6be1e571444ea0c456ad5f99348e28f 2814fb3e261f6b2ce1bc6fc07cff7b1a f6be1e571444ea0c456ad5f99348e28f fpsr=00000000
-orr v22.4s, #0x49, LSL #16 310091151f80bb2fc0812bcc9fe9780c ad628a8b8a557090874fab6398bc98f3 314991151fc9bb2fc0c92bcc9fe9780c ad628a8b8a557090874fab6398bc98f3 fpsr=00000000
-orr v22.4s, #0x3D, LSL #24 39efdc5d4f724586f1439befff1f920d 2755a31731169a0d1341bab436b89fef 3defdc5d7f724586fd439befff1f920d 2755a31731169a0d1341bab436b89fef fpsr=00000000
-orr v22.2s, #0x5A, LSL #0 fa4672afc17bcacde325047f295230bb fba23a53272c49830fc1d06f871244fe 0000000000000000e325047f295230fb fba23a53272c49830fc1d06f871244fe fpsr=00000000
-orr v22.2s, #0x6B, LSL #8 4e47af5f43505e44bed446f17535d1de 3cd08f6682c7a022cb47d88553d48579 0000000000000000bed46ff17535fbde 3cd08f6682c7a022cb47d88553d48579 fpsr=00000000
-orr v22.2s, #0x49, LSL #16 98d2f04f32d161cce232c22643a8d556 49c10130a5c6ffc9a7b331d6f9dec141 0000000000000000e27bc22643e9d556 49c10130a5c6ffc9a7b331d6f9dec141 fpsr=00000000
-orr v22.2s, #0x3D, LSL #24 35c7975df0dd3446ad1dd7fef48b9d03 8353f091ed08c45a04e43b42d90f5836 0000000000000000bd1dd7fefd8b9d03 8353f091ed08c45a04e43b42d90f5836 fpsr=00000000
-bic v22.8h, #0x5A, LSL #0 4967bd69bc6f51b341bc57a85449ab38 62c64246f24007199d12888e88fba8a3 4925bd21bc2551a141a457a05401ab20 62c64246f24007199d12888e88fba8a3 fpsr=00000000
-bic v22.8h, #0xA5, LSL #8 fbddc79871d906b5bf19e4eac96b1927 96988ad5b8bf4460d1b440b1f38abc48 5add429850d902b51a1940ea486b1827 96988ad5b8bf4460d1b440b1f38abc48 fpsr=00000000
-bic v22.4h, #0x5A, LSL #0 fa956efd6d274140dddd42e6995403e3 efe388131cd9a1297ef4e2071098e4b2 0000000000000000dd8542a4990403a1 efe388131cd9a1297ef4e2071098e4b2 fpsr=00000000
-bic v22.4h, #0xA5, LSL #8 a56e137a0f396434fbe6d27e23e5c84b cc889be17f6f7d5204b1cd7040067fc1 00000000000000005ae6527e02e5484b cc889be17f6f7d5204b1cd7040067fc1 fpsr=00000000
-bic v22.4s, #0x5A, LSL #0 5d4a15edb7efcf717a15f490c7ffc841 8e67231d406138bcc2cd62cce2b4ed54 5d4a15a5b7efcf217a15f480c7ffc801 8e67231d406138bcc2cd62cce2b4ed54 fpsr=00000000
-bic v22.4s, #0x6B, LSL #8 946081a7bf8e3347182600fb56828e4d c981f94322dd276fee2d48abb12d2a33 946080a7bf8e1047182600fb5682844d c981f94322dd276fee2d48abb12d2a33 fpsr=00000000
-bic v22.4s, #0x49, LSL #16 3e5314615dd8cdd2669e07dcfd50c38a e3b58953dec128d6220f79a59c2e23fc 3e1214615d90cdd2669607dcfd10c38a e3b58953dec128d6220f79a59c2e23fc fpsr=00000000
-bic v22.4s, #0x3D, LSL #24 ed203d2a791d663f0d13d85136feecec dafbc6ea7158c01586268ba970c7a7e3 c0203d2a401d663f0013d85102feecec dafbc6ea7158c01586268ba970c7a7e3 fpsr=00000000
-bic v22.2s, #0x5A, LSL #0 00a65be1733f5f6c6d66d238616c6753 0d3310e93a84500e7a54de988fd716c6 00000000000000006d66d220616c6701 0d3310e93a84500e7a54de988fd716c6 fpsr=00000000
-bic v22.2s, #0x6B, LSL #8 d7c7ce68ac1c173be4775572df79969f dd3dc82e9a2337a05f77d3525940d186 0000000000000000e4771472df79949f dd3dc82e9a2337a05f77d3525940d186 fpsr=00000000
-bic v22.2s, #0x49, LSL #16 d361f79d8495ef8ad426c2df0f07d9b0 a9f94d9aef16d5aa9470c9b72ce03804 0000000000000000d426c2df0f06d9b0 a9f94d9aef16d5aa9470c9b72ce03804 fpsr=00000000
-bic v22.2s, #0x3D, LSL #24 53553561598a463a9d53785f52f48f66 d147ff0d9c3d8b0e7a2021a76b98a91e 00000000000000008053785f42f48f66 d147ff0d9c3d8b0e7a2021a76b98a91e fpsr=00000000
-bif v9.16b, v7.16b, v8.16b b883e9948ddb7c2b9dddd8d2072118a1 b6063f66fe78b8aa70653901734986b4 2e87ccd4f9ebcca3edbce1d376609a25 fpsr=00000000
-bif v9.8b, v7.8b, v8.8b ddb772c0a283f9c3bfc58c2d11241b05 b7186c8777a7bd5fd62074a7a6d12fa8 0000000000000000abe5fc08376434ad fpsr=00000000
-bit v9.16b, v7.16b, v8.16b b0c5baf82abfcef9a18ffb2c5dab0d9b ae0d30c690100750c88c131148bb2425 b057f7c867b9fe5d85bc3f666bab06d9 fpsr=00000000
-bit v9.8b, v7.8b, v8.8b e052e1a672f58bcfdc30a2064627e1e7 b0757fc7d9400917041f1c45e45b5b5e 00000000000000007470c0164fa36166 fpsr=00000000
-bsl v9.16b, v7.16b, v8.16b 782ea3a1442c84273667468f5f5802f6 3ca7220c0de40cfe47554d5a0513632e 382fa22904e4842617674dcb57530336 fpsr=00000000
-bsl v9.8b, v7.8b, v8.8b 24f7445228aa97d36bd4ab18fd38ac71 25358b7ba5ae0b30f9ec447b1ab9a7fb 00000000000000007bfca53a3a39af71 fpsr=00000000
-eor v9.16b, v7.16b, v8.16b 306e6bb23972c34d0fb2c2ec6361482f 5710e74ebb68b9ac53262ba999df4298 677e8cfc821a7ae15c94e945fabe0ab7 fpsr=00000000
-eor v9.8b, v7.8b, v8.8b 79117f7c8a19e8a8ef3165f4961a2774 cf57bfde834a152342d0fa70a66da6e7 0000000000000000ade19f8430778193 fpsr=00000000
-cls v8.4s, v7.4s3a3f4a4c921648d53760ccfbf989fa63 00000001000000000000000100000004 fpsr=00000000
-cls v8.2s, v7.2sf29a2899cc9ee75b4d6c7b07fcda7644 00000000000000000000000000000005 fpsr=00000000
-cls v8.8h, v7.8h6404e202ddbcbe30720f1550dcba6886 00000002000100000000000200010000 fpsr=00000000
-cls v8.4h, v7.4hfa1706c3734e99d39165a691c4861b25 00000000000000000000000000010002 fpsr=00000000
-cls v8.16b, v7.16b21721f18382e43bd968b3987e19ada1e 01000202010100000000010002000102 fpsr=00000000
-cls v8.8b, v7.8b46aeba3cd839896b6d9ddaee5e52f26c 00000000000000000000010200000300 fpsr=00000000
-clz v8.4s, v7.4s087b1b6f51b079e44232e56a7406f71c 00000004000000010000000100000001 fpsr=00000000
-clz v8.2s, v7.2s9d799d018789a27c0fca3e01c3ebbaed 00000000000000000000000400000000 fpsr=00000000
-clz v8.8h, v7.8heaba4b75b2d070ca287010db4d75a0c6 00000001000000010002000300010000 fpsr=00000000
-clz v8.4h, v7.4h5addb0077f5fb04a794066b43e02f4a2 00000000000000000001000100020000 fpsr=00000000
-clz v8.16b, v7.16b597c59f29a132e78ee554d47c1ec047d 01010100000302010001010100000501 fpsr=00000000
-clz v8.8b, v7.8b5333d073afc8b6d074cbd05103901a53 00000000000000000100000106000301 fpsr=00000000
-cmeq d2, d11, d29 b49fa4c6695a13cff5bffb8d2f4a8320 a18d5fb45dbf46985265871d7f41d2f7 e95b5e2674a613f05e4ddab972778be1 00000000000000000000000000000000 a18d5fb45dbf46985265871d7f41d2f7 e95b5e2674a613f05e4ddab972778be1 fpsr=00000000
-cmge d2, d11, d29 7b34b90030d7278999a4e7cbec95a72c c0f51f618392a40a7e5ae16fd148cc45 b08a72f13875d4f843a62b2b7b3f53af 0000000000000000ffffffffffffffff c0f51f618392a40a7e5ae16fd148cc45 b08a72f13875d4f843a62b2b7b3f53af fpsr=00000000
-cmgt d2, d11, d29 1113b50afa08708a4be26d4218956559 54237cabf0b88db29d65cc0719e2f6e2 edc54a1b0f6895006463e429df56e24e 00000000000000000000000000000000 54237cabf0b88db29d65cc0719e2f6e2 edc54a1b0f6895006463e429df56e24e fpsr=00000000
-cmhi d2, d11, d29 c28c38e6ca6584a4937c8cbafac55362 77a9d39f1099fd08fb4c26612259b9d4 d6e96fb9bf6904f3d4d033a2a6786e02 0000000000000000ffffffffffffffff 77a9d39f1099fd08fb4c26612259b9d4 d6e96fb9bf6904f3d4d033a2a6786e02 fpsr=00000000
-cmhs d2, d11, d29 6ea3186734cc0ef44492655b18a3e759 3e81a9296b566c38978158cd09135f55 ca37a3b90ce2319f4b3907a536d2dd08 0000000000000000ffffffffffffffff 3e81a9296b566c38978158cd09135f55 ca37a3b90ce2319f4b3907a536d2dd08 fpsr=00000000
-cmtst d2, d11, d29 bcdce1815322afb6939c9bbf1831b85b cd7a9d9a4020c84837e75d89d7da568e 2b24ac6f1a05a11aad90a407331834f6 0000000000000000ffffffffffffffff cd7a9d9a4020c84837e75d89d7da568e 2b24ac6f1a05a11aad90a407331834f6 fpsr=00000000
-cmeq v9.2d, v7.2d, v8.2d 0fab55894a9beafe668c72b99d23c7fc 88067347b42b944cc072796a3063a315 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.4s, v7.4s, v8.4s 8f8342347678ffff8b2ba4d5c84ddcea 798c153279adb243f7068a7e188dcea7 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.2s, v7.2s, v8.2s cd853ad23d6a43e09f582f1d4b2c1bd0 d29bf083eaaa55581616f143b962497c 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.8h, v7.8h, v8.8h e76de85ef547d9f5ad802cbe6946132f d191cdd67e9abf7b49b2e883760ac3b6 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.4h, v7.4h, v8.4h 58dc53b151c4407023f314c1c601b66b 11acd6a307d28f7f1dc807e8158b4d58 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.16b, v7.16b, v8.16b fe50e487667a5864ccdebf1068a454c5 8f0b9247bb8ac6187e2647feb9cb5744 00000000000000000000000000000000 fpsr=00000000
-cmeq v9.8b, v7.8b, v8.8b 15266479a9dd63c2d6516776b3569d61 a7adeafa2ed7c5d7b87b012fe891b23d 00000000000000000000000000000000 fpsr=00000000
-cmge v9.2d, v7.2d, v8.2d 3a9efb03ee46005ecc3aa29e6c1ca240 167027d954b14c2f7955ecc486838fe6 ffffffffffffffff0000000000000000 fpsr=00000000
+scvtf v10.2s, v21.2s, #16 6779bad604b4c90a5d94765d561bc885 d5a87d6ffa26972e423df9e23db2b152 000000000000000046847bf44676cac5 d5a87d6ffa26972e423df9e23db2b152 fpsr=00000000
+scvtf v10.2s, v21.2s, #32 4f652f1eadd8a69d8dda6bb56684e7ae 01d69c62bd683fde401109eece50888e 00000000000000003e802214be46bdde 01d69c62bd683fde401109eece50888e fpsr=00000000
+ucvtf v10.2s, v21.2s, #1 90ce8097add0532968370d8c6c5414bb 68fa3c52a17d059b1c043a566fe58ad0 00000000000000004d6021d34e5fcb16 68fa3c52a17d059b1c043a566fe58ad0 fpsr=00000000
+ucvtf v10.2s, v21.2s, #16 fbd8115274eb004dc093f334f5f12c06 51cca8fab55916d0a79067eca91aa31d 00000000000000004727906847291aa3 51cca8fab55916d0a79067eca91aa31d fpsr=00000000
+ucvtf v10.2s, v21.2s, #32 a2d5af74719ba329a8041bc7c806304d 4ec838815680b6b69a6aeee58580415f 00000000000000003f1a6aef3f058041 4ec838815680b6b69a6aeee58580415f fpsr=00000000
+scvtf d10, d21 e5a2bbdd05be9f9f816ce42545727f71 c0cd4ec7e6d3462d56722e2164f5c275 000000000000000043d59c8b88593d71 c0cd4ec7e6d3462d56722e2164f5c275 fpsr=00000000
+ucvtf d21, d10 2522946d8e35518daaa9ae2ecd177952 06bc4aacc53225143a88887fa65b8640 000000000000000043cd44443fd32dc3 06bc4aacc53225143a88887fa65b8640 fpsr=00000000
+scvtf s10, s21 80b98d48cd8fc65081809256ce20c420 9fe4e306e7c17bbdbe6d1008023e7cbf 0000000000000000000000004c0f9f30 9fe4e306e7c17bbdbe6d1008023e7cbf fpsr=00000000
+ucvtf s21, s10 fbca0bedc3eca76037a883bef4644fcd bcefc0ac0ed205b34b794df23e8fcdc2 0000000000000000000000004e7a3f37 bcefc0ac0ed205b34b794df23e8fcdc2 fpsr=00000000
+scvtf v10.2d, v21.2d 7df5d28152fe2eaad1a3f38fabe0b10a 81947eb2d6d8c480f279647ed45794b8 c3df9ae0534a49cfc3ab0d37025750d7 81947eb2d6d8c480f279647ed45794b8 fpsr=00000000
+ucvtf v10.2d, v21.2d 43d57a6516275782afcc63beab118878 4eadfa24cf13aceb4d04d5fd30338769 43d3ab7e8933c4eb43d341357f4c0ce2 4eadfa24cf13aceb4d04d5fd30338769 fpsr=00000000
+scvtf v10.4s, v21.4s 6d6f1737b72bde1a45d2fc619e02b3ea 1687ff106966e4c5e32eb6934068a5db 4db43ff84ed2cdcacde68a4b4e80d14c 1687ff106966e4c5e32eb6934068a5db fpsr=00000000
+ucvtf v10.4s, v21.4s ab5bc0cdec986f4262254166b2dcc118 dbf8bd5eb016fab92b6880b9fc6e3f31 4f5bf8bd4f3016fb4e2da2034f7c6e3f dbf8bd5eb016fab92b6880b9fc6e3f31 fpsr=00000000
+scvtf v10.2s, v21.2s 141a6728bed649310a2ae55b8641200a c0b48b6ceceaa71f4313faa2e0824ecc 00000000000000004e8627f5cdfbed8a c0b48b6ceceaa71f4313faa2e0824ecc fpsr=00000000
+ucvtf v10.2s, v21.2s b1a252033d00d371391c03541d752392 b272b8722e629ccdbce40506df1d98f3 00000000000000004f3ce4054f5f1d99 b272b8722e629ccdbce40506df1d98f3 fpsr=00000000
+scvtf s7, w15, #1 e3d4e43cccf66ce151ddfa2fd659288e 1011a14ed75d38a5f5bb01c557207e87 0000000000000000000000004e2e40fd 35bb1be23f338336f5bb01c557207e87 fpsr=00000000
+scvtf s7, w15, #16 09907ab5c8987462b14b2bcd12cd92df 3a72a8e146bddb864e784fbfaa6b5f68 000000000000000000000000c6ab2941 8ad2d48596d80d0f4e784fbfaa6b5f68 fpsr=00000000
+scvtf s7, w15, #32 83b5764c93c54cd5ba47f50e30b1be64 90762c0bdb61e64f28fb4fd438de9b76 0000000000000000000000003e637a6e bafa3baec33230c128fb4fd438de9b76 fpsr=00000000
+scvtf d7, w15, #1 b22537e28c5f5318cbb2b8d290e50eff 73fb8eabf728b8e1e22460e460589391 000000000000000041c81624e4400000 2814b03e261f492ce22460e460589391 fpsr=00000000
+scvtf d7, w15, #16 f6be1e571444ea0c456ad5f99348e28f 43e22da3faf3b11cddd2e2ce82bba699 0000000000000000c0df511659c00000 310091151f80bb2fddd2e2ce82bba699 fpsr=00000000
+scvtf d7, w15, #32 ad628a8b8a557090874fab6398bc98f3 23dd70424d142aff413a5ae6a921c7eb 0000000000000000bfd5b78e05400000 39efdc5d4f724586413a5ae6a921c7eb fpsr=00000000
+scvtf s7, x15, #1 2755a31731169a0d1341bab436b89fef 5d3358183c4b8ba183887a38c6114753 000000000000000000000000de78ef0c fa4672afc17bcacd83887a38c6114753 fpsr=00000000
+scvtf s7, x15, #32 fba23a53272c49830fc1d06f871244fe 7bc3b65d8adecc84fe35447d55409a40 000000000000000000000000cbe55dc1 4e47af5f43505e44fe35447d55409a40 fpsr=00000000
+scvtf s7, x15, #64 3cd08f6682c7a022cb47d88553d48579 de6de9f197ad4b88111f1795b68f2191 0000000000000000000000003d88f8bd 98d2f04f32d161cc111f1795b68f2191 fpsr=00000000
+scvtf d7, x15, #1 49c10130a5c6ffc9a7b331d6f9dec141 e61151b4c1976b8d1d2853604ade3a28 000000000000000043ad2853604ade3a 35c7975df0dd34461d2853604ade3a28 fpsr=00000000
+scvtf d7, x15, #32 8353f091ed08c45a04e43b42d90f5836 3ebfd5f04e498ccfb14da1b86d9dc4d8 0000000000000000c1d3ac9791e4988f 4967bd69bc6f51b3b14da1b86d9dc4d8 fpsr=00000000
+scvtf d7, x15, #64 62c64246f24007199d12888e88fba8a3 0ee83438e455e181a24c69d0b96f5954 0000000000000000bfd76ce58bd1a42a fbddc79871d906b5a24c69d0b96f5954 fpsr=00000000
+ucvtf s7, w15, #1 96988ad5b8bf4460d1b440b1f38abc48 7be301c610d68dcc8440d3b3b09839ad 0000000000000000000000004eb0983a fa956efd6d2741408440d3b3b09839ad fpsr=00000000
+ucvtf s7, w15, #16 efe388131cd9a1297ef4e2071098e4b2 e48f9b7b33aaf08fb60b3e41b1fac4c3 0000000000000000000000004731fac5 a56e137a0f396434b60b3e41b1fac4c3 fpsr=00000000
+ucvtf s7, w15, #32 cc889be17f6f7d5204b1cd7040067fc1 a9ce6236acb26bab988b0b591c735b76 0000000000000000000000003de39adc 5d4a15edb7efcf71988b0b591c735b76 fpsr=00000000
+ucvtf d7, w15, #1 8e67231d406138bcc2cd62cce2b4ed54 2b7fb7d9dcce5d018ba199dd51e45da6 000000000000000041c4791769800000 946081a7bf8e33478ba199dd51e45da6 fpsr=00000000
+ucvtf d7, w15, #16 c981f94322dd276fee2d48abb12d2a33 3e8dbea03402266e2a90b0370d7bf005 000000000000000040aaf7e00a000000 3e5314615dd8cdd22a90b0370d7bf005 fpsr=00000000
+ucvtf d7, w15, #32 e3b58953dec128d6220f79a59c2e23fc ff501026e5edf4eeb96b10a6515d53d9 00000000000000003fd45754f6400000 ed203d2a791d663fb96b10a6515d53d9 fpsr=00000000
+ucvtf s7, x15, #1 dafbc6ea7158c01586268ba970c7a7e3 745e27aac445f14050b36a98d78fd9c1 0000000000000000000000005e2166d5 00a65be1733f5f6c50b36a98d78fd9c1 fpsr=00000000
+ucvtf s7, x15, #32 0d3310e93a84500e7a54de988fd716c6 fd95640d32e87d414f491ced00f0e29f 0000000000000000000000004e9e923a d7c7ce68ac1c173b4f491ced00f0e29f fpsr=00000000
+ucvtf s7, x15, #64 dd3dc82e9a2337a05f77d3525940d186 fbd7262e8eb7f9d4170d88852b62cf51 0000000000000000000000003db86c44 d361f79d8495ef8a170d88852b62cf51 fpsr=00000000
+ucvtf d7, x15, #1 a9f94d9aef16d5aa9470c9b72ce03804 cd02ceef3992c5d807de0e3fb8c3ffb9 0000000000000000438f7838fee30fff 53553561598a463a07de0e3fb8c3ffb9 fpsr=00000000
+ucvtf d7, x15, #32 d147ff0d9c3d8b0e7a2021a76b98a91e d3f7ba2f91593f2c809e0dfd08f4d3b5 000000000000000041e013c1bfa11e9a b883e9948ddb7c2b809e0dfd08f4d3b5 fpsr=00000000
+ucvtf d7, x15, #64 b6063f66fe78b8aa70653901734986b4 6e964ccdf9ecc9b2e12ce59d7ad6aa26 00000000000000003fec259cb3af5ad5 b7186c8777a7bd5fe12ce59d7ad6aa26 fpsr=00000000
+scvtf s7, w15 fdbfe4aace2bc3488a67f7006f46e4ec b0c5baf82abfcef9a18ffb2c5dab0d9b 0000000000000000000000004ebb561b 345be74e67a9f90da18ffb2c5dab0d9b fpsr=00000000
+scvtf d7, w15 e052e1a672f58bcfdc30a2064627e1e7 b0757fc7d9400917041f1c45e45b5b5e 0000000000000000c1bba4a4a2000000 782ea3a1442c8427041f1c45e45b5b5e fpsr=00000000
+scvtf s7, x15 3ca7220c0de40cfe47554d5a0513632e b6fecc358d358ff85432749bd2d4fe3c 0000000000000000000000005ea864e9 25358b7ba5ae0b305432749bd2d4fe3c fpsr=00000000
+scvtf d7, x15 b43b02a9298d378ecb10f14920b288eb 306e6bb23972c34d0fb2c2ec6361482f 000000000000000043af6585d8c6c290 4545f814f45c82ca0fb2c2ec6361482f fpsr=00000000
+ucvtf s7, w15 79117f7c8a19e8a8ef3165f4961a2774 cf57bfde834a152342d0fa70a66da6e7 0000000000000000000000004f266da7 3a3f4a4c921648d542d0fa70a66da6e7 fpsr=00000000
+ucvtf d7, w15 ea09fa679269822913990b39c629a2ab f29a2899cc9ee75b4d6c7b07fcda7644 000000000000000041ef9b4ec8800000 6404e202ddbcbe304d6c7b07fcda7644 fpsr=00000000
+ucvtf s7, x15 6702d248a15d62f4982642f910c0596e fa1706c3734e99d39165a691c4861b25 0000000000000000000000005f1165a7 21721f18382e43bd9165a691c4861b25 fpsr=00000000
+ucvtf d7, x15 51de680016d5eae8ddb96b14d5bfaa9e 46aeba3cd839896b6d9ddaee5e52f26c 000000000000000043db6776bb9794bd 087b1b6f51b079e46d9ddaee5e52f26c fpsr=00000000
+abs d22, d23 363fa3e45c41190542f277fd2b1e5df7 9d799d018789a27c0fca3e01c3ebbaed 00000000000000000fca3e01c3ebbaed 9d799d018789a27c0fca3e01c3ebbaed fpsr=00000000
+neg d22, d23 2baa229a5e44a9806f45dea08ac9bba7 5addb0077f5fb04a794066b43e02f4a2 000000000000000086bf994bc1fd0b5e 5addb0077f5fb04a794066b43e02f4a2 fpsr=00000000
+abs v8.2d, v7.2d84ce96403e2498bb54766eb5db356d5d 7b3169bfc1db674554766eb5db356d5d fpsr=00000000
+abs v8.4s, v7.4s644c0aa2b06c7157ba08c4c1cd79438f 644c0aa24f938ea945f73b3f3286bc71 fpsr=00000000
+abs v8.2s, v7.2sa18d5fb45dbf46985265871d7f41d2f7 00000000000000005265871d7f41d2f7 fpsr=00000000
+abs v8.8h, v7.8ha82c22b2f2f9e3f808aac6871ee8668f 57d422b20d071c0808aa39791ee8668f fpsr=00000000
+abs v8.4h, v7.4he3c5ded81bf613f5c8f28ab8d5cc4b55 0000000000000000370e75482a344b55 fpsr=00000000
+abs v8.16b, v7.16bc0f51f618392a40a7e5ae16fd148cc45 400b1f617d6e5c0a7e5a1f6f2f483445 fpsr=00000000
+abs v8.8b, v7.8baa57728ad6a960b316fdd6663eb73659 000000000000000016032a663e493659 fpsr=00000000
+neg v8.2d, v7.2d0c88628ec117156c7df7765b4777d68f f3779d713ee8ea94820889a4b8882971 fpsr=00000000
+neg v8.4s, v7.4s54237cabf0b88db29d65cc0719e2f6e2 abdc83550f47724e629a33f9e61d091e fpsr=00000000
+neg v8.2s, v7.2sde7db6f9211eb2451324a1b430531170 0000000000000000ecdb5e4ccfacee90 fpsr=00000000
+neg v8.8h, v7.8hdbad5b37ea2171e7ed6dd3c558ffc03b 2453a4c915df8e1912932c3ba7013fc5 fpsr=00000000
+neg v8.4h, v7.4h77a9d39f1099fd08fb4c26612259b9d4 000000000000000004b4d99fdda7462c fpsr=00000000
+neg v8.16b, v7.16b1e0eab6c3f6223232adca544bbbd4a39 e2f25594c19eddddd6245bbc4543b6c7 fpsr=00000000
+neg v8.8b, v7.8b3d786fdc2458aeb4643a5c294f87bd66 00000000000000009cc6a4d7b179439a fpsr=00000000
+add d21, d22, d23 3e81a9296b566c38978158cd09135f55 ca37a3b90ce2319f4b3907a536d2dd08 8fc8e790bf3a272aadcda4eb15bd7c03 0000000000000000f906ac904c90590b ca37a3b90ce2319f4b3907a536d2dd08 8fc8e790bf3a272aadcda4eb15bd7c03 fpsr=00000000
+sub d21, d22, d23 cd7a9d9a4020c84837e75d89d7da568e 2b24ac6f1a05a11aad90a407331834f6 931d2db6c5db456c82ece280e306ab6...
[truncated message content] |
|
From: <sv...@va...> - 2015-04-06 14:49:14
|
Author: sewardj
Date: Mon Apr 6 15:49:05 2015
New Revision: 3119
Log:
arm64: add support for the following insns. This completes support
for conversion instructions.
SCVTF d_d_imm, s_s_imm
UCVTF d_d_imm, s_s_imm
FCVTZS d_d_imm, s_s_imm
FCVTZU d_d_imm, s_s_imm
FCVTXN s_d
SCVTF d_d, s_s
UCVTF d_d, s_s
SCVTF {2d_2d,4s_4s,2s_2s}_imm
UCVTF {2d_2d,4s_4s,2s_2s}_imm
FCVTZS {2d_2d,4s_4s,2s_2s}_imm
FCVTZU {2d_2d,4s_4s,2s_2s}_imm
FCVTXN 2s/4s_2d
FCVTZ{S,U} {w,x}_{s,x}_#fbits
Modified:
trunk/priv/guest_arm64_toIR.c
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Mon Apr 6 15:49:05 2015
@@ -48,6 +48,9 @@
* FRINTA, FRINTN are kludged .. they just round to nearest. No special
handling for the "ties" case. FRINTX might be dubious too.
+
+ * Ditto FCVTXN. No idea what "round to odd" means. This implementation
+ just rounds to nearest.
*/
/* "Special" instructions.
@@ -8148,6 +8151,16 @@
}
+/* Returns 2.0 ^ n for n in 1 .. 64 */
+static Double two_to_the_plus ( Int n )
+{
+ if (n == 1) return 2.0;
+ vassert(n >= 2 && n <= 64);
+ Int half = n / 2;
+ return two_to_the_plus(half) * two_to_the_plus(n - half);
+}
+
+
/*------------------------------------------------------------*/
/*--- SIMD and FP instructions ---*/
/*------------------------------------------------------------*/
@@ -9340,6 +9353,83 @@
return True;
}
+ if (immh >= BITS4(0,1,0,0) && opcode == BITS5(1,1,1,0,0)) {
+ /* -------- 0,!=00xx,11100 SCVTF d_d_imm, s_s_imm -------- */
+ /* -------- 1,!=00xx,11100 UCVTF d_d_imm, s_s_imm -------- */
+ UInt size = 0;
+ UInt fbits = 0;
+ Bool ok = getLaneInfo_IMMH_IMMB(&fbits, &size, immh, immb);
+ /* The following holds because immh is never zero. */
+ vassert(ok);
+ /* The following holds because immh >= 0100. */
+ vassert(size == X10 || size == X11);
+ Bool isD = size == X11;
+ Bool isU = bitU == 1;
+ vassert(fbits >= 1 && fbits <= (isD ? 64 : 32));
+ Double scale = two_to_the_minus(fbits);
+ IRExpr* scaleE = isD ? IRExpr_Const(IRConst_F64(scale))
+ : IRExpr_Const(IRConst_F32( (Float)scale ));
+ IROp opMUL = isD ? Iop_MulF64 : Iop_MulF32;
+ IROp opCVT = isU ? (isD ? Iop_I64UtoF64 : Iop_I32UtoF32)
+ : (isD ? Iop_I64StoF64 : Iop_I32StoF32);
+ IRType tyF = isD ? Ity_F64 : Ity_F32;
+ IRType tyI = isD ? Ity_I64 : Ity_I32;
+ IRTemp src = newTemp(tyI);
+ IRTemp res = newTemp(tyF);
+ IRTemp rm = mk_get_IR_rounding_mode();
+ assign(src, getQRegLane(nn, 0, tyI));
+ assign(res, triop(opMUL, mkexpr(rm),
+ binop(opCVT, mkexpr(rm), mkexpr(src)), scaleE));
+ putQRegLane(dd, 0, mkexpr(res));
+ if (!isD) {
+ putQRegLane(dd, 1, mkU32(0));
+ }
+ putQRegLane(dd, 1, mkU64(0));
+ const HChar ch = isD ? 'd' : 's';
+ DIP("%s %c%u, %c%u, #%u\n", isU ? "ucvtf" : "scvtf",
+ ch, dd, ch, nn, fbits);
+ return True;
+ }
+
+ if (immh >= BITS4(0,1,0,0) && opcode == BITS5(1,1,1,1,1)) {
+ /* -------- 0,!=00xx,11111 FCVTZS d_d_imm, s_s_imm -------- */
+ /* -------- 1,!=00xx,11111 FCVTZU d_d_imm, s_s_imm -------- */
+ UInt size = 0;
+ UInt fbits = 0;
+ Bool ok = getLaneInfo_IMMH_IMMB(&fbits, &size, immh, immb);
+ /* The following holds because immh is never zero. */
+ vassert(ok);
+ /* The following holds because immh >= 0100. */
+ vassert(size == X10 || size == X11);
+ Bool isD = size == X11;
+ Bool isU = bitU == 1;
+ vassert(fbits >= 1 && fbits <= (isD ? 64 : 32));
+ Double scale = two_to_the_plus(fbits);
+ IRExpr* scaleE = isD ? IRExpr_Const(IRConst_F64(scale))
+ : IRExpr_Const(IRConst_F32( (Float)scale ));
+ IROp opMUL = isD ? Iop_MulF64 : Iop_MulF32;
+ IROp opCVT = isU ? (isD ? Iop_F64toI64U : Iop_F32toI32U)
+ : (isD ? Iop_F64toI64S : Iop_F32toI32S);
+ IRType tyF = isD ? Ity_F64 : Ity_F32;
+ IRType tyI = isD ? Ity_I64 : Ity_I32;
+ IRTemp src = newTemp(tyF);
+ IRTemp res = newTemp(tyI);
+ IRTemp rm = newTemp(Ity_I32);
+ assign(src, getQRegLane(nn, 0, tyF));
+ assign(rm, mkU32(Irrm_ZERO));
+ assign(res, binop(opCVT, mkexpr(rm),
+ triop(opMUL, mkexpr(rm), mkexpr(src), scaleE)));
+ putQRegLane(dd, 0, mkexpr(res));
+ if (!isD) {
+ putQRegLane(dd, 1, mkU32(0));
+ }
+ putQRegLane(dd, 1, mkU64(0));
+ const HChar ch = isD ? 'd' : 's';
+ DIP("%s %c%u, %c%u, #%u\n", isU ? "fcvtzu" : "fcvtzs",
+ ch, dd, ch, nn, fbits);
+ return True;
+ }
+
# define INSN(_bMax,_bMin) SLICE_UInt(insn, (_bMax), (_bMin))
return False;
# undef INSN
@@ -9917,6 +10007,19 @@
return True;
}
+ if (opcode == BITS5(1,0,1,1,0) && bitU == 1 && size == X01) {
+ /* -------- 1,01,10110 FCVTXN s_d -------- */
+ /* Using Irrm_NEAREST here isn't right. The docs say "round to
+ odd" but I don't know what that really means. */
+ putQRegLO(dd,
+ binop(Iop_F64toF32, mkU32(Irrm_NEAREST),
+ getQRegLO(nn, Ity_F64)));
+ putQRegLane(dd, 1, mkU32(0));
+ putQRegLane(dd, 1, mkU64(0));
+ DIP("fcvtxn s%u, d%u\n", dd, nn);
+ return True;
+ }
+
ix = 0; /*INVALID*/
switch (opcode) {
case BITS5(1,1,0,1,0): ix = ((size & 2) == 2) ? 4 : 1; break;
@@ -9969,6 +10072,25 @@
return True;
}
+ if (size <= X01 && opcode == BITS5(1,1,1,0,1)) {
+ /* -------- 0,0x,11101: SCVTF d_d, s_s -------- */
+ /* -------- 1,0x,11101: UCVTF d_d, s_s -------- */
+ Bool isU = bitU == 1;
+ Bool isD = (size & 1) == 1;
+ IRType tyI = isD ? Ity_I64 : Ity_I32;
+ IROp iop = isU ? (isD ? Iop_I64UtoF64 : Iop_I32UtoF32)
+ : (isD ? Iop_I64StoF64 : Iop_I32StoF32);
+ IRTemp rm = mk_get_IR_rounding_mode();
+ putQRegLO(dd, binop(iop, mkexpr(rm), getQRegLO(nn, tyI)));
+ if (!isD) {
+ putQRegLane(dd, 1, mkU32(0)); /* bits 63-32 */
+ }
+ putQRegLane(dd, 1, mkU64(0)); /* bits 127-64 */
+ HChar c = isD ? 'd' : 's';
+ DIP("%ccvtf %c%u, %c%u\n", isU ? 'u' : 's', c, dd, c, nn);
+ return True;
+ }
+
if (size >= X10 && opcode == BITS5(1,1,1,0,1)) {
/* -------- 0,1x,11101: FRECPE d_d, s_s -------- */
/* -------- 1,1x,11101: FRSQRTE d_d, s_s -------- */
@@ -10584,6 +10706,99 @@
return False;
}
+ if (opcode == BITS5(1,1,1,0,0)) {
+ /* -------- 0,11100 SCVTF {2d_2d,4s_4s,2s_2s}_imm -------- */
+ /* -------- 1,11100 UCVTF {2d_2d,4s_4s,2s_2s}_imm -------- */
+ /* If immh is of the form 00xx, the insn is invalid. */
+ if (immh < BITS4(0,1,0,0)) return False;
+ UInt size = 0;
+ UInt fbits = 0;
+ Bool ok = getLaneInfo_IMMH_IMMB(&fbits, &size, immh, immb);
+ /* The following holds because immh is never zero. */
+ vassert(ok);
+ /* The following holds because immh >= 0100. */
+ vassert(size == X10 || size == X11);
+ Bool isD = size == X11;
+ Bool isU = bitU == 1;
+ Bool isQ = bitQ == 1;
+ if (isD && !isQ) return False; /* reject .1d case */
+ vassert(fbits >= 1 && fbits <= (isD ? 64 : 32));
+ Double scale = two_to_the_minus(fbits);
+ IRExpr* scaleE = isD ? IRExpr_Const(IRConst_F64(scale))
+ : IRExpr_Const(IRConst_F32( (Float)scale ));
+ IROp opMUL = isD ? Iop_MulF64 : Iop_MulF32;
+ IROp opCVT = isU ? (isD ? Iop_I64UtoF64 : Iop_I32UtoF32)
+ : (isD ? Iop_I64StoF64 : Iop_I32StoF32);
+ IRType tyF = isD ? Ity_F64 : Ity_F32;
+ IRType tyI = isD ? Ity_I64 : Ity_I32;
+ UInt nLanes = (isQ ? 2 : 1) * (isD ? 1 : 2);
+ vassert(nLanes == 2 || nLanes == 4);
+ for (UInt i = 0; i < nLanes; i++) {
+ IRTemp src = newTemp(tyI);
+ IRTemp res = newTemp(tyF);
+ IRTemp rm = mk_get_IR_rounding_mode();
+ assign(src, getQRegLane(nn, i, tyI));
+ assign(res, triop(opMUL, mkexpr(rm),
+ binop(opCVT, mkexpr(rm), mkexpr(src)),
+ scaleE));
+ putQRegLane(dd, i, mkexpr(res));
+ }
+ if (!isQ) {
+ putQRegLane(dd, 1, mkU64(0));
+ }
+ const HChar* arr = nameArr_Q_SZ(bitQ, size);
+ DIP("%s %s.%s, %s.%s, #%u\n", isU ? "ucvtf" : "scvtf",
+ nameQReg128(dd), arr, nameQReg128(nn), arr, fbits);
+ return True;
+ }
+
+ if (opcode == BITS5(1,1,1,1,1)) {
+ /* -------- 0,11111 FCVTZS {2d_2d,4s_4s,2s_2s}_imm -------- */
+ /* -------- 1,11111 FCVTZU {2d_2d,4s_4s,2s_2s}_imm -------- */
+ /* If immh is of the form 00xx, the insn is invalid. */
+ if (immh < BITS4(0,1,0,0)) return False;
+ UInt size = 0;
+ UInt fbits = 0;
+ Bool ok = getLaneInfo_IMMH_IMMB(&fbits, &size, immh, immb);
+ /* The following holds because immh is never zero. */
+ vassert(ok);
+ /* The following holds because immh >= 0100. */
+ vassert(size == X10 || size == X11);
+ Bool isD = size == X11;
+ Bool isU = bitU == 1;
+ Bool isQ = bitQ == 1;
+ if (isD && !isQ) return False; /* reject .1d case */
+ vassert(fbits >= 1 && fbits <= (isD ? 64 : 32));
+ Double scale = two_to_the_plus(fbits);
+ IRExpr* scaleE = isD ? IRExpr_Const(IRConst_F64(scale))
+ : IRExpr_Const(IRConst_F32( (Float)scale ));
+ IROp opMUL = isD ? Iop_MulF64 : Iop_MulF32;
+ IROp opCVT = isU ? (isD ? Iop_F64toI64U : Iop_F32toI32U)
+ : (isD ? Iop_F64toI64S : Iop_F32toI32S);
+ IRType tyF = isD ? Ity_F64 : Ity_F32;
+ IRType tyI = isD ? Ity_I64 : Ity_I32;
+ UInt nLanes = (isQ ? 2 : 1) * (isD ? 1 : 2);
+ vassert(nLanes == 2 || nLanes == 4);
+ for (UInt i = 0; i < nLanes; i++) {
+ IRTemp src = newTemp(tyF);
+ IRTemp res = newTemp(tyI);
+ IRTemp rm = newTemp(Ity_I32);
+ assign(src, getQRegLane(nn, i, tyF));
+ assign(rm, mkU32(Irrm_ZERO));
+ assign(res, binop(opCVT, mkexpr(rm),
+ triop(opMUL, mkexpr(rm),
+ mkexpr(src), scaleE)));
+ putQRegLane(dd, i, mkexpr(res));
+ }
+ if (!isQ) {
+ putQRegLane(dd, 1, mkU64(0));
+ }
+ const HChar* arr = nameArr_Q_SZ(bitQ, size);
+ DIP("%s %s.%s, %s.%s, #%u\n", isU ? "fcvtzu" : "fcvtzs",
+ nameQReg128(dd), arr, nameQReg128(nn), arr, fbits);
+ return True;
+ }
+
# define INSN(_bMax,_bMin) SLICE_UInt(insn, (_bMax), (_bMin))
return False;
# undef INSN
@@ -11983,8 +12198,33 @@
return True;
}
+ if (bitU == 1 && size == X01 && opcode == BITS5(1,0,1,1,0)) {
+ /* -------- 1,01,10110: FCVTXN 2s/4s_2d -------- */
+ /* Using Irrm_NEAREST here isn't right. The docs say "round to
+ odd" but I don't know what that really means. */
+ IRType srcTy = Ity_F64;
+ IROp opCvt = Iop_F64toF32;
+ IRTemp src[2];
+ for (UInt i = 0; i < 2; i++) {
+ src[i] = newTemp(srcTy);
+ assign(src[i], getQRegLane(nn, i, srcTy));
+ }
+ for (UInt i = 0; i < 2; i++) {
+ putQRegLane(dd, 2 * bitQ + i,
+ binop(opCvt, mkU32(Irrm_NEAREST), mkexpr(src[i])));
+ }
+ if (bitQ == 0) {
+ putQRegLane(dd, 1, mkU64(0));
+ }
+ const HChar* arrNarrow = nameArr_Q_SZ(bitQ, 1+size);
+ const HChar* arrWide = nameArr_Q_SZ(1, 1+size+1);
+ DIP("fcvtxn%s %s.%s, %s.%s\n", bitQ ? "2" : "",
+ nameQReg128(dd), arrNarrow, nameQReg128(nn), arrWide);
+ return True;
+ }
+
if (bitU == 0 && size <= X01 && opcode == BITS5(1,0,1,1,1)) {
- /* -------- 0,0x,10110: FCVTL 4s_4h/8h, 2d_2s/4s -------- */
+ /* -------- 0,0x,10111: FCVTL 4s_4h/8h, 2d_2s/4s -------- */
UInt nLanes = size == X00 ? 4 : 2;
IRType srcTy = size == X00 ? Ity_F16 : Ity_F32;
IROp opCvt = size == X00 ? Iop_F16toF32 : Iop_F32toF64;
@@ -13111,9 +13351,52 @@
UInt nn = INSN(9,5);
UInt dd = INSN(4,0);
- // op = 010, 011
- /* -------------- {S,U}CVTF (scalar, fixedpt) -------------- */
- /* (ix) sf S 28 ty rm op 15 9 4
+ if (ty <= X01 && rm == X11
+ && (op == BITS3(0,0,0) || op == BITS3(0,0,1))) {
+ /* -------- (ix) sf ty rm opc -------- */
+ /* -------- 0 0 00 11 000: FCVTZS w_s_#fbits -------- */
+ /* -------- 1 0 01 11 000: FCVTZS w_d_#fbits -------- */
+ /* -------- 2 1 00 11 000: FCVTZS x_s_#fbits -------- */
+ /* -------- 3 1 01 11 000: FCVTZS x_d_#fbits -------- */
+
+ /* -------- 4 0 00 11 001: FCVTZU w_s_#fbits -------- */
+ /* -------- 5 0 01 11 001: FCVTZU w_d_#fbits -------- */
+ /* -------- 6 1 00 11 001: FCVTZU x_s_#fbits -------- */
+ /* -------- 7 1 01 11 001: FCVTZU x_d_#fbits -------- */
+ Bool isI64 = bitSF == 1;
+ Bool isF64 = (ty & 1) == 1;
+ Bool isU = (op & 1) == 1;
+ UInt ix = (isU ? 4 : 0) | (isI64 ? 2 : 0) | (isF64 ? 1 : 0);
+
+ Int fbits = 64 - sc;
+ vassert(fbits >= 1 && fbits <= (isI64 ? 64 : 32));
+
+ Double scale = two_to_the_plus(fbits);
+ IRExpr* scaleE = isF64 ? IRExpr_Const(IRConst_F64(scale))
+ : IRExpr_Const(IRConst_F32( (Float)scale ));
+ IROp opMUL = isF64 ? Iop_MulF64 : Iop_MulF32;
+
+ const IROp ops[8]
+ = { Iop_F32toI32S, Iop_F64toI32S, Iop_F32toI64S, Iop_F64toI64S,
+ Iop_F32toI32U, Iop_F64toI32U, Iop_F32toI64U, Iop_F64toI64U };
+ IRTemp irrm = newTemp(Ity_I32);
+ assign(irrm, mkU32(Irrm_ZERO));
+
+ IRExpr* src = getQRegLO(nn, isF64 ? Ity_F64 : Ity_F32);
+ IRExpr* res = binop(ops[ix], mkexpr(irrm),
+ triop(opMUL, mkexpr(irrm), src, scaleE));
+ putIRegOrZR(isI64, dd, res);
+
+ DIP("fcvtz%c %s, %s, #%d\n",
+ isU ? 'u' : 's', nameIRegOrZR(isI64, dd),
+ nameQRegLO(nn, isF64 ? Ity_F64 : Ity_F32), fbits);
+ return True;
+ }
+
+ /* ------ sf,ty,rm,opc ------ */
+ /* ------ x,0x,00,010 SCVTF s/d, w/x, #fbits ------ */
+ /* ------ x,0x,00,011 UCVTF s/d, w/x, #fbits ------ */
+ /* (ix) sf S 28 ty rm opc 15 9 4
0 0 0 0 11110 00 0 00 010 scale n d SCVTF Sd, Wn, #fbits
1 0 0 0 11110 01 0 00 010 scale n d SCVTF Dd, Wn, #fbits
2 1 0 0 11110 00 0 00 010 scale n d SCVTF Sd, Xn, #fbits
|
|
From: <sv...@va...> - 2015-04-06 14:29:53
|
Author: florian
Date: Mon Apr 6 15:29:45 2015
New Revision: 15068
Log:
The linux launcher showed some odd behaviour. When given a shell script
named 'now' with this contents:
#!
/bin/date
the platform selection logic does this:
--11196:1:launcher no tool requested, defaulting to 'memcheck'
--11196:2:launcher selecting platform for './now'
--11196:2:launcher selecting platform for './now'
--11196:2:launcher opened './now'
--11196:2:launcher read 13 bytes from './now'
--11196:2:launcher selecting platform for ''
--11196:2:launcher selecting platform for '/home/florian/bin/'
--11196:2:launcher opened '/home/florian/bin/'
--11196:2:launcher selected platform 'unknown'
--11196:1:launcher no platform detected, defaulting platform to 'amd64-linux'
That is not quite right. Instead the platform should be determined by
examining the default shell.
Additionally, define VKI_BINPRM_BUF_SIZE because on linux only that many
characters are considered on a #! line. C.f. <linux>/fs/binfmt_script.c
m_ume/* needs to be adapted as well but that is a different patch.
Modified:
trunk/coregrind/launcher-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/launcher-linux.c
==============================================================================
--- trunk/coregrind/launcher-linux.c (original)
+++ trunk/coregrind/launcher-linux.c Mon Apr 6 15:29:45 2015
@@ -1,3 +1,4 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
/*--------------------------------------------------------------------*/
/*--- Launching valgrind m_launcher.c ---*/
@@ -156,24 +157,39 @@
if (header[0] == '#' && header[1] == '!') {
int i = 2;
- char *interp = (char *)header + 2;
+ STATIC_ASSERT(VKI_BINPRM_BUF_SIZE < sizeof header);
+ if (n_bytes > VKI_BINPRM_BUF_SIZE)
+ n_bytes = VKI_BINPRM_BUF_SIZE - 1;
+ header[n_bytes] = '\0';
+ char *eol = strchr(header, '\n');
+ if (eol != NULL)
+ *eol = '\0';
+
// Skip whitespace.
- while (1) {
- if (i == n_bytes) return NULL;
- if (' ' != header[i] && '\t' != header[i]) break;
+ while (header[i] == ' '|| header[i] == '\t')
i++;
- }
// Get the interpreter name.
- interp = &header[i];
- while (1) {
- if (i == n_bytes) break;
- if (isspace(header[i])) break;
- i++;
+ const char *interp = header + i;
+
+ if (header[i] == '\0') {
+ // No interpreter was found; fall back to default shell
+# if defined(VGPV_arm_linux_android) \
+ || defined(VGPV_x86_linux_android) \
+ || defined(VGPV_mips32_linux_android) \
+ || defined(VGPV_arm64_linux_android)
+ interp = "/system/bin/sh";
+# else
+ interp = "/bin/sh";
+# endif
+ } else {
+ while (header[i]) {
+ if (header[i] == ' ' || header[i] == '\t') break;
+ i++;
+ }
+ header[i] = '\0';
}
- if (i == n_bytes) return NULL;
- header[i] = '\0';
platform = select_platform(interp);
Modified: trunk/include/vki/vki-linux.h
==============================================================================
--- trunk/include/vki/vki-linux.h (original)
+++ trunk/include/vki/vki-linux.h Mon Apr 6 15:29:45 2015
@@ -4610,6 +4610,11 @@
#define VKI_SECCOMP_MODE_FILTER 2
+//----------------------------------------------------------------------
+// From linux-3.19.3/include/uapi/linux/binfmts.h
+//----------------------------------------------------------------------
+#define VKI_BINPRM_BUF_SIZE 128
+
#endif // __VKI_LINUX_H
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2015-04-06 14:24:52
|
Author: florian
Date: Mon Apr 6 15:24:44 2015
New Revision: 15067
Log:
Ignore generated files.
Modified:
trunk/none/tests/scripts/ (props changed)
|
|
From: Ivo R. <iv...@iv...> - 2015-04-05 10:25:21
|
2015-04-05 11:21 GMT+02:00 Ivo Raisr <iv...@iv...>: > I think r15034 (changes adding VG_(am_is_bogus_client_stack_pointer)()) > causes some form of regression in stack extending. > ... > Bug report: https://bugs.kde.org/show_bug.cgi?id=345887 |
|
From: Ivo R. <iv...@iv...> - 2015-04-05 09:21:44
|
I think r15034 (changes adding VG_(am_is_bogus_client_stack_pointer)()) causes some form of regression in stack extending. Please see attached test cases for x86/linux and amd64/linux. On Valgrind r15033 these finish successfully with: ==19090== Process terminating with default action of signal 11 (SIGSEGV) ==19090== Access not within mapped region at address 0x101 Segmentation fault (core dumped) (Which is expected behaviour because they test dumping core.) However on Valgrind r15034 these crash Valgrind with an assertion: --19128:0: aspacem Valgrind: FATAL: aspacem assertion failed: --19128:0: aspacem nsegments[segA].kind == SkAnonC --19128:0: aspacem at m_aspacemgr/aspacemgr-linux.c:2845 (vgPlain_am_extend_into_adjacent_reservation_client) --19128:0: aspacem Exiting now. The attached test cases are simply built with gcc -m32/-m64. Kind regards, I. |
|
From: John R. <jr...@bi...> - 2015-04-05 03:36:05
|
> I still get the error: disInstr(ppc): unhandled instruction: 0x10E40301 > I thought Valgrind 3.10.1 has support for CPU: e500v2? NO? 0x10E40301 ==> "evldd r7,0(r4)". Developers are much more likely to recognize 'evldd' than an instruction word in hex. It is customary to give some documented basis for "I thought ...". Just a little bit of searching the bug list: https://bugs.kde.org Product: valgrind Content: e500 yields this report from 2010-10-28 (4.5 years ago), last updated 2013-04-02 (two years ago): https://bugs.kde.org/show_bug.cgi?id=255494 which links to this attachment from a run of valgrind-3.6.0: https://bugs.kde.org/attachment.cgi?id=52939 which contains: ----- disInstr(ppc): unhandled instruction: 0x10E40301 primary 4(0x4), secondary 769(0x301) ==19630== valgrind: Unrecognised instruction at address 0x4019510. [[snip]] ==19630== Process terminating with default action of signal 4 (SIGILL): dumping core ==19630== Illegal opcode at address 0x4019510 ==19630== at 0x4019510: memcpy (in /lib/ld-2.8.so) ==19630== by 0x40021BF: _dl_start_final (in /lib/ld-2.8.so) ==19630== by 0x40162C7: _start (in /lib/ld-2.8.so) ----- So that code for memcpy has an optimization to fetch at least 64 bits at a time in some circumstances, instead of only 32 bits. Evidently valgrind-3.10.1 still does not implement this instruction. Your best bet is to comment on bug 255494, requesting implementation. You could help by supplying a list of missing opcodes which, if implemented, would be sufficient for valgrind to handle all of memcpy. Until then, avoid code that contains this optimization. Install a more-generic version of /lib/ld-2.8.so that does not use the specialized instructions. |
|
From: <sv...@va...> - 2015-04-04 18:43:19
|
Author: florian
Date: Sat Apr 4 19:43:11 2015
New Revision: 3118
Log:
Tweak STATIC_ASSERT such that there is no warning about an unused
variable when used at block scope.
Modified:
trunk/priv/main_util.h
Modified: trunk/priv/main_util.h
==============================================================================
--- trunk/priv/main_util.h (original)
+++ trunk/priv/main_util.h Sat Apr 4 19:43:11 2015
@@ -51,7 +51,8 @@
#endif
// Poor man's static assert
-#define STATIC_ASSERT(x) extern int vex__unused_array[(x) ? 1 : -1]
+#define STATIC_ASSERT(x) extern int vex__unused_array[(x) ? 1 : -1] \
+ __attribute__((unused))
/* Stuff for panicking and assertion. */
|
|
From: <sv...@va...> - 2015-04-04 18:43:08
|
Author: florian
Date: Sat Apr 4 19:43:00 2015
New Revision: 15066
Log:
Tweak STATIC_ASSERT such that there is no warning about an unused
variable when used at block scope.
Modified:
trunk/include/pub_tool_basics.h
Modified: trunk/include/pub_tool_basics.h
==============================================================================
--- trunk/include/pub_tool_basics.h (original)
+++ trunk/include/pub_tool_basics.h Sat Apr 4 19:43:00 2015
@@ -369,7 +369,8 @@
})
// Poor man's static assert
-#define STATIC_ASSERT(x) extern int VG_(VG_(VG_(unused)))[(x) ? 1 : -1]
+#define STATIC_ASSERT(x) extern int VG_(VG_(VG_(unused)))[(x) ? 1 : -1] \
+ __attribute__((unused))
#endif /* __PUB_TOOL_BASICS_H */
|
|
From: santosh <ys...@gm...> - 2015-04-04 16:00:20
|
Hello, I still get the error: disInstr(ppc): unhandled instruction: 0x10E40301 I thought Valgrind 3.10.1 has support for CPU: e500v2? NO? Thanks, Santosh |
|
From: Petar J. <mip...@gm...> - 2015-04-04 03:15:52
|
On Fri, Apr 3, 2015 at 4:29 PM, Florian Krohm <fl...@ei...> wrote: > Yes. But comparing _valEx makes sense when it has a deterministic value > (i.e. after a pipe call). So not comparing the _valEx value at all does > not sound right either. I agree. > How is this (for mips64): > > Index: coregrind/m_syscall.c > =================================================================== > --- coregrind/m_syscall.c (revision 15062) > +++ coregrind/m_syscall.c (working copy) > @@ -859,6 +859,7 @@ > ULong V0 = do_syscall_WRK(a1,a2,a3,a4,a5,a6,sysno,v1_a3); > ULong V1 = (ULong)v1_a3[0]; > ULong A3 = (ULong)v1_a3[1]; > + if (sysno != _NR_pipe) V1 = 0; // V1 is unused for this syscall > return VG_(mk_SysRes_mips64_linux)( V0, V1, A3 ); > > #else > > Does that help? > > I have tested a similar change right away, but it was not sufficient. I believe I need to modify at least putSyscallStatusIntoGuestState(), will see if anything else is missing after more testing. Petar |
|
From: Ivo R. <iv...@iv...> - 2015-04-04 02:52:17
|
2015-04-02 22:05 GMT+02:00 Philippe Waroquiers < phi...@sk...>: > On Thu, 2015-04-02 at 21:27 +0200, Ivo Raisr wrote: > > > > Back to memcheck annotations in setHelperAnns(). I tried to add > > another element of fxState for FP and - what surprise - no effect on x86 > > +amd64/Linux. > > All tests passed, nothing failed. > > I suspect that all this is working due to the default value: > --vex-iropt-register-updates=unwindregs-at-mem-access > > Even if the dirty helper does not indicate > that the FP must be up to date at dirty helper call, > the above flag will ensure the FP has a correct value. > > I am wondering what is the behaviour of memcheck > if we fix the dirty helper (i.e. indicate it reads FP) > but use sp-at-mem-access for > --vex-iropt-register-updates? > Are all tests still ok? > You are right, the default --vex-iropt-register-updates=unwindregs-at-mem-access was in place. But "sp-at-mem-access" is not correct option for stack unwinding. I used "unwindregs-at-mem-access" instead to play with. So with --vex-iropt-register-updates=unwindregs-at-mem-access there is no difference whatsoever for the following cases: - setHelperAnns() with the fix (dirty helpers read FP) - setHelperAnns() without the fix (original state) - setHelperAnns() set no annotations at all [di->nFxState = 0] This supports my earlier statement that annotations on dirty helpers injected by *tools* are not processed, unlike annotations injected by guest->IR translation. https://bugs.kde.org/show_bug.cgi?id=345811 I. |
|
From: <sv...@va...> - 2015-04-03 20:47:47
|
Author: sewardj
Date: Fri Apr 3 21:47:38 2015
New Revision: 3117
Log:
amd64 ncode generation: switch from using temporary HRegSet to the
new bitmap-based real-regs-only RRegSet. Remove HRegSet entirely.
Modified:
branches/NCODE/priv/host_amd64_defs.c
branches/NCODE/priv/host_amd64_defs.h
branches/NCODE/priv/host_generic_reg_alloc2.c
branches/NCODE/priv/host_generic_regs.c
branches/NCODE/priv/host_generic_regs.h
Modified: branches/NCODE/priv/host_amd64_defs.c
==============================================================================
--- branches/NCODE/priv/host_amd64_defs.c (original)
+++ branches/NCODE/priv/host_amd64_defs.c Fri Apr 3 21:47:38 2015
@@ -217,7 +217,7 @@
return am;
}
AMD64AMode* AMD64AMode_IRS ( UInt imm32, HReg reg, Int shift ) {
- AMD64AMode* am = LibVEX_Alloc(sizeof(AMD64AMode));
+ AMD64AMode* am = LibVEX_Alloc_inline(sizeof(AMD64AMode));
am->tag = Aam_IRS;
am->Aam.IRS.imm = imm32;
am->Aam.IRS.reg = reg;
@@ -803,7 +803,7 @@
return i;
}
AMD64Instr* AMD64Instr_MovxWQ ( Bool syned, HReg src, HReg dst ) {
- AMD64Instr* i = LibVEX_Alloc(sizeof(AMD64Instr));
+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr));
i->tag = Ain_MovxWQ;
i->Ain.MovxWQ.syned = syned;
i->Ain.MovxWQ.src = src;
@@ -1068,30 +1068,30 @@
}
AMD64Instr* AMD64Instr_NCode ( NCodeTemplate* tmpl, HReg* regsR,
HReg* regsA, HReg* regsS ) {
- AMD64InstrNCode* details = LibVEX_Alloc(sizeof(AMD64InstrNCode));
- details->tmpl = tmpl;
- details->regsR = regsR;
- details->regsA = regsA;
- details->regsS = regsS;
- details->liveAfter = NULL;
- AMD64Instr* i = LibVEX_Alloc(sizeof(AMD64Instr));
+ AMD64InstrNCode* details = LibVEX_Alloc_inline(sizeof(AMD64InstrNCode));
+ details->tmpl = tmpl;
+ details->regsR = regsR;
+ details->regsA = regsA;
+ details->regsS = regsS;
+ details->rrLiveAfter = NULL;
+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr));
i->tag = Ain_NCode;
i->Ain.NCode.details = details;
return i;
}
AMD64Instr* AMD64Instr_NC_Jmp32 ( AMD64CondCode cc ) {
- AMD64Instr* i = LibVEX_Alloc(sizeof(AMD64Instr));
+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr));
i->tag = Ain_NC_Jmp32;
i->Ain.NC_Jmp32.cc = cc;
return i;
}
AMD64Instr* AMD64Instr_NC_CallR11 ( void ) {
- AMD64Instr* i = LibVEX_Alloc(sizeof(AMD64Instr));
+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr));
i->tag = Ain_NC_CallR11;
return i;
}
AMD64Instr* AMD64Instr_NC_TestQ ( HReg src, HReg dst ) {
- AMD64Instr* i = LibVEX_Alloc(sizeof(AMD64Instr));
+ AMD64Instr* i = LibVEX_Alloc_inline(sizeof(AMD64Instr));
i->tag = Ain_NC_TestQ;
i->Ain.NC_TestQ.src = src;
i->Ain.NC_TestQ.dst = dst;
@@ -3998,7 +3998,7 @@
/*MOD*/RelocationBuffer* rb,
const NInstr* ni,
const NRegMap* nregMap,
- const HRegSet* hregsLiveAfter,
+ const RRegSet* rrLiveAfter,
/* for debug printing only */
Bool verbose, NLabel niLabel );
@@ -4029,7 +4029,8 @@
const AMD64InstrNCode* hi_details = hi->Ain.NCode.details;
const NCodeTemplate* tmpl = hi_details->tmpl;
- const HRegSet* hregsLiveAfter = hi_details->liveAfter;
+ const RRegSet* rregsLiveAfter = hi_details->rrLiveAfter;
+ const RRegUniverse* univ = RRegSet__getUniverse(rregsLiveAfter);
NRegMap nregMap;
nregMap.regsR = hi_details->regsR;
@@ -4078,7 +4079,7 @@
offsetsHot[i] = AssemblyBuffer__getNext(ab_hot);
NLabel lbl = mkNLabel(Nlz_Hot, i);
emit_AMD64NInstr(ab_hot, rb, tmpl->hot[i], &nregMap,
- hregsLiveAfter, verbose, lbl);
+ rregsLiveAfter, verbose, lbl);
}
/* And the cold code */
@@ -4086,7 +4087,7 @@
offsetsCold[i] = AssemblyBuffer__getNext(ab_cold);
NLabel lbl = mkNLabel(Nlz_Cold, i);
emit_AMD64NInstr(ab_cold, rb, tmpl->cold[i], &nregMap,
- hregsLiveAfter, verbose, lbl);
+ rregsLiveAfter, verbose, lbl);
}
/* Now visit the new relocation entries. */
@@ -4132,69 +4133,69 @@
HReg rcx = hregAMD64_RCX();
HReg rdx = hregAMD64_RDX();
- HRegSet* rs = HRegSet__new();
+ RRegSet* rs = RRegSet__new(univ);
vex_printf("\n__new\n");
- vex_printf("1: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ vex_printf("1: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
vex_printf("\n__add\n");
- HRegSet__add(rs, rbx);
- vex_printf("2: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, rbx);
+ vex_printf("2: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__add(rs, rdx);
- vex_printf("3: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, rdx);
+ vex_printf("3: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__add(rs, rcx);
- vex_printf("4: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, rcx);
+ vex_printf("4: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__add(rs, rcx);
- vex_printf("5: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, rcx);
+ vex_printf("5: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__add(rs, r10);
- vex_printf("6: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, r10);
+ vex_printf("6: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__add(rs, rax);
- vex_printf("7: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__add(rs, rax);
+ vex_printf("7: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
vex_printf("\n__fromVec\n");
const HReg vec[4] = { rdx, rcx, rbx, rax };
- HRegSet__fromVec(rs, vec, 0);
- vex_printf("8: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__fromVec(rs, vec, 0);
+ vex_printf("8: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__fromVec(rs, vec, 4);
- vex_printf("9: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__fromVec(rs, vec, 4);
+ vex_printf("9: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
vex_printf("\n__del\n");
- HRegSet__del(rs, rcx);
- vex_printf("10: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rcx);
+ vex_printf("10: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__del(rs, rcx);
- vex_printf("11: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rcx);
+ vex_printf("11: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__del(rs, rbx);
- vex_printf("12: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rbx);
+ vex_printf("12: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__del(rs, rax);
- vex_printf("13: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rax);
+ vex_printf("13: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__del(rs, rdx);
- vex_printf("14: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rdx);
+ vex_printf("14: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- HRegSet__del(rs, rdx);
- vex_printf("15: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__del(rs, rdx);
+ vex_printf("15: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
vex_printf("\n__plus\n");
- HRegSet* rs2 = HRegSet__new();
- HRegSet__add(rs, r10); HRegSet__add(rs, rax);
- HRegSet__add(rs2, rbx); HRegSet__add(rs2, rcx); HRegSet__add(rs2, rax);
-
- HRegSet__plus(rs2, rs);
- vex_printf("16a: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
- vex_printf("16b: "); HRegSet__pp(rs2, ppHRegAMD64); vex_printf("\n");
+ RRegSet* rs2 = RRegSet__new(univ);
+ RRegSet__add(rs, r10); RRegSet__add(rs, rax);
+ RRegSet__add(rs2, rbx); RRegSet__add(rs2, rcx); RRegSet__add(rs2, rax);
+
+ RRegSet__plus(rs2, rs);
+ vex_printf("16a: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ vex_printf("16b: "); RRegSet__pp(rs2, ppHRegAMD64); vex_printf("\n");
vex_printf("\n__minus\n");
- HRegSet__minus(rs, rs2);
- vex_printf("17: "); HRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
+ RRegSet__minus(rs, rs2);
+ vex_printf("17: "); RRegSet__pp(rs, ppHRegAMD64); vex_printf("\n");
}
@@ -4230,7 +4231,7 @@
/*MOD*/RelocationBuffer* rb,
const NInstr* ni,
const NRegMap* nregMap,
- const HRegSet* hregsLiveAfter,
+ const RRegSet* hregsLiveAfter,
/* the next 2 are for debug printing only */
Bool verbose, NLabel niLabel )
{
@@ -4320,80 +4321,81 @@
overestimate of (1) -- for example, all regs available to
reg-alloc -- and refine it later.
*/
- const HRegSet* set_1 = hregsLiveAfter; //HRegSet__new();
- //if (0) {
- // Int nregs; HReg* arr;
- // getAllocableRegs_AMD64(&nregs, &arr);
- // HRegSet__fromVec(set_1, arr, nregs);
- // }
+ const RRegUniverse* univ = RRegSet__getUniverse(hregsLiveAfter);
+ const RRegSet* set_1 = hregsLiveAfter;
- HRegSet* set_2 = HRegSet__new();
+ RRegSet* set_2 = RRegSet__new(univ);
{ UInt i;
for (i = 0; i < nregMap->nRegsR; i++)
- HRegSet__add(set_2, nregMap->regsR[i]);
+ RRegSet__add(set_2, nregMap->regsR[i]);
for (i = 0; i < nregMap->nRegsA; i++)
- HRegSet__add(set_2, nregMap->regsA[i]);
+ RRegSet__add(set_2, nregMap->regsA[i]);
for (i = 0; i < nregMap->nRegsS; i++)
- HRegSet__add(set_2, nregMap->regsS[i]);
+ RRegSet__add(set_2, nregMap->regsS[i]);
}
- HRegSet* set_3 = HRegSet__new();
+ RRegSet* set_3 = RRegSet__new(univ);
// callee-saves: rbx rbp r12 r13 r14 r15
{ HReg vec[6];
vec[0] = hregAMD64_RBX(); vec[1] = hregAMD64_RBP();
vec[2] = hregAMD64_R12(); vec[3] = hregAMD64_R13();
vec[4] = hregAMD64_R14(); vec[5] = hregAMD64_R15();
- HRegSet__fromVec(set_3, vec, sizeof(vec)/sizeof(vec[0]));
+ RRegSet__fromVec(set_3, vec, sizeof(vec)/sizeof(vec[0]));
}
- HRegSet* set_4 = HRegSet__new();
+ RRegSet* set_4 = RRegSet__new(univ);
if (!isNRegINVALID(ni->Nin.Call.resHi))
- HRegSet__add(set_4, mapNReg(nregMap, ni->Nin.Call.resHi));
+ RRegSet__add(set_4, mapNReg(nregMap, ni->Nin.Call.resHi));
if (!isNRegINVALID(ni->Nin.Call.resLo))
- HRegSet__add(set_4, mapNReg(nregMap, ni->Nin.Call.resLo));
+ RRegSet__add(set_4, mapNReg(nregMap, ni->Nin.Call.resLo));
- HRegSet* to_preserve = HRegSet__new();
- HRegSet__copy(to_preserve, set_1);
- HRegSet__plus(to_preserve, set_2);
- HRegSet__minus(to_preserve, set_3);
- HRegSet__minus(to_preserve, set_4);
+ RRegSet* to_preserve = RRegSet__new(univ);
+ RRegSet__copy(to_preserve, set_1);
+ RRegSet__plus(to_preserve, set_2);
+ RRegSet__minus(to_preserve, set_3);
+ RRegSet__minus(to_preserve, set_4);
if (verbose) {
vex_printf(" # set1: ");
- HRegSet__pp(set_1, ppHRegAMD64); vex_printf("\n");
+ RRegSet__pp(set_1, ppHRegAMD64); vex_printf("\n");
vex_printf(" # set2: ");
- HRegSet__pp(set_2, ppHRegAMD64); vex_printf("\n");
+ RRegSet__pp(set_2, ppHRegAMD64); vex_printf("\n");
vex_printf(" # set3: ");
- HRegSet__pp(set_3, ppHRegAMD64); vex_printf("\n");
+ RRegSet__pp(set_3, ppHRegAMD64); vex_printf("\n");
vex_printf(" # set4: ");
- HRegSet__pp(set_4, ppHRegAMD64); vex_printf("\n");
+ RRegSet__pp(set_4, ppHRegAMD64); vex_printf("\n");
vex_printf(" # pres: ");
- HRegSet__pp(to_preserve, ppHRegAMD64); vex_printf("\n");
+ RRegSet__pp(to_preserve, ppHRegAMD64); vex_printf("\n");
}
/* Save live regs */
- UInt n_to_preserve = HRegSet__size(to_preserve);
+ UInt n_to_preserve = RRegSet__card(to_preserve);
vassert(n_to_preserve < 25); /* stay sane */
/* Figure out how much to move the stack, ensuring any alignment up
to 32 is preserved. */
UInt stackMove = n_to_preserve * 16;
stackMove = (stackMove + 31) & ~31;
-
- UInt i;
if (stackMove > 0) {
HI( AMD64Instr_Alu64R(Aalu_SUB, AMD64RMI_Imm(stackMove),
hregAMD64_RSP()) );
}
- for (i = 0; i < n_to_preserve; i++) {
- HReg r = HRegSet__index(to_preserve, i);
+
+ RRegSetIterator* iter = RRegSetIterator__new();
+ RRegSetIterator__init(iter, to_preserve);
+ UInt slotNo = 0;
+ while (True) {
+ HReg r = RRegSetIterator__next(iter);
+ if (hregIsInvalid(r)) break;
AMD64Instr* i1 = NULL;
AMD64Instr* i2 = NULL;
genSpill_AMD64( (HInstr**)&i1, (HInstr**)&i2,
- r, True/*spRel*/, 16 * i, True/*mode64*/ );
+ r, True/*spRel*/, 16 * slotNo, True/*mode64*/ );
if (i1) HI(i1);
if (i2) HI(i2);
+ slotNo++;
}
+ vassert(slotNo == n_to_preserve);
/* Marshall args for the call, do the call, marshal the result */
/* Case: 1 arg reg, 1 result reg */
@@ -4424,15 +4426,20 @@
}
/* Restore live regs */
- for (i = 0; i < n_to_preserve; i++) {
- HReg r = HRegSet__index(to_preserve, i);
+ RRegSetIterator__init(iter, to_preserve);
+ slotNo = 0;
+ while (True) {
+ HReg r = RRegSetIterator__next(iter);
+ if (hregIsInvalid(r)) break;
AMD64Instr* i1 = NULL;
AMD64Instr* i2 = NULL;
genReload_AMD64( (HInstr**)&i1, (HInstr**)&i2,
- r, True/*spRel*/, 16 * i, True/*mode64*/ );
+ r, True/*spRel*/, 16 * slotNo, True/*mode64*/ );
if (i1) HI(i1);
if (i2) HI(i2);
+ slotNo++;
}
+ vassert(slotNo == n_to_preserve);
if (stackMove > 0) {
HI( AMD64Instr_Alu64R(Aalu_ADD, AMD64RMI_Imm(stackMove),
hregAMD64_RSP()) );
Modified: branches/NCODE/priv/host_amd64_defs.h
==============================================================================
--- branches/NCODE/priv/host_amd64_defs.h (original)
+++ branches/NCODE/priv/host_amd64_defs.h Fri Apr 3 21:47:38 2015
@@ -426,7 +426,7 @@
HReg* regsR; /* Result regs, INVALID_HREG terminated */
HReg* regsA; /* Arg regs, ditto */
HReg* regsS; /* Scratch regs, ditto */
- HRegSet* liveAfter; /* initially NULL, filled in by RA */
+ RRegSet* rrLiveAfter; /* initially NULL, filled in by RA */
}
AMD64InstrNCode;
Modified: branches/NCODE/priv/host_generic_reg_alloc2.c
==============================================================================
--- branches/NCODE/priv/host_generic_reg_alloc2.c (original)
+++ branches/NCODE/priv/host_generic_reg_alloc2.c Fri Apr 3 21:47:38 2015
@@ -1604,17 +1604,17 @@
if (ai->tag == Ain_NCode) {
AMD64InstrNCode* details = ai->Ain.NCode.details;
//vex_printf("RA: after NCode: ");
- vassert(details->liveAfter == NULL);
- HRegSet* live_after_NCode = HRegSet__new();
+ vassert(details->rrLiveAfter == NULL);
+ RRegSet* rrLive_after_NCode = RRegSet__new(univ);
for (Int k = 0; k < n_rregs; k++) {
if (rreg_state[k].disp == Free)
continue;
//ppHRegAMD64(rreg_state[k].rreg);
- HRegSet__add(live_after_NCode, univ->regs[k]);
+ RRegSet__add(rrLive_after_NCode, univ->regs[k]);
//vex_printf(" ");
}
//vex_printf("\n");
- details->liveAfter = live_after_NCode;
+ details->rrLiveAfter = rrLive_after_NCode;
}
}
Modified: branches/NCODE/priv/host_generic_regs.c
==============================================================================
--- branches/NCODE/priv/host_generic_regs.c (original)
+++ branches/NCODE/priv/host_generic_regs.c Fri Apr 3 21:47:38 2015
@@ -83,283 +83,206 @@
/*---------------------------------------------------------*/
-/*--- A simple implementation of register sets ---*/
+/*--- Real register Universes. ---*/
/*---------------------------------------------------------*/
-/* Helper function, to sort HReg values in an array. */
-static void sortHRegArray ( HReg* arr, Int nArr )
+void RRegUniverse__init ( /*OUT*/RRegUniverse* univ )
{
- Int incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280,
- 9841, 29524, 88573, 265720,
- 797161, 2391484 };
- Int lo = 0;
- Int hi = nArr-1;
- Int i, j, h, bigN, hp;
- HReg v;
-
- vassert(nArr >= 0);
- if (nArr == 0) return;
-
- bigN = hi - lo + 1; if (bigN < 2) return;
- hp = 0; while (hp < 14 && incs[hp] < bigN) hp++; hp--;
-
- for ( ; hp >= 0; hp--) {
- h = incs[hp];
- for (i = lo + h; i <= hi; i++) {
- v = arr[i];
- j = i;
- while (arr[j-h].u32 > v.u32) {
- arr[j] = arr[j-h];
- j = j - h;
- if (j <= (lo + h - 1)) break;
- }
- arr[j] = v;
- }
+ *univ = (RRegUniverse){};
+ univ->size = 0;
+ univ->allocable = 0;
+ for (UInt i = 0; i < N_RREGUNIVERSE_REGS; i++) {
+ univ->regs[i] = HReg_INVALID;
}
}
+void RRegUniverse__check_is_sane ( const RRegUniverse* univ )
+{
+ /* Check Real-Register-Universe invariants. All of these are
+ important. */
+ vassert(univ->size > 0);
+ vassert(univ->size <= N_RREGUNIVERSE_REGS);
+ vassert(univ->allocable <= univ->size);
+ for (UInt i = 0; i < univ->size; i++) {
+ HReg reg = univ->regs[i];
+ vassert(!hregIsInvalid(reg));
+ vassert(!hregIsVirtual(reg));
+ vassert(hregIndex(reg) == i);
+ }
+ for (UInt i = univ->size; i < N_RREGUNIVERSE_REGS; i++) {
+ HReg reg = univ->regs[i];
+ vassert(hregIsInvalid(reg));
+ }
+}
+
+
+/*---------------------------------------------------------*/
+/*--- Real register sets ---*/
+/*---------------------------------------------------------*/
+
+/* Represents sets of real registers. |bits| is interpreted in the
+ context of |univ|. That is, each bit index |i| in |bits|
+ corresponds to the register |univ->regs[i]|. This relies
+ entirely on the fact that N_RREGUNIVERSE_REGS <= 64.
+*/
+struct _RRegSet {
+ ULong bits;
+ const RRegUniverse* univ;
+};
+
+STATIC_ASSERT(N_RREGUNIVERSE_REGS <= 8 * sizeof(ULong));
+
/* Print a register set, using the arch-specific register printing
function |regPrinter| supplied. */
-void HRegSet__pp ( HRegSet* set, void (*regPrinter)(HReg) )
+void RRegSet__pp ( const RRegSet* set, void (*regPrinter)(HReg) )
{
- UInt i;
+ const RRegUniverse* univ = set->univ;
+ Bool first = True;
vex_printf("{");
- for (i = 0; i < set->regsUsed; i++) {
- regPrinter(set->regs[i]);
- if (i+1 != set->regsUsed)
+ for (UInt i = 0; i < 8 * sizeof(ULong); i++) {
+ if (0ULL == (set->bits & (1ULL << i)))
+ continue;
+ vassert(i < univ->size);
+ if (!first) {
vex_printf(",");
+ } else {
+ first = False;
+ }
+ regPrinter(univ->regs[i]);
}
vex_printf("}");
}
/* Create a new, empty, set. */
-HRegSet* HRegSet__new ( void )
+RRegSet* RRegSet__new ( const RRegUniverse* univ )
{
- HRegSet* set = LibVEX_Alloc(sizeof(HRegSet));
- set->regsUsed = 0;
+ vassert(univ);
+ RRegSet* set = LibVEX_Alloc_inline(sizeof(RRegSet));
+ set->bits = 0;
+ set->univ = univ;
return set;
}
+/* Return the RRegUniverse for a given RRegSet. */
+const RRegUniverse* RRegSet__getUniverse ( const RRegSet* set )
+{
+ return set->univ;
+}
+
/* Install elements from vec[0 .. nVec-1]. The previous contents of
|dst| are lost. vec[0 .. nVec-1] may not contain any
duplicates. */
-void HRegSet__fromVec ( /*MOD*/HRegSet* dst, const HReg* vec, UInt nVec )
+void RRegSet__fromVec ( /*MOD*/RRegSet* dst, const HReg* vec, UInt nVec )
{
- UInt i;
- vassert(nVec <= N_HREG_SET);
- for (i = 0; i < nVec; i++) {
- dst->regs[i] = vec[i];
- }
- dst->regsUsed = nVec;
- sortHRegArray(&dst->regs[0], dst->regsUsed);
- /* Assert no duplicates (and, as a side effect, in-order) */
- for (i = 1; i < dst->regsUsed; i++) {
- /* If this fails, your vec[] contains duplicates. */
- vassert(dst->regs[i-1].u32 < dst->regs[i].u32);
+ for (UInt i = 0; i < nVec; i++) {
+ HReg r = vec[i];
+ vassert(!hregIsInvalid(r) && !hregIsVirtual(r));
+ UInt ix = hregIndex(r);
+ vassert(ix < dst->univ->size);
+ dst->bits |= (1ULL << ix);
}
}
/* Copy the contents of |regs| into |dst|. The previous contents of
|dst| are lost. */
-void HRegSet__copy ( /*MOD*/HRegSet* dst, const HRegSet* regs )
+void RRegSet__copy ( /*MOD*/RRegSet* dst, const RRegSet* regs )
{
- UInt i;
- dst->regsUsed = regs->regsUsed;
- for (i = 0; i < regs->regsUsed; i++)
- dst->regs[i] = regs->regs[i];
+ vassert(dst->univ == regs->univ);
+ dst->bits = regs->bits;
}
/* Add |reg| to |dst|. */
-void HRegSet__add ( /*MOD*/HRegSet* dst, HReg reg )
+void RRegSet__add ( /*MOD*/RRegSet* dst, HReg reg )
{
- UInt i, j;
- for (i = 0; i < dst->regsUsed; i++) {
- if (reg.u32 <= dst->regs[i].u32)
- break;
- }
- /* Is it already present? */
- if (i < dst->regsUsed && reg.u32 == dst->regs[i].u32) {
- /* Yes. Do nothing more. */
- return;
- }
- /* No. Add it at position |i|. */
- vassert(dst->regsUsed < N_HREG_SET);
- dst->regsUsed++;
- for (j = dst->regsUsed-1; j > i; j--) {
- dst->regs[j] = dst->regs[j-1];
- }
- dst->regs[i] = reg;
+ vassert(!hregIsInvalid(reg) && !hregIsVirtual(reg));
+ UInt ix = hregIndex(reg);
+ vassert(ix < dst->univ->size);
+ dst->bits |= (1ULL << ix);
}
/* Remove |reg| from |dst|. */
-void HRegSet__del ( /*MOD*/HRegSet* dst, HReg reg )
+void RRegSet__del ( /*MOD*/RRegSet* dst, HReg reg )
{
- UInt i, j;
- for (i = 0; i < dst->regsUsed; i++) {
- if (reg.u32 <= dst->regs[i].u32)
- break;
- }
- /* Is it already present? */
- if (i < dst->regsUsed && reg.u32 == dst->regs[i].u32) {
- /* Yes, at position |i|. */;
- vassert(dst->regsUsed > 0);
- for (j = i+1; j < dst->regsUsed; j++) {
- dst->regs[j-1] = dst->regs[j];
- }
- dst->regsUsed--;
- }
+ vassert(!hregIsInvalid(reg) && !hregIsVirtual(reg));
+ UInt ix = hregIndex(reg);
+ vassert(ix < dst->univ->size);
+ dst->bits &= ~(1ULL << ix);
}
/* Add |regs| to |dst|. */
-void HRegSet__plus ( /*MOD*/HRegSet* dst, const HRegSet* regs )
+void RRegSet__plus ( /*MOD*/RRegSet* dst, const RRegSet* regs )
{
- /* We'll need to create the result into a temp vector,
- since |dst| is also one of the sources. */
- HReg tmp[N_HREG_SET];
- UInt iD, iR, iT;
- UInt usedD = dst->regsUsed;
- UInt usedR = regs->regsUsed;
- iD = iR = iT = 0;
-
- while (1) {
- vassert(iD <= usedD && iR <= usedR);
- if (iD == usedD && iR == usedR) {
- /* both empty -- done */
- break;
- }
- vassert(iT < N_HREG_SET);
- if (iD == usedD && iR != usedR) {
- /* D empty, use up R */
- tmp[iT++] = regs->regs[iR++];
- continue;
- }
- if (iD != usedD && iR == usedR) {
- /* R empty, use up D */
- tmp[iT++] = dst->regs[iD++];
- continue;
- }
- /* both not empty; use the lowest valued HReg */
- HReg candD = dst->regs[iD];
- HReg candR = regs->regs[iR];
- if (candD.u32 < candR.u32) {
- tmp[iT++] = candD;
- iD++;
- }
- else if (candD.u32 > candR.u32) {
- tmp[iT++] = candR;
- iR++;
- }
- else {
- tmp[iT++] = candD;
- iD++; iR++;
- }
- }
-
- /* Copy result back into place. */
- vassert((iT >= usedD || iT >= usedR) && iT <= N_HREG_SET);
- UInt i;
- for (i = 0; i < iT; i++) {
- dst->regs[i] = tmp[i];
- }
- dst->regsUsed = iT;
+ vassert(dst->univ == regs->univ);
+ dst->bits |= regs->bits;
}
/* Remove |regs| from |dst|. */
-void HRegSet__minus ( /*MOD*/HRegSet* dst, const HRegSet* regs )
+void RRegSet__minus ( /*MOD*/RRegSet* dst, const RRegSet* regs )
{
- /* We'll need to create the result into a temp vector,
- since |dst| is also one of the sources. */
- HReg tmp[N_HREG_SET];
- UInt iD, iR, iT;
- UInt usedD = dst->regsUsed;
- UInt usedR = regs->regsUsed;
- iD = iR = iT = 0;
-
- while (1) {
- vassert(iD <= usedD && iR <= usedR);
- if (iD == usedD) {
- /* D empty -- done */
- break;
- }
- vassert(iT < N_HREG_SET);
- if (iR == usedR) {
- /* R empty, use up D */
- tmp[iT++] = dst->regs[iD++];
- continue;
- }
- /* both not empty */
- HReg candD = dst->regs[iD];
- HReg candR = regs->regs[iR];
- if (candD.u32 < candR.u32) {
- /* candD can't possibly be in the part of R that we
- haven't yet visited, so keep it. */
- tmp[iT++] = candD;
- iD++;
- }
- else if (candD.u32 > candR.u32) {
- /* We don't know yet if we can retain candD, but for sure,
- candR won't be able to delete anything in the unvisited
- part of D. So skip over candR. */
- iR++;
- }
- else {
- /* The register appears in both lists, so skip it. */
- iR++; iD++;
- }
- }
-
- /* Copy result back into place. */
- vassert((iT <= usedD || iT <= usedR) && iT <= N_HREG_SET);
- UInt i;
- for (i = 0; i < iT; i++) {
- dst->regs[i] = tmp[i];
- }
- dst->regsUsed = iT;
+ vassert(dst->univ == regs->univ);
+ dst->bits &= (~regs->bits);
}
/* Returns the number of elements in |set|. */
-UInt HRegSet__size ( const HRegSet* set ) {
- return set->regsUsed;
+UInt RRegSet__card ( const RRegSet* set )
+{
+ return __builtin_popcountll(set->bits);
}
-/* Returns the |ix|th element of |set|, where |ix| is zero-based. */
-HReg HRegSet__index ( const HRegSet* set, UInt ix ) {
- vassert(ix < set->regsUsed);
- return set->regs[ix];
-}
+struct _RRegSetIterator {
+ const RRegSet* set;
+ UInt nextIx; /* The next |set->bits| index to try */
+};
-/*---------------------------------------------------------*/
-/*--- Real register Universes. ---*/
-/*---------------------------------------------------------*/
+/* Create a new iterator. It can't be used until it is first __init'd. */
+RRegSetIterator* RRegSetIterator__new ( void )
+{
+ RRegSetIterator* iter = LibVEX_Alloc_inline(sizeof(RRegSetIterator));
+ vex_bzero(iter, sizeof(*iter));
+ return iter;
+}
-void RRegUniverse__init ( /*OUT*/RRegUniverse* univ )
+/* Initialise an iterator. */
+void RRegSetIterator__init ( /*OUT*/RRegSetIterator* iter,
+ const RRegSet* set )
{
- *univ = (RRegUniverse){};
- univ->size = 0;
- univ->allocable = 0;
- for (UInt i = 0; i < N_RREGUNIVERSE_REGS; i++) {
- univ->regs[i] = HReg_INVALID;
+ iter->set = set;
+ iter->nextIx = 0;
+ /* We're going to iterate only up as far as the Universe size, so
+ check that there are no elements above that. RRegSet__add and
+ __fromVec should ensure that is never the case, and there are no
+ other ways to add elements to a set. */
+ const RRegUniverse* univ = set->univ;
+ if (LIKELY(univ->size < 64)) {
+ vassert((set->bits >> univ->size) == 0);
+ } else {
+ vassert(univ->size == 64);
}
}
-void RRegUniverse__check_is_sane ( const RRegUniverse* univ )
+/* Get the next element from the set, or HReg_INVALID if there is
+ none. */
+HReg RRegSetIterator__next ( /*MOD*/RRegSetIterator* iter )
{
- /* Check Real-Register-Universe invariants. All of these are
- important. */
- vassert(univ->size > 0);
- vassert(univ->size <= N_RREGUNIVERSE_REGS);
- vassert(univ->allocable <= univ->size);
- for (UInt i = 0; i < univ->size; i++) {
- HReg reg = univ->regs[i];
- vassert(!hregIsInvalid(reg));
- vassert(!hregIsVirtual(reg));
- vassert(hregIndex(reg) == i);
- }
- for (UInt i = univ->size; i < N_RREGUNIVERSE_REGS; i++) {
- HReg reg = univ->regs[i];
- vassert(hregIsInvalid(reg));
+ const RRegSet* set = iter->set;
+ /* If this fails, it's possibly a sign that the __init call for
+ |iter| was missed. */
+ vassert(iter->set);
+
+ const RRegUniverse* univ = set->univ;
+ const UInt maxIx = univ->size;
+ vassert(iter->nextIx <= maxIx);
+ while (1) {
+ if (UNLIKELY(iter->nextIx >= maxIx)) {
+ return HReg_INVALID;
+ }
+ if (UNLIKELY(0ULL != (set->bits & (1ULL << iter->nextIx)))) {
+ return univ->regs[iter->nextIx++];
+ }
+ iter->nextIx++;
}
+ /*NOTREACHED*/
}
Modified: branches/NCODE/priv/host_generic_regs.h
==============================================================================
--- branches/NCODE/priv/host_generic_regs.h (original)
+++ branches/NCODE/priv/host_generic_regs.h Fri Apr 3 21:47:38 2015
@@ -182,58 +182,7 @@
/*---------------------------------------------------------*/
-/*--- Representing register sets ---*/
-/*---------------------------------------------------------*/
-
-/* This is a very un-clever representation, but we need
- to start somewhere. */
-
-#define N_HREG_SET 20
-
-typedef
- struct {
- HReg regs[N_HREG_SET];
- UInt regsUsed; /* 0 .. N_HREG_SET inclusive */
- }
- HRegSet;
-
-/* Print a register set, using the arch-specific register printing
- function |regPrinter| supplied. */
-extern void HRegSet__pp ( HRegSet* set, void (*regPrinter)(HReg) );
-
-/* Create a new, empty, set. */
-extern HRegSet* HRegSet__new ( void );
-
-/* Install elements from vec[0 .. nVec-1]. The previous contents of
- |dst| are lost. */
-extern void HRegSet__fromVec ( /*MOD*/HRegSet* dst,
- const HReg* vec, UInt nVec );
-
-/* Copy the contents of |regs| into |dst|. The previous contents of
- |dst| are lost. */
-extern void HRegSet__copy ( /*MOD*/HRegSet* dst, const HRegSet* regs );
-
-/* Add |reg| to |dst|. */
-extern void HRegSet__add ( /*MOD*/HRegSet* dst, HReg reg );
-
-/* Remove |reg| from |dst|. */
-extern void HRegSet__del ( /*MOD*/HRegSet* dst, HReg reg );
-
-/* Add |regs| to |dst|. */
-extern void HRegSet__plus ( /*MOD*/HRegSet* dst, const HRegSet* regs );
-
-/* Remove |regs| from |dst|. */
-extern void HRegSet__minus ( /*MOD*/HRegSet* dst, const HRegSet* regs );
-
-/* Returns the number of elements in |set|. */
-extern UInt HRegSet__size ( const HRegSet* set );
-
-/* Returns the |ix|th element of |set|, where |ix| is zero-based. */
-extern HReg HRegSet__index ( const HRegSet* set, UInt ix );
-
-
-/*---------------------------------------------------------*/
-/*--- Real register Universes. ---*/
+/*--- Real Register Universes ---*/
/*---------------------------------------------------------*/
/* A "Real Register Universe" is a read-only structure that contains
@@ -282,23 +231,68 @@
void RRegUniverse__check_is_sane ( const RRegUniverse* );
/* Print an RRegUniverse, for debugging. */
-void RRegUniverse__show ( const RRegUniverse* );
+void RRegUniverse__pp ( const RRegUniverse* );
/*---------------------------------------------------------*/
-/*--- Real register sets. ---*/
+/*--- Real Register Sets ---*/
/*---------------------------------------------------------*/
-/* Represents sets of real registers. |bitset| is interpreted in the
- context of |univ|. That is, each bit index |i| in |bitset|
- corresponds to the register |univ->regs[i]|. This relies
- entirely on the fact that N_RREGUNIVERSE_REGS <= 64. */
-typedef
- struct {
- ULong bitset;
- RRegUniverse* univ;
- }
- RRegSet;
+/* ABSTYPE */
+typedef struct _RRegSet RRegSet;
+
+/* Print a register set, using the arch-specific register printing
+ function |regPrinter| supplied. */
+extern void RRegSet__pp ( const RRegSet* set, void (*regPrinter)(HReg) );
+
+/* Create a new, empty, set. */
+extern RRegSet* RRegSet__new ( const RRegUniverse* univ );
+
+/* Return the RRegUniverse for a given RRegSet. */
+extern const RRegUniverse* RRegSet__getUniverse ( const RRegSet* );
+
+/* Install elements from vec[0 .. nVec-1]. The previous contents of
+ |dst| are lost. */
+extern void RRegSet__fromVec ( /*MOD*/RRegSet* dst,
+ const HReg* vec, UInt nVec );
+
+/* Copy the contents of |regs| into |dst|. The previous contents of
+ |dst| are lost. */
+extern void RRegSet__copy ( /*MOD*/RRegSet* dst, const RRegSet* regs );
+
+/* Add |reg| to |dst|. */
+extern void RRegSet__add ( /*MOD*/RRegSet* dst, HReg reg );
+
+/* Remove |reg| from |dst|. */
+extern void RRegSet__del ( /*MOD*/RRegSet* dst, HReg reg );
+
+/* Add |regs| to |dst|. */
+extern void RRegSet__plus ( /*MOD*/RRegSet* dst, const RRegSet* regs );
+
+/* Remove |regs| from |dst|. */
+extern void RRegSet__minus ( /*MOD*/RRegSet* dst, const RRegSet* regs );
+
+/* Returns the number of elements in |set|. */
+extern UInt RRegSet__card ( const RRegSet* set );
+
+
+/* Iterating over RRegSets. */
+/* ABSTYPE */
+typedef struct _RRegSetIterator RRegSetIterator;
+
+/* Create a new iterator. It must be initialised with __init before
+ it can be used in __next calls. This is checked in __next. */
+extern RRegSetIterator* RRegSetIterator__new ( void );
+
+/* Initialise an iterator for iterating over the given set. */
+extern void RRegSetIterator__init ( /*OUT*/RRegSetIterator* iter,
+ const RRegSet* set );
+
+/* Get the next element out of an iterator. If there are no more
+ elements, HReg_INVALID is returned. This pretty much implies (and
+ is checked) that the set construction routines above cannot be used
+ to insert HReg_INVALID into a set. */
+extern HReg RRegSetIterator__next ( /*MOD*/RRegSetIterator* );
/*---------------------------------------------------------*/
|