The Unix Heritage Society mailing list
 help / color / mirror / Atom feed
From: Jon Steinhart <jon@fourwinds.com>
To: TUHS main list <tuhs@minnie.tuhs.org>
Subject: Re: [TUHS] A Reiser tour de force
Date: Fri, 01 Apr 2022 10:26:15 -0700	[thread overview]
Message-ID: <202204011726.231HQFm03349496@darkstar.fourwinds.com> (raw)
In-Reply-To: <44FEFAE6-720F-4449-84DB-228B7A6C097C@kdbarto.org>

David Barto writes:
> 
>
>
> > On Apr 1, 2022, at 8:59 AM, Douglas McIlroy <douglas.mcilroy@dartmouth.edu> wrote:
> > 
> > The recent discussion about Research choosing BSD's paging over
> > Reiser-London's brought to mind a stunning program by Reiser that
> > Research did adopt.
> > 
> > A critical primitive in the Blit terminal was bitblt (block transfer
> > of a rectangular area). It was used ubiquitously, for example to
> > refresh data when window-stacking changed, to move data within a
> > window, or to pop up a menu.. The display memory was word-oriented, so
> > bitblt was fraught with niggling details about bit alignment and
> > overlap of source and destination. A general bitblt subroutine was a
> > rats' nest of conditionals--grossly inefficient for important special
> > cases like scrolling.
> > 
> > Bitblt got refined (i.e. elaborated) several times before Reiser did
> > away with it entirely. Instead he wrote a just-in-time generator of
> > optimal code. Thousands of distinct variants, which varied in size
> > from 16 to 72 bytes, could be produced by the same 400 lines of
> > assembler code.
> > 
> > Doug
>
> Does this exist for the rest of us to study?
>
> 	David

It's not insanely complicated by modern standards.  Without any knowledge
of other work, I did the same thing for a 68020 based graphics system where
the JIT code went into the I-cache and was amazingly fast for its day.

If I remember correctly, things started with an outer-loop test to see
if there were overlapping regions to determine whether to go forward
to backwards to avoid having the destination trash the source.

Then, there was an inner loop test for whether or not the left edge
was on a word boundary, the right edge was on a word boundary, or
whether or not both edges were inside of the same word.  Depending
on the results the generated inner loop code had left edge handling,
non-edge handling, and right edge handling code.

Finally, code was generated plugging in whatever was needed for the
op-code.

Maybe this is just a semantic nit, but to me this is just a better
implementation of bitblt, not doing away with it.

Jon

  reply	other threads:[~2022-04-01 18:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-01 15:59 Douglas McIlroy
2022-04-01 17:15 ` David Barto
2022-04-01 17:26   ` Jon Steinhart [this message]
2022-04-01 19:41     ` Steffen Nurpmeso
2022-04-01 21:29       ` Rob Pike
2022-04-01 21:31         ` Rob Pike
2022-04-01 21:43       ` Jon Steinhart
2022-04-03 11:22 Paul Ruizendaal via TUHS
2022-04-03 12:24 ` Rob Pike

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=202204011726.231HQFm03349496@darkstar.fourwinds.com \
    --to=jon@fourwinds.com \
    --cc=tuhs@minnie.tuhs.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).