From: Jonas Amoson <jonas.amoson@gmail.com>
To: 9front@9front.org
Subject: Re: [9front] Weird >>= operator behaviour in 5c/5l
Date: Wed, 20 Jan 2021 14:06:11 +0200 [thread overview]
Message-ID: <CAF46DJ5-wnG7D4+xAC_iFmpzS4RXf+P4XGb=FSLKddjNVYZ5ug@mail.gmail.com> (raw)
In-Reply-To: <E8E4EF1A6057EBA2A06B9C17E6E3149C@eigenstate.org>
Great!
I have not tested your patch extensively yet, but Netsurf now runs
without graphical glitches on 32-bit arm on my old Rpi terminal.
Jonas
On Wed, 20 Jan 2021 at 08:39, <ori@eigenstate.org> wrote:
>
> Quoth ori@eigenstate.org:
> > Quoth Jonas Amoson <jonas.amoson@gmail.com>:
> > > Left shifting by 32 instead of 0 does explain my
> > > result, and seam indeed to be the real bug.
> > >
> > > Regarding optimising out shifts where the number
> > > of steps is zero: it already does that when using the
> > > pattern x = x >> 0; but it doesn't for x >>= 0;
> > >
> > > Thanks,
> > > Jonas
> > >
> > > On Mon, 18 Jan 2021 at 07:50, <ori@eigenstate.org> wrote:
> > > >
> > > > Quoth Noam Preil <noam@pixelhero.dev>:
> > > > > It could just be architecture specific behavior.
> > > > >
> > > >
> > > > It's a bug. Two, actually.
> > > >
> > > > 1) a shift of zero should be optimized out by
> > > > the compiler; cinap has a change for this in
> > > > the works already. This fix should hide the
> > > > second bug.
> > > >
> > > > 2) a shift by a literal zero is miscompiled by
> > > > the assembler into a shift by 32, because
> > > > of a missed special case in the instruction.
> > > > encoding. I'm working on fixing the assembler.
> >
> > I think this corrects the linker.
> >
> > diff -r 01125acb5565 sys/src/cmd/5l/asm.c
> > --- a/sys/src/cmd/5l/asm.c Tue Jan 19 19:56:38 2021 -0800
> > +++ b/sys/src/cmd/5l/asm.c Tue Jan 19 21:56:58 2021 -0800
> > @@ -785,7 +785,7 @@
> >
> > case 8: /* sll $c,[R],R -> mov (R<<$c),R */
> > aclass(&p->from);
> > - o1 = oprrr(p->as, p->scond);
> > + o1 = oprrr((instoffset == 0) ? ASLL : p->as, p->scond);
> > r = p->reg;
> > if(r == NREG)
> > r = p->to.reg;
> >
> > The PDF version of the arm architecture manual
> > I found implied that this is the correct way
> > to do it, and the official arm website is so
> > bad that I can't figure out if it contradicts
> > the PDF from some academic's website.
> >
> > Only lightly tested, not sure if I have any
> > edge cases.
> >
> I like this version more.
>
> diff -r 01125acb5565 sys/src/cmd/5l/asm.c
> --- a/sys/src/cmd/5l/asm.c Tue Jan 19 19:56:38 2021 -0800
> +++ b/sys/src/cmd/5l/asm.c Tue Jan 19 22:12:05 2021 -0800
> @@ -789,6 +789,12 @@
> r = p->reg;
> if(r == NREG)
> r = p->to.reg;
> + /*
> + * R>>32 is encoded as R>>0, so flip to the
> + * equivalent R<<0.
> + */
> + if(instoffset == 0)
> + o1 &= ~(1<<5);
> o1 |= r;
> o1 |= (instoffset&31) << 7;
> o1 |= p->to.reg << 12;
>
next prev parent reply other threads:[~2021-01-20 12:35 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-17 21:36 Jonas Amoson
2021-01-18 4:05 ` Noam Preil
2021-01-18 5:20 ` ori
2021-01-18 16:11 ` Jonas Amoson
2021-01-20 5:59 ` ori
2021-01-20 6:12 ` ori
2021-01-20 12:06 ` Jonas Amoson [this message]
2021-01-20 22:11 ` Anthony Martin
2021-01-20 23:39 ` ori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAF46DJ5-wnG7D4+xAC_iFmpzS4RXf+P4XGb=FSLKddjNVYZ5ug@mail.gmail.com' \
--to=jonas.amoson@gmail.com \
--cc=9front@9front.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).