Rocksolid Light

Welcome to novaBBS (click a section below)

mail  files  register  newsreader  groups  login

Message-ID:  

The Universe is populated by stable things. -- Richard Dawkins


devel / comp.arch / Sequencer vs microcode

SubjectAuthor
* Sequencer vs microcodeMarcus
+* Re: Sequencer vs microcodewinden
|`* Re: Sequencer vs microcodeMitchAlsup
| `- Re: Sequencer vs microcodeMitchAlsup
`* Re: Sequencer vs microcodeMitchAlsup
 `* Re: Sequencer vs microcodeMarcus
  `* Re: Sequencer vs microcodeBGB
   `* Re: Sequencer vs microcodeMitchAlsup
    +* Re: Sequencer vs microcoderobf...@gmail.com
    |+* Re: Sequencer vs microcodeMarcus
    ||`* Re: Sequencer vs microcoderobf...@gmail.com
    || `* Re: Sequencer vs microcodeMitchAlsup
    ||  `* Re: Sequencer vs microcodeEricP
    ||   +- Re: Sequencer vs microcodeAnton Ertl
    ||   `* Re: Sequencer vs microcodeMitchAlsup
    ||    +* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |+- Re: Sequencer vs microcodeStephen Fuld
    ||    |`* Re: Sequencer vs microcodeMitchAlsup
    ||    | `* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |  `* Re: Sequencer vs microcodeStefan Monnier
    ||    |   +* Re: Sequencer vs microcodeThomas Koenig
    ||    |   |`* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |   | `- Re: Sequencer vs microcodeAnton Ertl
    ||    |   +* Re: Sequencer vs microcodeIvan Godard
    ||    |   |`* Re: Sequencer vs microcodeStefan Monnier
    ||    |   | `* Re: Sequencer vs microcodeStephen Fuld
    ||    |   |  `* Re: Sequencer vs microcodeStefan Monnier
    ||    |   |   +* Re: Sequencer vs microcodeMitchAlsup
    ||    |   |   |+* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |   |   ||+- Re: Sequencer vs microcoderobf...@gmail.com
    ||    |   |   ||+* Re: Sequencer vs microcodeStefan Monnier
    ||    |   |   |||`- Re: Sequencer vs microcodeEricP
    ||    |   |   ||+* Re: Sequencer vs microcodeEricP
    ||    |   |   |||`* Re: Sequencer vs microcodeStefan Monnier
    ||    |   |   ||| `* Re: Sequencer vs microcodeEricP
    ||    |   |   |||  `* Re: Sequencer vs microcodeStefan Monnier
    ||    |   |   |||   `- Re: Sequencer vs microcodeEricP
    ||    |   |   ||+- Exec (was: Sequencer vs microcode)Anton Ertl
    ||    |   |   ||`- Re: Sequencer vs microcodeMitchAlsup
    ||    |   |   |`* Re: Sequencer vs microcodeAnton Ertl
    ||    |   |   | `* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |   |   |  `- Re: Sequencer vs microcodeMitchAlsup
    ||    |   |   +- Re: Sequencer vs microcodeThomas Koenig
    ||    |   |   `* Re: Sequencer vs microcodeMarcus
    ||    |   |    `* Re: Sequencer vs microcoderobf...@gmail.com
    ||    |   |     +* Exec (was: Sequencer vs microcode)Anton Ertl
    ||    |   |     |`* Re: ExecStefan Monnier
    ||    |   |     | `* Re: ExecAnton Ertl
    ||    |   |     |  `* Re: Execrobf...@gmail.com
    ||    |   |     |   `* Re: ExecMitchAlsup
    ||    |   |     |    `* Re: ExecStefan Monnier
    ||    |   |     |     +* Re: ExecMitchAlsup
    ||    |   |     |     |+* Re: Execrobf...@gmail.com
    ||    |   |     |     ||`- Re: ExecMitchAlsup
    ||    |   |     |     |`- Re: ExecStefan Monnier
    ||    |   |     |     `* Re: ExecAnton Ertl
    ||    |   |     |      `- Re: ExecStefan Monnier
    ||    |   |     `- Re: Sequencer vs microcodeStefan Monnier
    ||    |   `* Re: Sequencer vs microcodeQuadibloc
    ||    |    +* Re: Sequencer vs microcodeQuadibloc
    ||    |    |+- Re: Sequencer vs microcodeQuadibloc
    ||    |    |+* Re: Sequencer vs microcodeMitchAlsup
    ||    |    ||`- Re: EX instructon, Sequencer vs microcodeJohn Levine
    ||    |    |+* Re: Sequencer vs microcodeStephen Fuld
    ||    |    ||+- Re: Sequencer vs microcodeQuadibloc
    ||    |    ||`* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    || `* Re: Execute, not Sequencer vs microcodeMitchAlsup
    ||    |    ||  `* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||   `* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||    `* Re: Execute, not Sequencer vs microcodeMitchAlsup
    ||    |    ||     +* Re: Execute, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     |`* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     | `* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |  `* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |   +* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |   |`- Re: transistors, was Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |   +* Re: Execute, not Sequencer vs microcodeMitchAlsup
    ||    |    ||     |   |`* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |   | +* Re: Execute, not Sequencer vs microcodeThomas Koenig
    ||    |    ||     |   | |+* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |   | ||`- Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |   | |`* Re: Execute, not Sequencer vs microcodeIvan Godard
    ||    |    ||     |   | | +* Re: Execute, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     |   | | |`* Re: Execute, not Sequencer vs microcodeIvan Godard
    ||    |    ||     |   | | | `* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |   | | |  `- Re: Execute, not Sequencer vs microcodeThomas Koenig
    ||    |    ||     |   | | `* Re: 7094, was Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |   | |  `- Re: 7094, was Execute, not Sequencer vs microcodeBrian G. Lucas
    ||    |    ||     |   | `- Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |   `* Re: Execute, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     |    `* Re: Execute, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |     +* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |     |+* Re: Execute, not Sequencer vs microcodeThomas Koenig
    ||    |    ||     |     ||+- Re: Execute, not Sequencer vs microcodeMitchAlsup
    ||    |    ||     |     ||`* Re: Execute, not Sequencer vs microcodeQuadibloc
    ||    |    ||     |     || `- Re: Execute, not Sequencer vs microcodeIvan Godard
    ||    |    ||     |     |`* Re: Execute and IBM history, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |     | `* Re: Execute and IBM history, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     |     |  +* Re: Execute and IBM history, not Sequencer vs microcodeAnne & Lynn Wheeler
    ||    |    ||     |     |  |+* Re: Execute and IBM history, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     |     |  ||`- Re: Execute and IBM history, not Sequencer vs microcodeAnne & Lynn Wheeler
    ||    |    ||     |     |  |`* Re: Execute and IBM history, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |     |  `* Re: Execute and IBM history, not Sequencer vs microcodeJohn Levine
    ||    |    ||     |     `* Re: Execute, not Sequencer vs microcodeStephen Fuld
    ||    |    ||     `- Re: Execute, not Sequencer vs microcodeIvan Godard
    ||    |    |`- Re: Sequencer vs microcodeantispam
    ||    |    `* Re: Sequencer vs microcodeStefan Monnier
    ||    `* Re: Sequencer vs microcodeKent Dickey
    |`- Re: Sequencer vs microcodeMitchAlsup
    `- Re: Sequencer vs microcodeBGB

Pages:1234567
Sequencer vs microcode

<sb1abl$ps8$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18047&group=comp.arch#18047

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: m.del...@this.bitsnbites.eu (Marcus)
Newsgroups: comp.arch
Subject: Sequencer vs microcode
Date: Thu, 24 Jun 2021 08:56:52 +0200
Organization: A noiseless patient Spider
Lines: 32
Message-ID: <sb1abl$ps8$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Thu, 24 Jun 2021 06:56:53 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="a8971b92101ed60660ce41dffd73865a";
logging-data="26504"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+1nKQNtTzIS1G7/IYJ4fFaA1/OL6gaA4k="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:8eLt/KhbbXMJH+iPJ71N7GI1MWQ=
Content-Language: en-US
X-Mozilla-News-Host: snews://news.eternal-september.org:563
 by: Marcus - Thu, 24 Jun 2021 06:56 UTC

I guess this is mostly a question for Mitch...

I have seen the terms "sequencer" and "microcode" being used, and while
I think that I know what microcode is, I'm not sure what the definition
of a sequencer is.

AFAIK microcode (at least in the context of a traditional multi-CPI
machine) sits in the decoder and pumps out "micro instructions" from
a microcode ROM - often more than one micro instruction per instruction.
I guess that in modern CISC implementations (e.g. x86) the microcode is
part of the translation front end, and probably only as an optional part
to cover for the cases that the fast-path translators can not deal with.

Anyway... How about a sequencer? My understanding is that it is a
simpler variant that does not need a microcode ROM - e.g. it could be an
FSM or just a counter, right?

For instance could the vector control unit in my scalar MRISC32-A1
implementation, which is basically a counter that stalls the front end
while iterating over vector register elements, be considered to be a
sequencer? How about the control unit for an iterative divider?

When talking about using a sequencer to implement My 66000 instructions
such as ENTER, EXIT and MM - where would those sequencers typically be
located? E.g. in decode or execute?

Would they output a sequence of (internal) instructions (which I assume
would be the case if they sit in the decoder), or would they act more
like controllers (which I assume would be the case if they sit in the
EU:s)?

/Marcus

Re: Sequencer vs microcode

<3d56ae5e-a56c-4e9e-9941-1145cdda0b4en@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18049&group=comp.arch#18049

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a37:c447:: with SMTP id h7mr4496572qkm.63.1624524343860;
Thu, 24 Jun 2021 01:45:43 -0700 (PDT)
X-Received: by 2002:aca:c7d8:: with SMTP id x207mr1144936oif.175.1624524343600;
Thu, 24 Jun 2021 01:45:43 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Thu, 24 Jun 2021 01:45:43 -0700 (PDT)
In-Reply-To: <sb1abl$ps8$1@dont-email.me>
Injection-Info: google-groups.googlegroups.com; posting-host=83.39.221.67; posting-account=g5fCewkAAAANGmgxC0JS6CCKkT_VjzSI
NNTP-Posting-Host: 83.39.221.67
References: <sb1abl$ps8$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3d56ae5e-a56c-4e9e-9941-1145cdda0b4en@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: winden...@gmail.com (winden)
Injection-Date: Thu, 24 Jun 2021 08:45:43 +0000
Content-Type: text/plain; charset="UTF-8"
 by: winden - Thu, 24 Jun 2021 08:45 UTC

On Thursday, June 24, 2021 at 8:56:56 AM UTC+2, Marcus wrote:
> I guess this is mostly a question for Mitch...
>
> I have seen the terms "sequencer" and "microcode" being used, and while
> I think that I know what microcode is, I'm not sure what the definition
> of a sequencer is.
>
> AFAIK microcode (at least in the context of a traditional multi-CPI
> machine) sits in the decoder and pumps out "micro instructions" from
> a microcode ROM - often more than one micro instruction per instruction.
> I guess that in modern CISC implementations (e.g. x86) the microcode is
> part of the translation front end, and probably only as an optional part
> to cover for the cases that the fast-path translators can not deal with.
>
> Anyway... How about a sequencer? My understanding is that it is a
> simpler variant that does not need a microcode ROM - e.g. it could be an
> FSM or just a counter, right?
>
> For instance could the vector control unit in my scalar MRISC32-A1
> implementation, which is basically a counter that stalls the front end
> while iterating over vector register elements, be considered to be a
> sequencer? How about the control unit for an iterative divider?

I'd could all these as sequencer-driven, because the circuit can be done with
just <100 gates configured for the exact formulas you need.

> When talking about using a sequencer to implement My 66000 instructions
> such as ENTER, EXIT and MM - where would those sequencers typically be
> located? E.g. in decode or execute?
>
> Would they output a sequence of (internal) instructions (which I assume
> would be the case if they sit in the decoder), or would they act more
> like controllers (which I assume would be the case if they sit in the
> EU:s)?

I guess I've got a similar question:
when a "most simple op" is translated from one ISA-op to one micro-op,
or "almost simple op" goes one ISA-op to two micro-op....
are these micro-op templates stitched using logic,
or is there some template in a small ROM so that you can lookup + fill the blanks
(eg: copy the register number as-is in bits 20..25) ?

> /Marcus

Re: Sequencer vs microcode

<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18052&group=comp.arch#18052

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ac8:524e:: with SMTP id y14mr2837867qtn.140.1624552850210;
Thu, 24 Jun 2021 09:40:50 -0700 (PDT)
X-Received: by 2002:a05:6830:1bf7:: with SMTP id k23mr5736528otb.206.1624552844958;
Thu, 24 Jun 2021 09:40:44 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Thu, 24 Jun 2021 09:40:44 -0700 (PDT)
In-Reply-To: <sb1abl$ps8$1@dont-email.me>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:ad16:43cb:bd70:119d;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:ad16:43cb:bd70:119d
References: <sb1abl$ps8$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Thu, 24 Jun 2021 16:40:50 +0000
Content-Type: text/plain; charset="UTF-8"
 by: MitchAlsup - Thu, 24 Jun 2021 16:40 UTC

On Thursday, June 24, 2021 at 1:56:56 AM UTC-5, Marcus wrote:
> I guess this is mostly a question for Mitch...
>
> I have seen the terms "sequencer" and "microcode" being used, and while
> I think that I know what microcode is, I'm not sure what the definition
> of a sequencer is.
>
> AFAIK microcode (at least in the context of a traditional multi-CPI
> machine) sits in the decoder and pumps out "micro instructions" from
> a microcode ROM - often more than one micro instruction per instruction.
<
There are function units which have a myriad of sequences to run and they
might be implemented with microcode, too. You are restricting microcode
to the "pipeline control" (Decoder through Writeback).
<
But microcode requires a ROM that is programmable after it is designed
and laid out. Often with a few additional words that are programmable
even so far as after power on.
<
> I guess that in modern CISC implementations (e.g. x86) the microcode is
> part of the translation front end, and probably only as an optional part
> to cover for the cases that the fast-path translators can not deal with.
>
> Anyway... How about a sequencer? My understanding is that it is a
> simpler variant that does not need a microcode ROM - e.g. it could be an
> FSM or just a counter, right?
<
A sequencer is a machine that receives various inputs and asserts a sequence
of control lines that cause the HW to perform "stuff" in certain sequences.
Early IRCS machiens would have a single sequencer "run" the pipeline.
Some RISC machines had a sequencer that "ran" the FP ADD unit (FADD, FCMP,
FDIV,...) or "ran" the FP MUL unit (FMUL, IMUL, UMUL)
<
Many people have a mistaken belief that a sequencer necessarily has a single
point of control, this is not correct, a sequencer for PDP-11 will have at least
4 sequencer within the "sequencer" (en-the-large) 1 of these sequence out
Fetch requests, 2 of these sequence out address modes, and one sequences
out the data path. {This is why HW is not SW and never can be}
>
> For instance could the vector control unit in my scalar MRISC32-A1
> implementation, which is basically a counter that stalls the front end
> while iterating over vector register elements, be considered to be a
> sequencer? How about the control unit for an iterative divider?
<
Both of these are sequencers, and a "sequencer" can be implemented in
several ways, gates and flip-flops at one end of the spectrum, microcode
at the other end.
>
> When talking about using a sequencer to implement My 66000 instructions
> such as ENTER, EXIT and MM - where would those sequencers typically be
> located? E.g. in decode or execute?
<
AGEN would have these sequencers, after all, most of what they do is to
spew addresses at the cache. The "math" the ENTER and EXIT perform
is easily a subset of AGEN arithmetic.
>
> Would they output a sequence of (internal) instructions (which I assume
> would be the case if they sit in the decoder), or would they act more
> like controllers (which I assume would be the case if they sit in the
> EU:s)?
<
Its more like the instruction shows up (ENTER) and AGEN spews out cache
addresses and register read requests to stream registers onto the stack
and finishes with stores to SP and optionally to FP.
<
The front end sees 1 instruction and then the AGEN unit is busy until it
is no longer busy. The front end is allowed to start executing instructions
that are not dependent on the register to stack movement and not needing
the AGEN unit.
>
> /Marcus

Re: Sequencer vs microcode

<68ae61e2-3147-4457-9c1a-98afbbe45644n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18053&group=comp.arch#18053

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a05:6214:1852:: with SMTP id d18mr5996721qvy.21.1624553148766;
Thu, 24 Jun 2021 09:45:48 -0700 (PDT)
X-Received: by 2002:a05:6830:33ea:: with SMTP id i10mr5352020otu.342.1624553148571;
Thu, 24 Jun 2021 09:45:48 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!news.snarked.org!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Thu, 24 Jun 2021 09:45:48 -0700 (PDT)
In-Reply-To: <3d56ae5e-a56c-4e9e-9941-1145cdda0b4en@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:ad16:43cb:bd70:119d;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:ad16:43cb:bd70:119d
References: <sb1abl$ps8$1@dont-email.me> <3d56ae5e-a56c-4e9e-9941-1145cdda0b4en@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <68ae61e2-3147-4457-9c1a-98afbbe45644n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Thu, 24 Jun 2021 16:45:48 +0000
Content-Type: text/plain; charset="UTF-8"
Lines: 54
 by: MitchAlsup - Thu, 24 Jun 2021 16:45 UTC

On Thursday, June 24, 2021 at 3:45:45 AM UTC-5, winden wrote:
> On Thursday, June 24, 2021 at 8:56:56 AM UTC+2, Marcus wrote:
> > I guess this is mostly a question for Mitch...
> >
> > I have seen the terms "sequencer" and "microcode" being used, and while
> > I think that I know what microcode is, I'm not sure what the definition
> > of a sequencer is.
> >
> > AFAIK microcode (at least in the context of a traditional multi-CPI
> > machine) sits in the decoder and pumps out "micro instructions" from
> > a microcode ROM - often more than one micro instruction per instruction.
> > I guess that in modern CISC implementations (e.g. x86) the microcode is
> > part of the translation front end, and probably only as an optional part
> > to cover for the cases that the fast-path translators can not deal with.
> >
> > Anyway... How about a sequencer? My understanding is that it is a
> > simpler variant that does not need a microcode ROM - e.g. it could be an
> > FSM or just a counter, right?
> >
> > For instance could the vector control unit in my scalar MRISC32-A1
> > implementation, which is basically a counter that stalls the front end
> > while iterating over vector register elements, be considered to be a
> > sequencer? How about the control unit for an iterative divider?
<
> I'd could all these as sequencer-driven, because the circuit can be done with
> just <100 gates configured for the exact formulas you need.
<
The CRAY machines used a shift register sequencer. The decoder saw a
vector instruction and then searched for a place to set 64 active bits in
a function unit sequencer. Then, once issued, the sequencer is simply
"advance the shift register" until it is empty.
<
> > When talking about using a sequencer to implement My 66000 instructions
> > such as ENTER, EXIT and MM - where would those sequencers typically be
> > located? E.g. in decode or execute?
> >
> > Would they output a sequence of (internal) instructions (which I assume
> > would be the case if they sit in the decoder), or would they act more
> > like controllers (which I assume would be the case if they sit in the
> > EU:s)?
<
> I guess I've got a similar question:
> when a "most simple op" is translated from one ISA-op to one micro-op,
> or "almost simple op" goes one ISA-op to two micro-op....
> are these micro-op templates stitched using logic,
> or is there some template in a small ROM so that you can lookup + fill the blanks
> (eg: copy the register number as-is in bits 20..25) ?
<
I would no longer do it this way--I would keep the ops=instruction relationship
and build reservation stations that fire more than once and fire at the FU that
can provide the required service. So a LD-OP-ST would fire 3 times, once to
LD, once to calculate, and once to store (with already known address).
>
>
> > /Marcus

Re: Sequencer vs microcode

<9d5592fc-a62c-45a3-8b1e-d24884bab15dn@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18058&group=comp.arch#18058

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a0c:e18c:: with SMTP id p12mr7057003qvl.54.1624562836104;
Thu, 24 Jun 2021 12:27:16 -0700 (PDT)
X-Received: by 2002:aca:3d56:: with SMTP id k83mr2821584oia.110.1624562835859;
Thu, 24 Jun 2021 12:27:15 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder6.news.weretis.net!news.snarked.org!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Thu, 24 Jun 2021 12:27:15 -0700 (PDT)
In-Reply-To: <68ae61e2-3147-4457-9c1a-98afbbe45644n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:ad16:43cb:bd70:119d;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:ad16:43cb:bd70:119d
References: <sb1abl$ps8$1@dont-email.me> <3d56ae5e-a56c-4e9e-9941-1145cdda0b4en@googlegroups.com>
<68ae61e2-3147-4457-9c1a-98afbbe45644n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <9d5592fc-a62c-45a3-8b1e-d24884bab15dn@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Thu, 24 Jun 2021 19:27:16 +0000
Content-Type: text/plain; charset="UTF-8"
Lines: 60
 by: MitchAlsup - Thu, 24 Jun 2021 19:27 UTC

On Thursday, June 24, 2021 at 11:45:49 AM UTC-5, MitchAlsup wrote:
> On Thursday, June 24, 2021 at 3:45:45 AM UTC-5, winden wrote:
> > On Thursday, June 24, 2021 at 8:56:56 AM UTC+2, Marcus wrote:
> > > I guess this is mostly a question for Mitch...
> > >
> > > I have seen the terms "sequencer" and "microcode" being used, and while
> > > I think that I know what microcode is, I'm not sure what the definition
> > > of a sequencer is.
> > >
> > > AFAIK microcode (at least in the context of a traditional multi-CPI
> > > machine) sits in the decoder and pumps out "micro instructions" from
> > > a microcode ROM - often more than one micro instruction per instruction.
> > > I guess that in modern CISC implementations (e.g. x86) the microcode is
> > > part of the translation front end, and probably only as an optional part
> > > to cover for the cases that the fast-path translators can not deal with.
> > >
> > > Anyway... How about a sequencer? My understanding is that it is a
> > > simpler variant that does not need a microcode ROM - e.g. it could be an
> > > FSM or just a counter, right?
> > >
> > > For instance could the vector control unit in my scalar MRISC32-A1
> > > implementation, which is basically a counter that stalls the front end
> > > while iterating over vector register elements, be considered to be a
> > > sequencer? How about the control unit for an iterative divider?
> <
> > I'd could all these as sequencer-driven, because the circuit can be done with
> > just <100 gates configured for the exact formulas you need.
> <
> The CRAY machines used a shift register sequencer. The decoder saw a
> vector instruction and then searched for a place to set 64 active bits in
> a function unit sequencer. Then, once issued, the sequencer is simply
> "advance the shift register" until it is empty.
> <
> > > When talking about using a sequencer to implement My 66000 instructions
> > > such as ENTER, EXIT and MM - where would those sequencers typically be
> > > located? E.g. in decode or execute?
> > >
> > > Would they output a sequence of (internal) instructions (which I assume
> > > would be the case if they sit in the decoder), or would they act more
> > > like controllers (which I assume would be the case if they sit in the
> > > EU:s)?
> <
> > I guess I've got a similar question:
> > when a "most simple op" is translated from one ISA-op to one micro-op,
> > or "almost simple op" goes one ISA-op to two micro-op....
> > are these micro-op templates stitched using logic,
> > or is there some template in a small ROM so that you can lookup + fill the blanks
> > (eg: copy the register number as-is in bits 20..25) ?
> <
> I would no longer do it this way--I would keep the ops=instruction relationship
> and build reservation stations that fire more than once and fire at the FU that
> can provide the required service. So a LD-OP-ST would fire 3 times, once to
> LD, once to calculate, and once to store (with already known address).
<
Of course, doing it with multi-fire reservation stations almost requires one to
have the FP registers and the non-FP registers topologically adjacent to each
other so one can LD-OP-ST floating point arithmetic as well as integer.
<
> >
> >
> > > /Marcus

Re: Sequencer vs microcode

<sb553t$kta$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18067&group=comp.arch#18067

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: m.del...@this.bitsnbites.eu (Marcus)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Fri, 25 Jun 2021 19:51:57 +0200
Organization: A noiseless patient Spider
Lines: 75
Message-ID: <sb553t$kta$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 25 Jun 2021 17:51:57 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="17364944429f17f6a5c18e770931bf5f";
logging-data="21418"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18FfR/cTRzImqkyCa0A3lT5Wvm9ddGly+s="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:nu0Gf2KLb/WrenU5+WBQ/ezjFiM=
In-Reply-To: <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
Content-Language: en-US
 by: Marcus - Fri, 25 Jun 2021 17:51 UTC

On 2021-06-24, MitchAlsup wrote:
> On Thursday, June 24, 2021 at 1:56:56 AM UTC-5, Marcus wrote:
>> I guess this is mostly a question for Mitch...
>>
>> I have seen the terms "sequencer" and "microcode" being used, and while
>> I think that I know what microcode is, I'm not sure what the definition
>> of a sequencer is.
>>
>> AFAIK microcode (at least in the context of a traditional multi-CPI
>> machine) sits in the decoder and pumps out "micro instructions" from
>> a microcode ROM - often more than one micro instruction per instruction.
> <
> There are function units which have a myriad of sequences to run and they
> might be implemented with microcode, too. You are restricting microcode
> to the "pipeline control" (Decoder through Writeback).
> <
> But microcode requires a ROM that is programmable after it is designed
> and laid out. Often with a few additional words that are programmable
> even so far as after power on.
> <
>> I guess that in modern CISC implementations (e.g. x86) the microcode is
>> part of the translation front end, and probably only as an optional part
>> to cover for the cases that the fast-path translators can not deal with.
>>
>> Anyway... How about a sequencer? My understanding is that it is a
>> simpler variant that does not need a microcode ROM - e.g. it could be an
>> FSM or just a counter, right?
> <
> A sequencer is a machine that receives various inputs and asserts a sequence
> of control lines that cause the HW to perform "stuff" in certain sequences.
> Early IRCS machiens would have a single sequencer "run" the pipeline.
> Some RISC machines had a sequencer that "ran" the FP ADD unit (FADD, FCMP,
> FDIV,...) or "ran" the FP MUL unit (FMUL, IMUL, UMUL)
> <
> Many people have a mistaken belief that a sequencer necessarily has a single
> point of control, this is not correct, a sequencer for PDP-11 will have at least
> 4 sequencer within the "sequencer" (en-the-large) 1 of these sequence out
> Fetch requests, 2 of these sequence out address modes, and one sequences
> out the data path. {This is why HW is not SW and never can be}
>>
>> For instance could the vector control unit in my scalar MRISC32-A1
>> implementation, which is basically a counter that stalls the front end
>> while iterating over vector register elements, be considered to be a
>> sequencer? How about the control unit for an iterative divider?
> <
> Both of these are sequencers, and a "sequencer" can be implemented in
> several ways, gates and flip-flops at one end of the spectrum, microcode
> at the other end.
>>
>> When talking about using a sequencer to implement My 66000 instructions
>> such as ENTER, EXIT and MM - where would those sequencers typically be
>> located? E.g. in decode or execute?
> <
> AGEN would have these sequencers, after all, most of what they do is to
> spew addresses at the cache. The "math" the ENTER and EXIT perform
> is easily a subset of AGEN arithmetic.
>>
>> Would they output a sequence of (internal) instructions (which I assume
>> would be the case if they sit in the decoder), or would they act more
>> like controllers (which I assume would be the case if they sit in the
>> EU:s)?
> <
> Its more like the instruction shows up (ENTER) and AGEN spews out cache
> addresses and register read requests to stream registers onto the stack
> and finishes with stores to SP and optionally to FP.
> <
> The front end sees 1 instruction and then the AGEN unit is busy until it
> is no longer busy. The front end is allowed to start executing instructions
> that are not dependent on the register to stack movement and not needing
> the AGEN unit.

Thanks for taking the time to explain! That cleared things up a great
deal for me.

/Marcus

Re: Sequencer vs microcode

<sb5a40$o97$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18069&group=comp.arch#18069

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: cr88...@gmail.com (BGB)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Fri, 25 Jun 2021 14:14:55 -0500
Organization: A noiseless patient Spider
Lines: 137
Message-ID: <sb5a40$o97$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 25 Jun 2021 19:17:21 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="626d11ff145bb4e2c22220307f2daac8";
logging-data="24871"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18RRsPuWhpMhm8wiRaM/c/k"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:tJ/WS4IyahQLu5E1PavA2dYwd7Q=
In-Reply-To: <sb553t$kta$1@dont-email.me>
Content-Language: en-US
 by: BGB - Fri, 25 Jun 2021 19:14 UTC

On 6/25/2021 12:51 PM, Marcus wrote:
> On 2021-06-24, MitchAlsup wrote:
>> On Thursday, June 24, 2021 at 1:56:56 AM UTC-5, Marcus wrote:
>>> I guess this is mostly a question for Mitch...
>>>
>>> I have seen the terms "sequencer" and "microcode" being used, and while
>>> I think that I know what microcode is, I'm not sure what the definition
>>> of a sequencer is.
>>>
>>> AFAIK microcode (at least in the context of a traditional multi-CPI
>>> machine) sits in the decoder and pumps out "micro instructions" from
>>> a microcode ROM - often more than one micro instruction per instruction.
>> <
>> There are function units which have a myriad of sequences to run and they
>> might be implemented with microcode, too. You are restricting microcode
>> to the "pipeline control" (Decoder through Writeback).
>> <
>> But microcode requires a ROM that is programmable after it is designed
>> and laid out. Often with a few additional words that are programmable
>> even so far as after power on.
>> <
>>> I guess that in modern CISC implementations (e.g. x86) the microcode is
>>> part of the translation front end, and probably only as an optional part
>>> to cover for the cases that the fast-path translators can not deal with.
>>>
>>> Anyway... How about a sequencer? My understanding is that it is a
>>> simpler variant that does not need a microcode ROM - e.g. it could be an
>>> FSM or just a counter, right?
>> <
>> A sequencer is a machine that receives various inputs and asserts a
>> sequence
>> of control lines that cause the HW to perform "stuff" in certain
>> sequences.
>> Early IRCS machiens would have a single sequencer "run" the pipeline.
>> Some RISC machines had a sequencer that "ran" the FP ADD unit (FADD,
>> FCMP,
>> FDIV,...) or "ran" the FP MUL unit (FMUL, IMUL, UMUL)
>> <
>> Many people have a mistaken belief that a sequencer necessarily has a
>> single
>> point of control, this is not correct, a sequencer for PDP-11 will
>> have at least
>> 4 sequencer within the "sequencer" (en-the-large) 1 of these sequence out
>> Fetch requests, 2 of these sequence out address modes, and one sequences
>> out the data path. {This is why HW is not SW and never can be}
>>>
>>> For instance could the vector control unit in my scalar MRISC32-A1
>>> implementation, which is basically a counter that stalls the front end
>>> while iterating over vector register elements, be considered to be a
>>> sequencer? How about the control unit for an iterative divider?
>> <
>> Both of these are sequencers, and a "sequencer" can be implemented in
>> several ways, gates and flip-flops at one end of the spectrum, microcode
>> at the other end.
>>>
>>> When talking about using a sequencer to implement My 66000 instructions
>>> such as ENTER, EXIT and MM - where would those sequencers typically be
>>> located? E.g. in decode or execute?
>> <
>> AGEN would have these sequencers, after all, most of what they do is to
>> spew addresses at the cache. The "math" the ENTER and EXIT perform
>> is easily a subset of AGEN arithmetic.
>>>
>>> Would they output a sequence of (internal) instructions (which I assume
>>> would be the case if they sit in the decoder), or would they act more
>>> like controllers (which I assume would be the case if they sit in the
>>> EU:s)?
>> <
>> Its more like the instruction shows up (ENTER) and AGEN spews out cache
>> addresses and register read requests to stream registers onto the stack
>> and finishes with stores to SP and optionally to FP.
>> <
>> The front end sees 1 instruction and then the AGEN unit is busy until it
>> is no longer busy. The front end is allowed to start executing
>> instructions
>> that are not dependent on the register to stack movement and not needing
>> the AGEN unit.
>
> Thanks for taking the time to explain! That cleared things up a great
> deal for me.
>

I had previously considered possibly adding such a "sequencer" to BJX2,
which could have allowed a few operations which can't currently be done
via a single operation; or possibly allow "MOV.X" operations on a 1-wide
core, ...

This would likely involve adding another split and stall signal to the
pipeline, which can stall IF and ID1 (Input Side), but allow ID1 to emit
new ops, and ID2 and the EX stages to continue on as normal.

Hadn't done so yet, as it seems like a bit of added cost and complexity.

Or maybe even a microcode ROM, but this seems like a lot of extra
complexity. Could also need banked registers, or reserving that certain
registers may be stomped during the operation (eg: "This instruction may
leave R0/R1 and R32..R35 in an undefined state" or similar).

So, say, there is an internal pipeline register 'UXPC' where:
UXPC = 0, Instructions come from I$
UXPC != 0, Instructions come from UXROM, IF is stalled.

Where, say, triggering a microcode op:
Copies Rm and Ro to R0 and R1 or similar;
Sets UXPC to a non-zero address.

Possibly, the UXROM is 108 bits wide:
96 bits: VLIW bundle;
12 bits: Next UXPC + Control Tag (0 for End).

As soon as the Next UXPC is 0, whatever is in R0 is redirected to the
original Rn. The UXROM code could resemble normal BJX2 code, just
hard-wired into 3-wide WEX mode (with Lanes 2/3 padded with NOPs when
unused).

The 12-bit code would encode control-flow within the UXROM as a sort of
special mini-instruction (Branch-Continue, Terminate, Branch-True,
Branch-False, Branch-True-Or-Terminate, Branch-False-Or-Terminate). Note
that the ROM would likely be fairly small.

The banked case would be similar, except that and maybe R16..R23 or
similar, would be remapped to special internal registers and not effect
externally visible state (possibly Rs/Rt/Ru/Rv/Rx/Ry =>
R4/R6/R5/R7/R2/R3, with termination mapping R2/R3 to Rn or Xn).

This approach could have a lot less performance overhead than using an
interrupt or similar though (it is typically a lot faster/cheaper to use
function calls for these sorts of cases than to use an interrupt handler).

Cost could be a concern though...

> /Marcus

Re: Sequencer vs microcode

<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18071&group=comp.arch#18071

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ad4:458c:: with SMTP id x12mr12920110qvu.23.1624650741319; Fri, 25 Jun 2021 12:52:21 -0700 (PDT)
X-Received: by 2002:a9d:6e01:: with SMTP id e1mr11085243otr.178.1624650741046; Fri, 25 Jun 2021 12:52:21 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!news.uzoreto.com!tr1.eu1.usenetexpress.com!feeder.usenetexpress.com!tr1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Fri, 25 Jun 2021 12:52:20 -0700 (PDT)
In-Reply-To: <sb5a40$o97$1@dont-email.me>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:a93f:cb3c:8a11:3663; posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:a93f:cb3c:8a11:3663
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com> <sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Fri, 25 Jun 2021 19:52:21 +0000
Content-Type: text/plain; charset="UTF-8"
Lines: 143
 by: MitchAlsup - Fri, 25 Jun 2021 19:52 UTC

On Friday, June 25, 2021 at 2:17:23 PM UTC-5, BGB wrote:
> On 6/25/2021 12:51 PM, Marcus wrote:
> > On 2021-06-24, MitchAlsup wrote:
> >> On Thursday, June 24, 2021 at 1:56:56 AM UTC-5, Marcus wrote:
> >>> I guess this is mostly a question for Mitch...
> >>>
> >>> I have seen the terms "sequencer" and "microcode" being used, and while
> >>> I think that I know what microcode is, I'm not sure what the definition
> >>> of a sequencer is.
> >>>
> >>> AFAIK microcode (at least in the context of a traditional multi-CPI
> >>> machine) sits in the decoder and pumps out "micro instructions" from
> >>> a microcode ROM - often more than one micro instruction per instruction.
> >> <
> >> There are function units which have a myriad of sequences to run and they
> >> might be implemented with microcode, too. You are restricting microcode
> >> to the "pipeline control" (Decoder through Writeback).
> >> <
> >> But microcode requires a ROM that is programmable after it is designed
> >> and laid out. Often with a few additional words that are programmable
> >> even so far as after power on.
> >> <
> >>> I guess that in modern CISC implementations (e.g. x86) the microcode is
> >>> part of the translation front end, and probably only as an optional part
> >>> to cover for the cases that the fast-path translators can not deal with.
> >>>
> >>> Anyway... How about a sequencer? My understanding is that it is a
> >>> simpler variant that does not need a microcode ROM - e.g. it could be an
> >>> FSM or just a counter, right?
> >> <
> >> A sequencer is a machine that receives various inputs and asserts a
> >> sequence
> >> of control lines that cause the HW to perform "stuff" in certain
> >> sequences.
> >> Early IRCS machiens would have a single sequencer "run" the pipeline.
> >> Some RISC machines had a sequencer that "ran" the FP ADD unit (FADD,
> >> FCMP,
> >> FDIV,...) or "ran" the FP MUL unit (FMUL, IMUL, UMUL)
> >> <
> >> Many people have a mistaken belief that a sequencer necessarily has a
> >> single
> >> point of control, this is not correct, a sequencer for PDP-11 will
> >> have at least
> >> 4 sequencer within the "sequencer" (en-the-large) 1 of these sequence out
> >> Fetch requests, 2 of these sequence out address modes, and one sequences
> >> out the data path. {This is why HW is not SW and never can be}
> >>>
> >>> For instance could the vector control unit in my scalar MRISC32-A1
> >>> implementation, which is basically a counter that stalls the front end
> >>> while iterating over vector register elements, be considered to be a
> >>> sequencer? How about the control unit for an iterative divider?
> >> <
> >> Both of these are sequencers, and a "sequencer" can be implemented in
> >> several ways, gates and flip-flops at one end of the spectrum, microcode
> >> at the other end.
> >>>
> >>> When talking about using a sequencer to implement My 66000 instructions
> >>> such as ENTER, EXIT and MM - where would those sequencers typically be
> >>> located? E.g. in decode or execute?
> >> <
> >> AGEN would have these sequencers, after all, most of what they do is to
> >> spew addresses at the cache. The "math" the ENTER and EXIT perform
> >> is easily a subset of AGEN arithmetic.
> >>>
> >>> Would they output a sequence of (internal) instructions (which I assume
> >>> would be the case if they sit in the decoder), or would they act more
> >>> like controllers (which I assume would be the case if they sit in the
> >>> EU:s)?
> >> <
> >> Its more like the instruction shows up (ENTER) and AGEN spews out cache
> >> addresses and register read requests to stream registers onto the stack
> >> and finishes with stores to SP and optionally to FP.
> >> <
> >> The front end sees 1 instruction and then the AGEN unit is busy until it
> >> is no longer busy. The front end is allowed to start executing
> >> instructions
> >> that are not dependent on the register to stack movement and not needing
> >> the AGEN unit.
> >
> > Thanks for taking the time to explain! That cleared things up a great
> > deal for me.
> >
> I had previously considered possibly adding such a "sequencer" to BJX2,
> which could have allowed a few operations which can't currently be done
> via a single operation; or possibly allow "MOV.X" operations on a 1-wide
> core, ...
<
When I did this in Mc 88100, we simply made the AGEN unit go busy if it were
processing a DoubleWord LD or ST. This was the same Busy the main pipeline
would get if the Cache took a miss or a snoop prevented a LD or ST from
accessing the cache.
>
> This would likely involve adding another split and stall signal to the
> pipeline, which can stall IF and ID1 (Input Side), but allow ID1 to emit
> new ops, and ID2 and the EX stages to continue on as normal.
>
> Hadn't done so yet, as it seems like a bit of added cost and complexity.
>
>
>
> Or maybe even a microcode ROM, but this seems like a lot of extra
> complexity. Could also need banked registers, or reserving that certain
> registers may be stomped during the operation (eg: "This instruction may
> leave R0/R1 and R32..R35 in an undefined state" or similar).
<
In Mc 88100 we simply used a state machine to cycle off the long FDIV
sequences--it was a counting problem not a hairy sequencing problem.
>
> So, say, there is an internal pipeline register 'UXPC' where:
> UXPC = 0, Instructions come from I$
> UXPC != 0, Instructions come from UXROM, IF is stalled.
>
> Where, say, triggering a microcode op:
> Copies Rm and Ro to R0 and R1 or similar;
> Sets UXPC to a non-zero address.
>
> Possibly, the UXROM is 108 bits wide:
> 96 bits: VLIW bundle;
> 12 bits: Next UXPC + Control Tag (0 for End).
>
> As soon as the Next UXPC is 0, whatever is in R0 is redirected to the
> original Rn. The UXROM code could resemble normal BJX2 code, just
> hard-wired into 3-wide WEX mode (with Lanes 2/3 padded with NOPs when
> unused).
>
> The 12-bit code would encode control-flow within the UXROM as a sort of
> special mini-instruction (Branch-Continue, Terminate, Branch-True,
> Branch-False, Branch-True-Or-Terminate, Branch-False-Or-Terminate). Note
> that the ROM would likely be fairly small.
>
>
> The banked case would be similar, except that and maybe R16..R23 or
> similar, would be remapped to special internal registers and not effect
> externally visible state (possibly Rs/Rt/Ru/Rv/Rx/Ry =>
> R4/R6/R5/R7/R2/R3, with termination mapping R2/R3 to Rn or Xn).
>
> This approach could have a lot less performance overhead than using an
> interrupt or similar though (it is typically a lot faster/cheaper to use
> function calls for these sorts of cases than to use an interrupt handler).
>
> Cost could be a concern though...
>
>
> > /Marcus

Re: Sequencer vs microcode

<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18075&group=comp.arch#18075

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ac8:5349:: with SMTP id d9mr2137338qto.91.1624677058612;
Fri, 25 Jun 2021 20:10:58 -0700 (PDT)
X-Received: by 2002:a4a:2242:: with SMTP id z2mr11607154ooe.90.1624677058346;
Fri, 25 Jun 2021 20:10:58 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Fri, 25 Jun 2021 20:10:58 -0700 (PDT)
In-Reply-To: <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=99.251.79.92; posting-account=QId4bgoAAABV4s50talpu-qMcPp519Eb
NNTP-Posting-Host: 99.251.79.92
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: robfi...@gmail.com (robf...@gmail.com)
Injection-Date: Sat, 26 Jun 2021 03:10:58 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: robf...@gmail.com - Sat, 26 Jun 2021 03:10 UTC

What about the exec instruction? I had the thought that with vector registers maybe a vector exec instruction could be implemented. A snippet of program code could be stored in a vector register then executed with a vector exec instruction. This is a little bit like having micro-code executed.
Using a vector register it would be possible to pass program code to routines. I think the Clipper database language had the ability to pass code to routines.

Re: Sequencer vs microcode

<sb6dp3$jkc$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18080&group=comp.arch#18080

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: cr88...@gmail.com (BGB)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Sat, 26 Jun 2021 00:23:30 -0500
Organization: A noiseless patient Spider
Lines: 261
Message-ID: <sb6dp3$jkc$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 26 Jun 2021 05:25:55 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="fea811e399dfb52ece867d39a1d8c2bd";
logging-data="20108"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18kHexWb1ML7zI+kq6ooFQP"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:oJF4E7Fm1z5x0z66NNNTqoQVM6w=
In-Reply-To: <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
Content-Language: en-US
 by: BGB - Sat, 26 Jun 2021 05:23 UTC

On 6/25/2021 2:52 PM, MitchAlsup wrote:
> On Friday, June 25, 2021 at 2:17:23 PM UTC-5, BGB wrote:
>> On 6/25/2021 12:51 PM, Marcus wrote:
>>> On 2021-06-24, MitchAlsup wrote:
>>>> On Thursday, June 24, 2021 at 1:56:56 AM UTC-5, Marcus wrote:
>>>>> I guess this is mostly a question for Mitch...
>>>>>
>>>>> I have seen the terms "sequencer" and "microcode" being used, and while
>>>>> I think that I know what microcode is, I'm not sure what the definition
>>>>> of a sequencer is.
>>>>>
>>>>> AFAIK microcode (at least in the context of a traditional multi-CPI
>>>>> machine) sits in the decoder and pumps out "micro instructions" from
>>>>> a microcode ROM - often more than one micro instruction per instruction.
>>>> <
>>>> There are function units which have a myriad of sequences to run and they
>>>> might be implemented with microcode, too. You are restricting microcode
>>>> to the "pipeline control" (Decoder through Writeback).
>>>> <
>>>> But microcode requires a ROM that is programmable after it is designed
>>>> and laid out. Often with a few additional words that are programmable
>>>> even so far as after power on.
>>>> <
>>>>> I guess that in modern CISC implementations (e.g. x86) the microcode is
>>>>> part of the translation front end, and probably only as an optional part
>>>>> to cover for the cases that the fast-path translators can not deal with.
>>>>>
>>>>> Anyway... How about a sequencer? My understanding is that it is a
>>>>> simpler variant that does not need a microcode ROM - e.g. it could be an
>>>>> FSM or just a counter, right?
>>>> <
>>>> A sequencer is a machine that receives various inputs and asserts a
>>>> sequence
>>>> of control lines that cause the HW to perform "stuff" in certain
>>>> sequences.
>>>> Early IRCS machiens would have a single sequencer "run" the pipeline.
>>>> Some RISC machines had a sequencer that "ran" the FP ADD unit (FADD,
>>>> FCMP,
>>>> FDIV,...) or "ran" the FP MUL unit (FMUL, IMUL, UMUL)
>>>> <
>>>> Many people have a mistaken belief that a sequencer necessarily has a
>>>> single
>>>> point of control, this is not correct, a sequencer for PDP-11 will
>>>> have at least
>>>> 4 sequencer within the "sequencer" (en-the-large) 1 of these sequence out
>>>> Fetch requests, 2 of these sequence out address modes, and one sequences
>>>> out the data path. {This is why HW is not SW and never can be}
>>>>>
>>>>> For instance could the vector control unit in my scalar MRISC32-A1
>>>>> implementation, which is basically a counter that stalls the front end
>>>>> while iterating over vector register elements, be considered to be a
>>>>> sequencer? How about the control unit for an iterative divider?
>>>> <
>>>> Both of these are sequencers, and a "sequencer" can be implemented in
>>>> several ways, gates and flip-flops at one end of the spectrum, microcode
>>>> at the other end.
>>>>>
>>>>> When talking about using a sequencer to implement My 66000 instructions
>>>>> such as ENTER, EXIT and MM - where would those sequencers typically be
>>>>> located? E.g. in decode or execute?
>>>> <
>>>> AGEN would have these sequencers, after all, most of what they do is to
>>>> spew addresses at the cache. The "math" the ENTER and EXIT perform
>>>> is easily a subset of AGEN arithmetic.
>>>>>
>>>>> Would they output a sequence of (internal) instructions (which I assume
>>>>> would be the case if they sit in the decoder), or would they act more
>>>>> like controllers (which I assume would be the case if they sit in the
>>>>> EU:s)?
>>>> <
>>>> Its more like the instruction shows up (ENTER) and AGEN spews out cache
>>>> addresses and register read requests to stream registers onto the stack
>>>> and finishes with stores to SP and optionally to FP.
>>>> <
>>>> The front end sees 1 instruction and then the AGEN unit is busy until it
>>>> is no longer busy. The front end is allowed to start executing
>>>> instructions
>>>> that are not dependent on the register to stack movement and not needing
>>>> the AGEN unit.
>>>
>>> Thanks for taking the time to explain! That cleared things up a great
>>> deal for me.
>>>
>> I had previously considered possibly adding such a "sequencer" to BJX2,
>> which could have allowed a few operations which can't currently be done
>> via a single operation; or possibly allow "MOV.X" operations on a 1-wide
>> core, ...
> <
> When I did this in Mc 88100, we simply made the AGEN unit go busy if it were
> processing a DoubleWord LD or ST. This was the same Busy the main pipeline
> would get if the Cache took a miss or a snoop prevented a LD or ST from
> accessing the cache.

OK. I had considered that ID1 would do something funky and turn it into
a pair of MOV.Q ops ...

But, then it is unclear how much sense it makes in this case, vs just
having the compiler emit a pair of MOV.Q ops if targeting a core which
doesn't have MOV.X ...

Granted, it does mean that compiler options have to be set to match the
CPU feature set, otherwise, code is either sub-optimal (doesn't use a
feature which exists; or can only use it indirectly via function calls,
....), or doesn't work at all if it tries to use a feature which doesn't
exist.

This is "probably not ideal" for something meant as a general purpose
ISA, but is pretty standard in embedded (where one frequently needs to
tell the compiler the specific model of the specific processor to
generate code for).

But, the other extreme is something like x86, where they try to keep
hardware support for every feature of every previous x86 chip which
every existed (whether or not the features still make sense).

I suspect, at some point, emulation may make more sense than trying to
keep the same hardware ISA. Though, there is the issue that this puts
this under the control of the OS, and even some OS's which were known
for this (eg, Windows) kinda drag their feet (meaning that one needs to
use 3rd party emulators to run 30 year old binaries).

Granted, I have yet to decide what the eventual "redistributable binary
format" will be, or even if such a thing makes sense for my project.

Would almost assume trying to use something "off the shelf", except that
the existing mainstream options (JVM, .NET, Dalvik, ...), "kinda suck".
Also not really a fan of "just use repurposed LLVM IR".

One of the front-runner options is "Use WAD files holding RIL3 Bytecode
blobs" (doesn't really require much in terms of "new technology" on my
part), but this option "still kinda sucks". However, RIL3 is high-level
enough to at least mostly gloss-over machine-specific issues (it is a
stack machine along vaguely similar lines to .NET bytecode hybridized
with parts of PostScript; and the wackiness that rather than metadata
being structure-based or similar, the entire bytecode image is basically
a single massive blob of bytecode which is linearly interpreted to
rebuild all the various compiler structures and metadata... Or,
basically, "it seemed like a good idea at the time"...).

Also, unlike some of the other options, it is reasonably well adapted to
C and C++ and similar, and also supports inline ASM and a few other
useful features, ...

Taken slightly further, it is possible that the ".ifarch" feature could
be extended to allow inline ASM blobs with multiple instruction sets, or
maybe be extended to functions:
__declspec(ifnarch(BJX2)) void Foo() { ... }
So the function will only generate machine-code for machine if not
running on BJX2 (could be further wrapped in preprocessor macros to
retain compatibility with other compilers).

Likewise:
__declspec(ifarch(BJX2)) __asm {
Foo:
...
};

Would only emit the inline ASM blob if generating code for BJX2, but
allow falling back to a C version otherwise (and ".ifarch" can be used
within the ASM code to generate different code based on ISA feature flags).

Possibly:
__declspec(ifarch(BJX2,A32,A64)) ...
Is true if any of these is present.
__declspec(ifnarch(BJX2,A32,A64)) ...
Is true if none of these is present.


Click here to read the complete article
Re: Sequencer vs microcode

<sb75hs$7nq$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18092&group=comp.arch#18092

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: m.del...@this.bitsnbites.eu (Marcus)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Sat, 26 Jun 2021 14:11:40 +0200
Organization: A noiseless patient Spider
Lines: 21
Message-ID: <sb75hs$7nq$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Sat, 26 Jun 2021 12:11:40 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="66b9a18d960a4c36283468dc1600adda";
logging-data="7930"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19yylaGCrPR2dwlhTUCaP22K+64pWK5zmg="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:kEAlI7e91MBuKXdiB8+o8EnxJeU=
In-Reply-To: <53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
Content-Language: en-US
 by: Marcus - Sat, 26 Jun 2021 12:11 UTC

On 2021-06-26, robf...@gmail.com wrote:
> What about the exec instruction? I had the thought that with vector registers maybe a vector exec instruction could be implemented. A snippet of program code could be stored in a vector register then executed with a vector exec instruction. This is a little bit like having micro-code executed.
> Using a vector register it would be possible to pass program code to routines. I think the Clipper database language had the ability to pass code to routines.
>

My initial feeling is that it's not a good idea. First off vector
register content (i.e. register file read or operand forwarding) is
usually not available at the "right" pipeline stage for executing
code (i.e. decode), and some instructions (branches) would be
difficult / infeasible (so it wouldn't be easy to do loops or
if:s in the code snippet, for instance).

Second it feels like a security issue, with similar problems as
"eval"-style commands in some programming languages.

That does not mean that it's not possible to execute code from a
vector register - but it's one of those things that could prove
problematic in many ways, and could place undesirable restrictions
on the implementation.

/Marcus

Re: Sequencer vs microcode

<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18095&group=comp.arch#18095

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ac8:4f15:: with SMTP id b21mr13972328qte.222.1624714520448;
Sat, 26 Jun 2021 06:35:20 -0700 (PDT)
X-Received: by 2002:a9d:6e01:: with SMTP id e1mr13936570otr.178.1624714520205;
Sat, 26 Jun 2021 06:35:20 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sat, 26 Jun 2021 06:35:19 -0700 (PDT)
In-Reply-To: <sb75hs$7nq$1@dont-email.me>
Injection-Info: google-groups.googlegroups.com; posting-host=99.251.79.92; posting-account=QId4bgoAAABV4s50talpu-qMcPp519Eb
NNTP-Posting-Host: 99.251.79.92
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: robfi...@gmail.com (robf...@gmail.com)
Injection-Date: Sat, 26 Jun 2021 13:35:20 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: robf...@gmail.com - Sat, 26 Jun 2021 13:35 UTC

On Saturday, June 26, 2021 at 8:11:42 AM UTC-4, Marcus wrote:
> On 2021-06-26, robf...@gmail.com wrote:
> > What about the exec instruction? I had the thought that with vector registers maybe a vector exec instruction could be implemented. A snippet of program code could be stored in a vector register then executed with a vector exec instruction. This is a little bit like having micro-code executed.
> > Using a vector register it would be possible to pass program code to routines. I think the Clipper database language had the ability to pass code to routines.
> >
> My initial feeling is that it's not a good idea. First off vector
> register content (i.e. register file read or operand forwarding) is
> usually not available at the "right" pipeline stage for executing
> code (i.e. decode), and some instructions (branches) would be
> difficult / infeasible (so it wouldn't be easy to do loops or
> if:s in the code snippet, for instance).
>
> Second it feels like a security issue, with similar problems as
> "eval"-style commands in some programming languages.
>
> That does not mean that it's not possible to execute code from a
> vector register - but it's one of those things that could prove
> problematic in many ways, and could place undesirable restrictions
> on the implementation.
>
> /Marcus

Implementing a vector exec may be a little easier in my case. Vector instructions already get repeatedly dumped to the re-order queue after decode. It would not take much to set the IR field in the queue to the value of a register, then flag the register values as invalid. There is already a ‘dec’ flag indicating that the instruction has been properly decoded. That could be set to false at queue time. It might take a second decoder though dedicated to decoding un-decoded instructions in the queue. The trick would be to get some form of branching working, as you say. I am thinking that maybe branching to a particular vector element might be possible if it is in the queue. It would take searching the queue for the right element. Some portion of a branch instruction address range could be used to indicate branching to elements, but the range allowed would be very small, ±8. It does get tricky to do. Probably not worthwhile to implement, but it would be a “cool” feature. OTOH I am kinda bored, I suppose I could wrap the implementation up in #if directives to make it optional..

Re: Sequencer vs microcode

<4c8c427c-7265-4d98-b38b-18891dae440dn@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18100&group=comp.arch#18100

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ac8:7446:: with SMTP id h6mr14353293qtr.272.1624721415863;
Sat, 26 Jun 2021 08:30:15 -0700 (PDT)
X-Received: by 2002:a4a:e923:: with SMTP id a3mr13322744ooe.45.1624721415707;
Sat, 26 Jun 2021 08:30:15 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sat, 26 Jun 2021 08:30:15 -0700 (PDT)
In-Reply-To: <53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:d167:c4a4:9932:46f3;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:d167:c4a4:9932:46f3
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <4c8c427c-7265-4d98-b38b-18891dae440dn@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Sat, 26 Jun 2021 15:30:15 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: MitchAlsup - Sat, 26 Jun 2021 15:30 UTC

On Friday, June 25, 2021 at 10:10:59 PM UTC-5, robf...@gmail.com wrote:
> What about the exec instruction? I had the thought that with vector registers maybe a vector exec instruction could be implemented. A snippet of program code could be stored in a vector register then executed with a vector exec instruction. This is a little bit like having micro-code executed.
<
On the EXC instruction, due to a host of reasons, these have passed out of favor.
<
As to Vector, When I looked into this, it ended up to be much more performant and less costly
to vectorize loops rather than vectorizing instructions. And this is where VEC an LOOP instructions
come from in My 66000 as the bookends of the Virtual Vector Method.
<
> Using a vector register it would be possible to pass program code to routines. I think the Clipper database language had the ability to pass code to routines.
<
What is wrong with passing a pointer to a subroutine and calling the code.

Re: Sequencer vs microcode

<3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18102&group=comp.arch#18102

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ad4:5444:: with SMTP id h4mr16769230qvt.14.1624721580997;
Sat, 26 Jun 2021 08:33:00 -0700 (PDT)
X-Received: by 2002:a05:6808:8c1:: with SMTP id k1mr11770242oij.99.1624721580846;
Sat, 26 Jun 2021 08:33:00 -0700 (PDT)
Path: i2pn2.org!i2pn.org!paganini.bofh.team!news.dns-netz.com!news.freedyn.net!newsreader4.netcologne.de!news.netcologne.de!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sat, 26 Jun 2021 08:33:00 -0700 (PDT)
In-Reply-To: <3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:d167:c4a4:9932:46f3;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:d167:c4a4:9932:46f3
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Sat, 26 Jun 2021 15:33:00 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: MitchAlsup - Sat, 26 Jun 2021 15:33 UTC

On Saturday, June 26, 2021 at 8:35:21 AM UTC-5, robf...@gmail.com wrote:
> On Saturday, June 26, 2021 at 8:11:42 AM UTC-4, Marcus wrote:
> > On 2021-06-26, robf...@gmail.com wrote:
> > > What about the exec instruction? I had the thought that with vector registers maybe a vector exec instruction could be implemented. A snippet of program code could be stored in a vector register then executed with a vector exec instruction. This is a little bit like having micro-code executed.
> > > Using a vector register it would be possible to pass program code to routines. I think the Clipper database language had the ability to pass code to routines.
> > >
> > My initial feeling is that it's not a good idea. First off vector
> > register content (i.e. register file read or operand forwarding) is
> > usually not available at the "right" pipeline stage for executing
> > code (i.e. decode), and some instructions (branches) would be
> > difficult / infeasible (so it wouldn't be easy to do loops or
> > if:s in the code snippet, for instance).
> >
> > Second it feels like a security issue, with similar problems as
> > "eval"-style commands in some programming languages.
> >
> > That does not mean that it's not possible to execute code from a
> > vector register - but it's one of those things that could prove
> > problematic in many ways, and could place undesirable restrictions
> > on the implementation.
> >
> > /Marcus
> Implementing a vector exec may be a little easier in my case. Vector instructions already get repeatedly dumped to the re-order queue after decode. It would not take much to set the IR field in the queue to the value of a register, then flag the register values as invalid. There is already a ‘dec’ flag indicating that the instruction has been properly decoded. That could be set to false at queue time. It might take a second decoder though dedicated to decoding un-decoded instructions in the queue. The trick would be to get some form of branching working, as you say. I am thinking that maybe branching to a particular vector element might be possible if it is in the queue. It would take searching the queue for the right element. Some portion of a branch instruction address range could be used to indicate branching to elements, but the range allowed would be very small, ±8. It does get tricky to do. Probably not worthwhile to implement, but it would be a “cool” feature. OTOH I am kinda bored, I suppose I could wrap the implementation up in #if directives to make it optional.
<
To show the extent of my disfavor for EXC, in My 66000 one cannot execute code in a page
that is writable !

Re: Sequencer vs microcode

<e5IBI.683979$ST2.397427@fx47.iad>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18105&group=comp.arch#18105

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!fx47.iad.POSTED!not-for-mail
From: ThatWoul...@thevillage.com (EricP)
User-Agent: Thunderbird 2.0.0.24 (Windows/20100228)
MIME-Version: 1.0
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com> <sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com> <53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me> <3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
In-Reply-To: <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 12
Message-ID: <e5IBI.683979$ST2.397427@fx47.iad>
X-Complaints-To: abuse@UsenetServer.com
NNTP-Posting-Date: Sat, 26 Jun 2021 15:54:50 UTC
Date: Sat, 26 Jun 2021 11:54:38 -0400
X-Received-Bytes: 1495
 by: EricP - Sat, 26 Jun 2021 15:54 UTC

MitchAlsup wrote:
> <
> To show the extent of my disfavor for EXC, in My 66000 one cannot execute code in a page
> that is writable !

That forces JIT'ers and self modifiers to make a trip through
the OS to change the page protection from RW to RE.
Not that it is a bad thing as it does allow the OS to clean up model
specfic things like caches and prefetch buffers across multiple SMP cores.

Re: Sequencer vs microcode

<2021Jun26.191449@mips.complang.tuwien.ac.at>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18106&group=comp.arch#18106

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: ant...@mips.complang.tuwien.ac.at (Anton Ertl)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Sat, 26 Jun 2021 17:14:49 GMT
Organization: Institut fuer Computersprachen, Technische Universitaet Wien
Lines: 12
Message-ID: <2021Jun26.191449@mips.complang.tuwien.ac.at>
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com> <sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com> <53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me> <3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com> <e5IBI.683979$ST2.397427@fx47.iad>
Injection-Info: reader02.eternal-september.org; posting-host="69b538dccf69ab92f3d886d7b1af1ad0";
logging-data="19967"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/q/9gwlQrr4NyrwIeH90L3"
Cancel-Lock: sha1:Es0dq01iGH65/G2knq2h/7X3V+U=
X-newsreader: xrn 10.00-beta-3
 by: Anton Ertl - Sat, 26 Jun 2021 17:14 UTC

EricP <ThatWouldBeTelling@thevillage.com> writes:
>That forces JIT'ers and self modifiers to make a trip through
>the OS to change the page protection from RW to RE.

We won't be going there for the 66000. We will just disable JITting
for the 66000, like we do for every instruction set that requires
undue complications.

- anton
--
'Anyone trying for "industrial quality" ISA should avoid undefined behavior.'
Mitch Alsup, <c17fcd89-f024-40e7-a594-88a85ac10d20o@googlegroups.com>

Re: Sequencer vs microcode

<8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18113&group=comp.arch#18113

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a0c:80ec:: with SMTP id 99mr17321111qvb.55.1624734770712;
Sat, 26 Jun 2021 12:12:50 -0700 (PDT)
X-Received: by 2002:a05:6808:2cf:: with SMTP id a15mr6368226oid.84.1624734770392;
Sat, 26 Jun 2021 12:12:50 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sat, 26 Jun 2021 12:12:50 -0700 (PDT)
In-Reply-To: <e5IBI.683979$ST2.397427@fx47.iad>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:d167:c4a4:9932:46f3;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:d167:c4a4:9932:46f3
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Sat, 26 Jun 2021 19:12:50 +0000
Content-Type: text/plain; charset="UTF-8"
 by: MitchAlsup - Sat, 26 Jun 2021 19:12 UTC

On Saturday, June 26, 2021 at 10:54:53 AM UTC-5, EricP wrote:
> MitchAlsup wrote:
> > <
> > To show the extent of my disfavor for EXC, in My 66000 one cannot execute code in a page
> > that is writable !
> That forces JIT'ers and self modifiers to make a trip through
> the OS to change the page protection from RW to RE.
<
No, it requires the JIT to run in a different address mapping than the application
using the JITted code. Since this transition only costs 12 cycles plus cache
effects, it is well worth while.
<
> Not that it is a bad thing as it does allow the OS to clean up model
> specfic things like caches and prefetch buffers across multiple SMP cores.

Re: Sequencer vs microcode

<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18142&group=comp.arch#18142

  copy link   Newsgroups: comp.arch
X-Received: by 2002:ac8:5e12:: with SMTP id h18mr19124908qtx.253.1624831886783;
Sun, 27 Jun 2021 15:11:26 -0700 (PDT)
X-Received: by 2002:a9d:7197:: with SMTP id o23mr4955598otj.81.1624831886581;
Sun, 27 Jun 2021 15:11:26 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sun, 27 Jun 2021 15:11:26 -0700 (PDT)
In-Reply-To: <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=99.251.79.92; posting-account=QId4bgoAAABV4s50talpu-qMcPp519Eb
NNTP-Posting-Host: 99.251.79.92
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad> <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: robfi...@gmail.com (robf...@gmail.com)
Injection-Date: Sun, 27 Jun 2021 22:11:26 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: robf...@gmail.com - Sun, 27 Jun 2021 22:11 UTC

>What is wrong with passing a pointer to a subroutine and calling the code.

Nothing wrong with passing pointers. But being able to pass code eliminates subroutine call and return overhead. I think with the database, one could store field validation code along with the metadata for a field, then load and run it in a generic routine at runtime. IIRC database engines allow constraints to be applied to field data. In this case it could be raw machine code.

The EXC instruction is a little on the slow side as I have it implemented. It decodes twice, after the first decode it clears the ‘dec’ flag in the queue causing it to be decoded a second time. The second time through it has the actual instruction to work with. One issue is EXC an EXC instruction causes an infinite decode loop. Starting to be more hardware than its worth to detect exceptions. Vector EXC is a little more complicated.

I added mystery ops to the ISA. This is a little bit like an EXC except that only the opcode / func is passed in a register. The register fetch fields remain the same as a regular instruction, so this instruction is fast. The execute logic looks at the value in the third register and selects the 2R operation accordingly. This instruction allows things like modifying match conditions in text processing without resorting to switch statements.

Re: Sequencer vs microcode

<sbb5m3$lim$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18143&group=comp.arch#18143

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: sfu...@alumni.cmu.edu.invalid (Stephen Fuld)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Sun, 27 Jun 2021 17:38:26 -0700
Organization: A noiseless patient Spider
Lines: 15
Message-ID: <sbb5m3$lim$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
<sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
<3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad>
<8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Mon, 28 Jun 2021 00:38:27 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="3e85dbbecee647b75b5f1023d135e2a5";
logging-data="22102"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19eldyntunHfXP9AN6FXM8KSvrUp2FOask="
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:uLhv+hhmbe9JxEn4XxzjhB6hDlk=
In-Reply-To: <3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
Content-Language: en-US
 by: Stephen Fuld - Mon, 28 Jun 2021 00:38 UTC

On 6/27/2021 3:11 PM, robf...@gmail.com wrote:
>> What is wrong with passing a pointer to a subroutine and calling the code.
>
> Nothing wrong with passing pointers. But being able to pass code eliminates subroutine call and return overhead. I think with the database, one could store field validation code along with the metadata for a field, then load and run it in a generic routine at runtime. IIRC database engines allow constraints to be applied to field data. In this case it could be raw machine code.
>
> The EXC instruction is a little on the slow side as I have it implemented. It decodes twice, after the first decode it clears the ‘dec’ flag in the queue causing it to be decoded a second time. The second time through it has the actual instruction to work with. One issue is EXC an EXC instruction causes an infinite decode loop. Starting to be more hardware than its worth to detect exceptions.

One pretty simple solution to this kind of problem that has been used in
the past is to start a timer/counter each time an instruction starts.
If the count exceeds some large number, generate an exception.

--
- Stephen Fuld
(e-mail address disguised to prevent spam)

Re: Sequencer vs microcode

<7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18144&group=comp.arch#18144

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a05:622a:1344:: with SMTP id w4mr2821595qtk.272.1624841158896;
Sun, 27 Jun 2021 17:45:58 -0700 (PDT)
X-Received: by 2002:a05:6808:2cf:: with SMTP id a15mr9260934oid.84.1624841158642;
Sun, 27 Jun 2021 17:45:58 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sun, 27 Jun 2021 17:45:58 -0700 (PDT)
In-Reply-To: <3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=2600:1700:291:29f0:8ceb:68e4:4832:bb07;
posting-account=H_G_JQkAAADS6onOMb-dqvUozKse7mcM
NNTP-Posting-Host: 2600:1700:291:29f0:8ceb:68e4:4832:bb07
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad> <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: MitchAl...@aol.com (MitchAlsup)
Injection-Date: Mon, 28 Jun 2021 00:45:58 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: MitchAlsup - Mon, 28 Jun 2021 00:45 UTC

On Sunday, June 27, 2021 at 5:11:27 PM UTC-5, robf...@gmail.com wrote:
> >What is wrong with passing a pointer to a subroutine and calling the code.
<
> Nothing wrong with passing pointers. But being able to pass code eliminates subroutine call and return overhead.
<
Once you start having to set timers, or special case certain instructions (EXC) it is easier to not
have and EXC instruction and just bottle up code in a subroutine and simply call it. {Notice you
also have to special case CALL and RET instructions, indirect JMP instructions, SVC,.....}
<
> I think with the database, one could store field validation code along with the metadata for a field, then load and run it in a generic routine at runtime. IIRC database engines allow constraints to be applied to field data.. In this case it could be raw machine code.
>
> The EXC instruction is a little on the slow side as I have it implemented.. It decodes twice, after the first decode it clears the ‘dec’ flag in the queue causing it to be decoded a second time. The second time through it has the actual instruction to work with. One issue is EXC an EXC instruction causes an infinite decode loop. Starting to be more hardware than its worth to detect exceptions. Vector EXC is a little more complicated.
<
More complicated and still insufficient ! What if a code sequence you want to Vector EXC needs
65 instructions ? .....
>
> I added mystery ops to the ISA. This is a little bit like an EXC except that only the opcode / func is passed in a register. The register fetch fields remain the same as a regular instruction, so this instruction is fast. The execute logic looks at the value in the third register and selects the 2R operation accordingly. This instruction allows things like modifying match conditions in text processing without resorting to switch statements.

Re: Sequencer vs microcode

<e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18145&group=comp.arch#18145

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a37:71c1:: with SMTP id m184mr13498336qkc.367.1624855657809;
Sun, 27 Jun 2021 21:47:37 -0700 (PDT)
X-Received: by 2002:a9d:70c1:: with SMTP id w1mr15569185otj.82.1624855657595;
Sun, 27 Jun 2021 21:47:37 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Sun, 27 Jun 2021 21:47:37 -0700 (PDT)
In-Reply-To: <7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=99.251.79.92; posting-account=QId4bgoAAABV4s50talpu-qMcPp519Eb
NNTP-Posting-Host: 99.251.79.92
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad> <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com> <7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: robfi...@gmail.com (robf...@gmail.com)
Injection-Date: Mon, 28 Jun 2021 04:47:37 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: robf...@gmail.com - Mon, 28 Jun 2021 04:47 UTC

>One pretty simple solution to this kind of problem that has been used in
>the past is to start a timer/counter each time an instruction starts.
>If the count exceeds some large number, generate an exception.

That is a good idea to include, but I am a little stumped at the moment about implementation. ANY1 current imp. is an out-of-order machine, so multiple instructions may start before any of them finish. I have seen the core fire a string of store operations to the memory controller, then the queue sits idle for hundreds of cycles while the stores complete. It is not inconceivable that the processor could be caught up in an instruction start loop :) During debugging I have seen the core trying to execute the same instruction over and over again. Issue with the scheduler and the ‘out’ flag not being set properly.
It is almost necessary to time how long it has been since the queue last changed. If it’s more than 500 clocks then exception. Seem like monitoring one of the queue pointers might do the trick. The execute pointer and the decode pointer seemingly jump around randomly. Que and deque are supposed to proceed linearly.

>Once you start having to set timers, or special case certain instructions (EXC) it is easier to not
>have and EXC instruction and just bottle up code in a subroutine and simply call it. {Notice you
>also have to special case CALL and RET instructions, indirect JMP instructions, SVC,.....}

I decided to scrap the EXC instruction along with CALL and RET – as you say too much hardware for value added. There was a bug in the call instruction and branch-and-link, jump-and-link works just fine. Cost is a little bit less dense code. Opcodes for CALL and RET may be reserved so they can be emulated by software if desired, they would generate an unimplemented instruction trap. They could also be emulated with subroutines to get back the code density.

Re: Sequencer vs microcode

<jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18154&group=comp.arch#18154

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: monn...@iro.umontreal.ca (Stefan Monnier)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Mon, 28 Jun 2021 10:21:41 -0400
Organization: A noiseless patient Spider
Lines: 12
Message-ID: <jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
<sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
<3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad>
<8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
<7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
<e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com>
Mime-Version: 1.0
Content-Type: text/plain
Injection-Info: reader02.eternal-september.org; posting-host="786152efbb815a7dd913e8530438f84b";
logging-data="790"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19VeN0z6+N1PeaDGheHtBa9"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)
Cancel-Lock: sha1:k1vnH5RSP2YqQCRDWj6PkG43s2I=
sha1:DhgwMCl6zkM3lnl1vdRUprsTxSk=
 by: Stefan Monnier - Mon, 28 Jun 2021 14:21 UTC

>>One pretty simple solution to this kind of problem that has been used in
>>the past is to start a timer/counter each time an instruction starts.
>>If the count exceeds some large number, generate an exception.
> That is a good idea to include, but I am a little stumped at the moment
> about implementation.

As a compiler/proglang guy, the one thing that stumps me instead here is "why?".
Why would you want, or when/where would you need something like an
"exec" opcode? It seems to me like a "solution" in search of a problem.

Stefan

Re: Sequencer vs microcode

<sbcovt$d7k$1@newsreader4.netcologne.de>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18155&group=comp.arch#18155

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd7-51bc-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de!not-for-mail
From: tkoe...@netcologne.de (Thomas Koenig)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Mon, 28 Jun 2021 15:14:05 -0000 (UTC)
Organization: news.netcologne.de
Distribution: world
Message-ID: <sbcovt$d7k$1@newsreader4.netcologne.de>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
<sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
<3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad>
<8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
<7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
<e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com>
<jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>
Injection-Date: Mon, 28 Jun 2021 15:14:05 -0000 (UTC)
Injection-Info: newsreader4.netcologne.de; posting-host="2001-4dd7-51bc-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de:2001:4dd7:51bc:0:7285:c2ff:fe6c:992d";
logging-data="13556"; mail-complaints-to="abuse@netcologne.de"
User-Agent: slrn/1.0.3 (Linux)
 by: Thomas Koenig - Mon, 28 Jun 2021 15:14 UTC

Stefan Monnier <monnier@iro.umontreal.ca> schrieb:
>>>One pretty simple solution to this kind of problem that has been used in
>>>the past is to start a timer/counter each time an instruction starts.
>>>If the count exceeds some large number, generate an exception.
>> That is a good idea to include, but I am a little stumped at the moment
>> about implementation.
>
> As a compiler/proglang guy, the one thing that stumps me instead here is "why?".
> Why would you want, or when/where would you need something like an
> "exec" opcode? It seems to me like a "solution" in search of a problem.

I have even missed what this exec opcode should do, to be frank.

Would it be like the UNIX exec() system call, or something else?

Re: Sequencer vs microcode

<291ad795-9788-406a-bbe3-aa17eded93ebn@googlegroups.com>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18157&group=comp.arch#18157

  copy link   Newsgroups: comp.arch
X-Received: by 2002:a0c:b38c:: with SMTP id t12mr25884518qve.44.1624894869121;
Mon, 28 Jun 2021 08:41:09 -0700 (PDT)
X-Received: by 2002:a9d:7197:: with SMTP id o23mr166422otj.81.1624894867399;
Mon, 28 Jun 2021 08:41:07 -0700 (PDT)
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.arch
Date: Mon, 28 Jun 2021 08:41:07 -0700 (PDT)
In-Reply-To: <sbcovt$d7k$1@newsreader4.netcologne.de>
Injection-Info: google-groups.googlegroups.com; posting-host=2607:fea8:1de1:d400:9911:a902:95d2:8b93;
posting-account=QId4bgoAAABV4s50talpu-qMcPp519Eb
NNTP-Posting-Host: 2607:fea8:1de1:d400:9911:a902:95d2:8b93
References: <sb1abl$ps8$1@dont-email.me> <cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me> <42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com> <sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com> <3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad> <8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com> <7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
<e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com> <jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>
<sbcovt$d7k$1@newsreader4.netcologne.de>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <291ad795-9788-406a-bbe3-aa17eded93ebn@googlegroups.com>
Subject: Re: Sequencer vs microcode
From: robfi...@gmail.com (robf...@gmail.com)
Injection-Date: Mon, 28 Jun 2021 15:41:09 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
 by: robf...@gmail.com - Mon, 28 Jun 2021 15:41 UTC

On Monday, June 28, 2021 at 11:14:07 AM UTC-4, Thomas Koenig wrote:
> Stefan Monnier <mon...@iro.umontreal.ca> schrieb:
> >>>One pretty simple solution to this kind of problem that has been used in
> >>>the past is to start a timer/counter each time an instruction starts.
> >>>If the count exceeds some large number, generate an exception.
> >> That is a good idea to include, but I am a little stumped at the moment
> >> about implementation.
> >
> > As a compiler/proglang guy, the one thing that stumps me instead here is "why?".
> > Why would you want, or when/where would you need something like an
> > "exec" opcode? It seems to me like a "solution" in search of a problem.
> I have even missed what this exec opcode should do, to be frank.
>
> Would it be like the UNIX exec() system call, or something else?

EXEC executes an instruction contained in a register. It would allow passing the instruction around in a program. The great benefit of EXEC is that it allows functionality of a routine to be altered without resorting to self-modified code. I missed this kind of thing when programming a graphics library. I ended up using self modifying code for performance reasons. EXEC could have been used to implement the raster-ops for instance. It could also be used in text processing software. It is far faster to use an EXEC instruction than the switch statement it typically replaces. It does have some benefit, but it is also costly to implement.
I have had EXEC like functionality available on one machine in the form of specialized code buffers. Code could be executed out of a buffer in a single clock cycle.

Re: Sequencer vs microcode

<sbcu9u$587$1@dont-email.me>

  copy mid

https://www.novabbs.com/devel/article-flat.php?id=18159&group=comp.arch#18159

  copy link   Newsgroups: comp.arch
Path: i2pn2.org!i2pn.org!eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: iva...@millcomputing.com (Ivan Godard)
Newsgroups: comp.arch
Subject: Re: Sequencer vs microcode
Date: Mon, 28 Jun 2021 09:44:47 -0700
Organization: A noiseless patient Spider
Lines: 17
Message-ID: <sbcu9u$587$1@dont-email.me>
References: <sb1abl$ps8$1@dont-email.me>
<cc7766bb-1433-45f4-9ba5-93c40bdab0f7n@googlegroups.com>
<sb553t$kta$1@dont-email.me> <sb5a40$o97$1@dont-email.me>
<42b654db-a022-42f3-a6aa-94cd5a88de98n@googlegroups.com>
<53e78bb8-5c9c-481e-8cec-50a3febcbe95n@googlegroups.com>
<sb75hs$7nq$1@dont-email.me>
<3050904a-eec2-4d47-ba5d-bfed1d774518n@googlegroups.com>
<3d37be3c-e4fd-41b3-93f7-7037a3c19aefn@googlegroups.com>
<e5IBI.683979$ST2.397427@fx47.iad>
<8b1baea3-a802-4341-8afd-d827e4eee948n@googlegroups.com>
<3b2b37a7-6168-42c0-a657-dcff23fa3e03n@googlegroups.com>
<7ce8fca5-3a58-4e9a-92b4-595d0a743c57n@googlegroups.com>
<e2d01fcb-2cb1-4fb4-bf0e-b08d23ead140n@googlegroups.com>
<jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Mon, 28 Jun 2021 16:44:47 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="93250e6663f44052c7e5c9558d890f53";
logging-data="5383"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/PFWdBlGOKGXyfwgqppfdj"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
Thunderbird/78.11.0
Cancel-Lock: sha1:tC2p1CtzSeFiaQnHL4ZdVoWX67o=
In-Reply-To: <jwvv95yhy1o.fsf-monnier+comp.arch@gnu.org>
Content-Language: en-US
 by: Ivan Godard - Mon, 28 Jun 2021 16:44 UTC

On 6/28/2021 7:21 AM, Stefan Monnier wrote:
>>> One pretty simple solution to this kind of problem that has been used in
>>> the past is to start a timer/counter each time an instruction starts.
>>> If the count exceeds some large number, generate an exception.
>> That is a good idea to include, but I am a little stumped at the moment
>> about implementation.
>
> As a compiler/proglang guy, the one thing that stumps me instead here is "why?".
> Why would you want, or when/where would you need something like an
> "exec" opcode? It seems to me like a "solution" in search of a problem.
>
>
> Stefan
>

An exec is a very cheap special-case function call for very short functions.

Pages:1234567
server_pubkey.txt

rocksolid light 0.9.8
clearnet tor