Linux MIPS Architecture development
 help / color / mirror / Atom feed
* MIPS32 patches breaking DecStation
@ 2001-01-08 23:41 Florian Lohoff
  2001-01-08 23:41 ` Florian Lohoff
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Florian Lohoff @ 2001-01-08 23:41 UTC (permalink / raw)
  To: linux-mips


Hi,
i found this snippet from arch/mips/kernel/head.S breaking DecStations:

@@ -68,9 +76,9 @@
        mtc0    k0, CP0_ENTRYLO0                # load it
        srl     k1, k1, 6                       # convert to entrylo1
        mtc0    k1, CP0_ENTRYLO1                # load it
-       b       1f
-        tlbwr                                  # write random tlb entry
-1:     
+       nop                                     # Need 2 cycles between mtc0
+       nop                                     #  and tlbwr (CP0 hazard).
+       tlbwr                                   # write random tlb entry
        nop
        eret                                    # return from trap
        END(except_vec0_r4000)


>From the Documentation and how i understand it this is perfectly
valid as the mtc0 instruction causes a cp0 hazard within the next 2 instruction
thought the delay of 2 cycles would be ok.

This is probably related to the Decstations having REALLY old R4000 silicion
revisions - Probably one should look through the erratas for these

flo@repeat:~$ cat /proc/cpuinfo 
cpu			: MIPS
cpu model		: R4000SC V3.0
system type		: Digital DECstation 5000/1xx

OK - I just had a look at the errata - This IS a workaround to a 
Mips R4000SC 2.0, 3.0 errata - I restored the original code back.

Flo
-- 
Florian Lohoff                  flo@rfc822.org             +49-5201-669912
     Why is it called "common sense" when nobody seems to have any?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* MIPS32 patches breaking DecStation
  2001-01-08 23:41 MIPS32 patches breaking DecStation Florian Lohoff
@ 2001-01-08 23:41 ` Florian Lohoff
  2001-01-09  0:34 ` Kevin D. Kissell
  2001-01-09 16:43 ` Harald Koerfgen
  2 siblings, 0 replies; 19+ messages in thread
From: Florian Lohoff @ 2001-01-08 23:41 UTC (permalink / raw)
  To: linux-mips


Hi,
i found this snippet from arch/mips/kernel/head.S breaking DecStations:

@@ -68,9 +76,9 @@
        mtc0    k0, CP0_ENTRYLO0                # load it
        srl     k1, k1, 6                       # convert to entrylo1
        mtc0    k1, CP0_ENTRYLO1                # load it
-       b       1f
-        tlbwr                                  # write random tlb entry
-1:     
+       nop                                     # Need 2 cycles between mtc0
+       nop                                     #  and tlbwr (CP0 hazard).
+       tlbwr                                   # write random tlb entry
        nop
        eret                                    # return from trap
        END(except_vec0_r4000)


From the Documentation and how i understand it this is perfectly
valid as the mtc0 instruction causes a cp0 hazard within the next 2 instruction
thought the delay of 2 cycles would be ok.

This is probably related to the Decstations having REALLY old R4000 silicion
revisions - Probably one should look through the erratas for these

flo@repeat:~$ cat /proc/cpuinfo 
cpu			: MIPS
cpu model		: R4000SC V3.0
system type		: Digital DECstation 5000/1xx

OK - I just had a look at the errata - This IS a workaround to a 
Mips R4000SC 2.0, 3.0 errata - I restored the original code back.

Flo
-- 
Florian Lohoff                  flo@rfc822.org             +49-5201-669912
     Why is it called "common sense" when nobody seems to have any?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-08 23:41 MIPS32 patches breaking DecStation Florian Lohoff
  2001-01-08 23:41 ` Florian Lohoff
@ 2001-01-09  0:34 ` Kevin D. Kissell
  2001-01-09  0:34   ` Kevin D. Kissell
                     ` (2 more replies)
  2001-01-09 16:43 ` Harald Koerfgen
  2 siblings, 3 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09  0:34 UTC (permalink / raw)
  To: Florian Lohoff, linux-mips

Florian,

Could you do me a huge favor and try a build that
uses 3 or 4 nops instead of the branch to the instruction
after the delay slot?   There was a reason that I eliminated
the branch construct from the MIPS internal Linux source
base - it's a hack that works perfectly on R4000's, but
it's pretty much a coincidence that it does so.  Yes,
the code fragment in question is R4K-specific, but
we really need to migrate towards the use of consistent
mechanisms that work across the full range of MIPS
CPUs.  Ideally, *all* CP0 hazards should some day be 
padded out with "ssnops" (sll $0,$0,1, if I recall), which 
force a 1 cycle delay per instruction even on superscalar 
MIPS CPUs.

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09  0:34 ` Kevin D. Kissell
@ 2001-01-09  0:34   ` Kevin D. Kissell
  2001-01-09  8:54   ` Florian Lohoff
  2001-01-09 15:09   ` Ralf Baechle
  2 siblings, 0 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09  0:34 UTC (permalink / raw)
  To: Florian Lohoff, linux-mips

Florian,

Could you do me a huge favor and try a build that
uses 3 or 4 nops instead of the branch to the instruction
after the delay slot?   There was a reason that I eliminated
the branch construct from the MIPS internal Linux source
base - it's a hack that works perfectly on R4000's, but
it's pretty much a coincidence that it does so.  Yes,
the code fragment in question is R4K-specific, but
we really need to migrate towards the use of consistent
mechanisms that work across the full range of MIPS
CPUs.  Ideally, *all* CP0 hazards should some day be 
padded out with "ssnops" (sll $0,$0,1, if I recall), which 
force a 1 cycle delay per instruction even on superscalar 
MIPS CPUs.

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09  0:34 ` Kevin D. Kissell
  2001-01-09  0:34   ` Kevin D. Kissell
@ 2001-01-09  8:54   ` Florian Lohoff
  2001-01-09 17:11     ` Harald Koerfgen
  2001-01-09 15:09   ` Ralf Baechle
  2 siblings, 1 reply; 19+ messages in thread
From: Florian Lohoff @ 2001-01-09  8:54 UTC (permalink / raw)
  To: Kevin D. Kissell

On Tue, Jan 09, 2001 at 01:34:47AM +0100, Kevin D. Kissell wrote:
> Florian,
> 
> Could you do me a huge favor and try a build that
> uses 3 or 4 nops instead of the branch to the instruction
> after the delay slot?   There was a reason that I eliminated

No problem - Done - doesnt work

> the branch construct from the MIPS internal Linux source
> base - it's a hack that works perfectly on R4000's, but
> it's pretty much a coincidence that it does so.  Yes,
> the code fragment in question is R4K-specific, but
> we really need to migrate towards the use of consistent
> mechanisms that work across the full range of MIPS
> CPUs.  Ideally, *all* CP0 hazards should some day be 
> padded out with "ssnops" (sll $0,$0,1, if I recall), which 
> force a 1 cycle delay per instruction even on superscalar 
> MIPS CPUs.

It immediatly after starting init goes crazy with "Illegal instruction"
and dies like this:

[ ... a couple hundret Illegal instruction ... ]
[init:1] Illegal instruction 8f9983d4 at 0fb68df8 ra=0fb68a20
[init:1] Illegal instruction 8fbc0018 at 0fb68e08 ra=0fb68a20
[init:1] Illegal instruction 02402021 at 0fb68e10 ra=0fb68a20
[init:1] Illegal instruction 00000000 at 0fb68e18 ra=0fb68a20
Kernel panic: Attempted to kill init!
BUG IN DYNAMIC LINKER ld.so: dl-minimal.c: 67: malloc: Assertion `n <= _dl_page!

It seems we need a R4000 2.0/3.0 special except_vec_r4000 like we already
have for the R4600 and some other kinds of mips CPUs.

Flo
-- 
Florian Lohoff                  flo@rfc822.org             +49-5201-669912
     Why is it called "common sense" when nobody seems to have any?

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09  0:34 ` Kevin D. Kissell
  2001-01-09  0:34   ` Kevin D. Kissell
  2001-01-09  8:54   ` Florian Lohoff
@ 2001-01-09 15:09   ` Ralf Baechle
  2001-01-09 15:09     ` Ralf Baechle
  2001-01-09 15:50     ` Kevin D. Kissell
  2 siblings, 2 replies; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 15:09 UTC (permalink / raw)
  To: Kevin D. Kissell; +Cc: Florian Lohoff, linux-mips

On Tue, Jan 09, 2001 at 01:34:47AM +0100, Kevin D. Kissell wrote:

> uses 3 or 4 nops instead of the branch to the instruction
> after the delay slot?   There was a reason that I eliminated
> the branch construct from the MIPS internal Linux source
> base - it's a hack that works perfectly on R4000's, but
> it's pretty much a coincidence that it does so.  Yes,
> the code fragment in question is R4K-specific, but
> we really need to migrate towards the use of consistent
> mechanisms that work across the full range of MIPS
> CPUs.  Ideally, *all* CP0 hazards should some day be 
> padded out with "ssnops" (sll $0,$0,1, if I recall), which 
> force a 1 cycle delay per instruction even on superscalar 
> MIPS CPUs.

While we could come up with a common TLB fault handler I really don't want
to.  For many applications this TLB fault handler is extremly performance
sensitive; every single cycle directly translates into application
performance.  Seems like we'll need some more TLB fault handler.  And a
complete TLB fault handler rewrite would be a good ide anyway, sigh ...

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 15:09   ` Ralf Baechle
@ 2001-01-09 15:09     ` Ralf Baechle
  2001-01-09 15:50     ` Kevin D. Kissell
  1 sibling, 0 replies; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 15:09 UTC (permalink / raw)
  To: Kevin D. Kissell; +Cc: Florian Lohoff, linux-mips

On Tue, Jan 09, 2001 at 01:34:47AM +0100, Kevin D. Kissell wrote:

> uses 3 or 4 nops instead of the branch to the instruction
> after the delay slot?   There was a reason that I eliminated
> the branch construct from the MIPS internal Linux source
> base - it's a hack that works perfectly on R4000's, but
> it's pretty much a coincidence that it does so.  Yes,
> the code fragment in question is R4K-specific, but
> we really need to migrate towards the use of consistent
> mechanisms that work across the full range of MIPS
> CPUs.  Ideally, *all* CP0 hazards should some day be 
> padded out with "ssnops" (sll $0,$0,1, if I recall), which 
> force a 1 cycle delay per instruction even on superscalar 
> MIPS CPUs.

While we could come up with a common TLB fault handler I really don't want
to.  For many applications this TLB fault handler is extremly performance
sensitive; every single cycle directly translates into application
performance.  Seems like we'll need some more TLB fault handler.  And a
complete TLB fault handler rewrite would be a good ide anyway, sigh ...

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 15:09   ` Ralf Baechle
  2001-01-09 15:09     ` Ralf Baechle
@ 2001-01-09 15:50     ` Kevin D. Kissell
  2001-01-09 15:50       ` Kevin D. Kissell
  1 sibling, 1 reply; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 15:50 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Florian Lohoff, linux-mips

> > Yes, the code fragment in question is R4K-specific, but
> > we really need to migrate towards the use of consistent
> > mechanisms that work across the full range of MIPS
> > CPUs.  Ideally, *all* CP0 hazards should some day be
> > padded out with "ssnops" (sll $0,$0,1, if I recall), which
> > force a 1 cycle delay per instruction even on superscalar
> > MIPS CPUs.
>
> While we could come up with a common TLB fault handler I really don't want
> to.  For many applications this TLB fault handler is extremly performance
> sensitive; every single cycle directly translates into application
> performance.  Seems like we'll need some more TLB fault handler.  And a
> complete TLB fault handler rewrite would be a good ide anyway, sigh ...

Sorry if I wasn't clear.  I am not suggesting a "one size
fits all" TLB handler - though as the old SGI hardware
gets retired and the newer, more standardized MIPS32
and MIPS64 parts become the principal targets, we
may see a greater convergence.  I am simply suggesting
that, even if there are differences in policy necessitated
by different CPU implementations, they should use the
same mechanisms.  If all CP0 hazards are avoided by
using ssnops, for example, we could evolve from writing
a new handler for every R4K variant to having a routine
that generates a handler with the right pipeline hazard
management, based on a set of paramters for the CPU.
And, while Ralf and I sometimes disagree on the importance
of this, in my own opinion, being consistent in these small
details helps avoid errors when a systems programmer
new to the architecture and/or the OS needs to work on
the system.

You may say that I'm a dreamer, but I'm not the only one.  ;-)

            Regards,

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 15:50     ` Kevin D. Kissell
@ 2001-01-09 15:50       ` Kevin D. Kissell
  0 siblings, 0 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 15:50 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Florian Lohoff, linux-mips

> > Yes, the code fragment in question is R4K-specific, but
> > we really need to migrate towards the use of consistent
> > mechanisms that work across the full range of MIPS
> > CPUs.  Ideally, *all* CP0 hazards should some day be
> > padded out with "ssnops" (sll $0,$0,1, if I recall), which
> > force a 1 cycle delay per instruction even on superscalar
> > MIPS CPUs.
>
> While we could come up with a common TLB fault handler I really don't want
> to.  For many applications this TLB fault handler is extremly performance
> sensitive; every single cycle directly translates into application
> performance.  Seems like we'll need some more TLB fault handler.  And a
> complete TLB fault handler rewrite would be a good ide anyway, sigh ...

Sorry if I wasn't clear.  I am not suggesting a "one size
fits all" TLB handler - though as the old SGI hardware
gets retired and the newer, more standardized MIPS32
and MIPS64 parts become the principal targets, we
may see a greater convergence.  I am simply suggesting
that, even if there are differences in policy necessitated
by different CPU implementations, they should use the
same mechanisms.  If all CP0 hazards are avoided by
using ssnops, for example, we could evolve from writing
a new handler for every R4K variant to having a routine
that generates a handler with the right pipeline hazard
management, based on a set of paramters for the CPU.
And, while Ralf and I sometimes disagree on the importance
of this, in my own opinion, being consistent in these small
details helps avoid errors when a systems programmer
new to the architecture and/or the OS needs to work on
the system.

You may say that I'm a dreamer, but I'm not the only one.  ;-)

            Regards,

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* RE: MIPS32 patches breaking DecStation
  2001-01-08 23:41 MIPS32 patches breaking DecStation Florian Lohoff
  2001-01-08 23:41 ` Florian Lohoff
  2001-01-09  0:34 ` Kevin D. Kissell
@ 2001-01-09 16:43 ` Harald Koerfgen
  2001-01-09 17:01   ` Ralf Baechle
  2 siblings, 1 reply; 19+ messages in thread
From: Harald Koerfgen @ 2001-01-09 16:43 UTC (permalink / raw)
  To: Florian Lohoff; +Cc: linux-mips


On 08-Jan-01 Florian Lohoff wrote:
> OK - I just had a look at the errata - This IS a workaround to a 
> Mips R4000SC 2.0, 3.0 errata - I restored the original code back.

Where have you found those errata?

-- 
Regards,
Harald

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 16:43 ` Harald Koerfgen
@ 2001-01-09 17:01   ` Ralf Baechle
  0 siblings, 0 replies; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 17:01 UTC (permalink / raw)
  To: Harald Koerfgen; +Cc: Florian Lohoff, linux-mips

On Tue, Jan 09, 2001 at 05:43:08PM +0100, Harald Koerfgen wrote:

> On 08-Jan-01 Florian Lohoff wrote:
> > OK - I just had a look at the errata - This IS a workaround to a 
> > Mips R4000SC 2.0, 3.0 errata - I restored the original code back.
> 
> Where have you found those errata?

Go to www.mips.com, follow the publications link.  Yes, MIPS be praised
for having errata and docs for rotten old silicon online!

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09  8:54   ` Florian Lohoff
@ 2001-01-09 17:11     ` Harald Koerfgen
  2001-01-09 18:28       ` Ralf Baechle
  0 siblings, 1 reply; 19+ messages in thread
From: Harald Koerfgen @ 2001-01-09 17:11 UTC (permalink / raw)
  To: linux-mips


On 09-Jan-01 Florian Lohoff wrote:
> On Tue, Jan 09, 2001 at 01:34:47AM +0100, Kevin D. Kissell wrote:
>> Florian,
>> 
>> Could you do me a huge favor and try a build that
>> uses 3 or 4 nops instead of the branch to the instruction
>> after the delay slot?   There was a reason that I eliminated
> 
> No problem - Done - doesnt work

Same here on my /260 (R4400SC V4.0). Neither inserting four "sll $0,$0,1" nor
four "nop" seem to work. The branch, on the other hand, does.

-- 
Regards,
Harald

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 17:11     ` Harald Koerfgen
@ 2001-01-09 18:28       ` Ralf Baechle
  2001-01-09 19:30         ` Kevin D. Kissell
  0 siblings, 1 reply; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 18:28 UTC (permalink / raw)
  To: Harald Koerfgen; +Cc: linux-mips

On Tue, Jan 09, 2001 at 06:11:00PM +0100, Harald Koerfgen wrote:

> > No problem - Done - doesnt work
> 
> Same here on my /260 (R4400SC V4.0). Neither inserting four "sll $0,$0,1" nor
> four "nop" seem to work. The branch, on the other hand, does.

Note the ssnops only make sense on superscalar CPUs, so not on the R4000.
Also note that the branch is equivalent to three nops.  One for the
branch instruction itself, the two more for instructions in the pipeline
that get killed.  On the R4600 / R500 where the hazard is only a single
instruction the branch is equivalent to only a single nop.  So while
unobvious the branch is a rather neat idea.

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 18:28       ` Ralf Baechle
@ 2001-01-09 19:30         ` Kevin D. Kissell
  2001-01-09 19:30           ` Kevin D. Kissell
  2001-01-09 19:54           ` Ralf Baechle
  0 siblings, 2 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 19:30 UTC (permalink / raw)
  To: Ralf Baechle, Harald Koerfgen; +Cc: linux-mips

> > Same here on my /260 (R4400SC V4.0). Neither inserting four "sll
$0,$0,1" nor
> > four "nop" seem to work. The branch, on the other hand, does.

Then it's apparently more than just a garden-variety CP0 hazard.

> Note the ssnops only make sense on superscalar CPUs, so not on the R4000.

My point is that an SSNOP should cause a 1 cycle stall on *any* MIPS
implementation to date, superscalar or not.  It's not documented that
way for the R10000, but if I recall correctly, it works there too.  If one
wants to standardize on a single mechanism, that's the one to use.
That's all I'm saying.

> Also note that the branch is equivalent to three nops.  One for the
> branch instruction itself, the two more for instructions in the pipeline
> that get killed.  On the R4600 / R500 where the hazard is only a single
> instruction the branch is equivalent to only a single nop.  So while
> unobvious the branch is a rather neat idea.

Yes, it's cute, but it relies on accidents of implementation to work,
and could easily fail on other CPUs otherwise compatible with
the R4000.  In principle, such a branch might incur no delay at
all on an advanced 64-bit processor.  By all means, use it for
the specific cases of the CPUs on which it is known to work,
but it should not be used in "default" MIPS CP0 handlers.

            Regards,

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 19:30         ` Kevin D. Kissell
@ 2001-01-09 19:30           ` Kevin D. Kissell
  2001-01-09 19:54           ` Ralf Baechle
  1 sibling, 0 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 19:30 UTC (permalink / raw)
  To: Ralf Baechle, Harald Koerfgen; +Cc: linux-mips

> > Same here on my /260 (R4400SC V4.0). Neither inserting four "sll
$0,$0,1" nor
> > four "nop" seem to work. The branch, on the other hand, does.

Then it's apparently more than just a garden-variety CP0 hazard.

> Note the ssnops only make sense on superscalar CPUs, so not on the R4000.

My point is that an SSNOP should cause a 1 cycle stall on *any* MIPS
implementation to date, superscalar or not.  It's not documented that
way for the R10000, but if I recall correctly, it works there too.  If one
wants to standardize on a single mechanism, that's the one to use.
That's all I'm saying.

> Also note that the branch is equivalent to three nops.  One for the
> branch instruction itself, the two more for instructions in the pipeline
> that get killed.  On the R4600 / R500 where the hazard is only a single
> instruction the branch is equivalent to only a single nop.  So while
> unobvious the branch is a rather neat idea.

Yes, it's cute, but it relies on accidents of implementation to work,
and could easily fail on other CPUs otherwise compatible with
the R4000.  In principle, such a branch might incur no delay at
all on an advanced 64-bit processor.  By all means, use it for
the specific cases of the CPUs on which it is known to work,
but it should not be used in "default" MIPS CP0 handlers.

            Regards,

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 19:30         ` Kevin D. Kissell
  2001-01-09 19:30           ` Kevin D. Kissell
@ 2001-01-09 19:54           ` Ralf Baechle
  2001-01-09 19:54             ` Ralf Baechle
  2001-01-09 20:33             ` Kevin D. Kissell
  1 sibling, 2 replies; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 19:54 UTC (permalink / raw)
  To: Kevin D. Kissell; +Cc: Harald Koerfgen, linux-mips

On Tue, Jan 09, 2001 at 08:30:05PM +0100, Kevin D. Kissell wrote:

> My point is that an SSNOP should cause a 1 cycle stall on *any* MIPS
> implementation to date, superscalar or not.  It's not documented that
> way for the R10000, but if I recall correctly, it works there too.  If one
> wants to standardize on a single mechanism, that's the one to use.
> That's all I'm saying.

I agree on that - except that I haven't seen the various various flavours
of nops documented anywhere except in IRIX's <sys/asm.h> ...

> > Also note that the branch is equivalent to three nops.  One for the
> > branch instruction itself, the two more for instructions in the pipeline
> > that get killed.  On the R4600 / R500 where the hazard is only a single
> > instruction the branch is equivalent to only a single nop.  So while
> > unobvious the branch is a rather neat idea.
> 
> Yes, it's cute, but it relies on accidents of implementation to work,
> and could easily fail on other CPUs otherwise compatible with
> the R4000.  In principle, such a branch might incur no delay at
> all on an advanced 64-bit processor.  By all means, use it for
> the specific cases of the CPUs on which it is known to work,
> but it should not be used in "default" MIPS CP0 handlers.

This behaviour of the R4000 branch is documented in the R4000 manual's
description of the pipeline.

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 19:54           ` Ralf Baechle
@ 2001-01-09 19:54             ` Ralf Baechle
  2001-01-09 20:33             ` Kevin D. Kissell
  1 sibling, 0 replies; 19+ messages in thread
From: Ralf Baechle @ 2001-01-09 19:54 UTC (permalink / raw)
  To: Kevin D. Kissell; +Cc: Harald Koerfgen, linux-mips

On Tue, Jan 09, 2001 at 08:30:05PM +0100, Kevin D. Kissell wrote:

> My point is that an SSNOP should cause a 1 cycle stall on *any* MIPS
> implementation to date, superscalar or not.  It's not documented that
> way for the R10000, but if I recall correctly, it works there too.  If one
> wants to standardize on a single mechanism, that's the one to use.
> That's all I'm saying.

I agree on that - except that I haven't seen the various various flavours
of nops documented anywhere except in IRIX's <sys/asm.h> ...

> > Also note that the branch is equivalent to three nops.  One for the
> > branch instruction itself, the two more for instructions in the pipeline
> > that get killed.  On the R4600 / R500 where the hazard is only a single
> > instruction the branch is equivalent to only a single nop.  So while
> > unobvious the branch is a rather neat idea.
> 
> Yes, it's cute, but it relies on accidents of implementation to work,
> and could easily fail on other CPUs otherwise compatible with
> the R4000.  In principle, such a branch might incur no delay at
> all on an advanced 64-bit processor.  By all means, use it for
> the specific cases of the CPUs on which it is known to work,
> but it should not be used in "default" MIPS CP0 handlers.

This behaviour of the R4000 branch is documented in the R4000 manual's
description of the pipeline.

  Ralf

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 19:54           ` Ralf Baechle
  2001-01-09 19:54             ` Ralf Baechle
@ 2001-01-09 20:33             ` Kevin D. Kissell
  2001-01-09 20:33               ` Kevin D. Kissell
  1 sibling, 1 reply; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 20:33 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Harald Koerfgen, linux-mips

> > Yes, it's cute, but it relies on accidents of implementation to work,
> > and could easily fail on other CPUs otherwise compatible with
> > the R4000.  In principle, such a branch might incur no delay at
> > all on an advanced 64-bit processor.  By all means, use it for
> > the specific cases of the CPUs on which it is known to work,
> > but it should not be used in "default" MIPS CP0 handlers.
> 
> This behaviour of the R4000 branch is documented in the R4000 manual's
> description of the pipeline.

Yes, yes, like I said, use it whenever you see an R4000 PrID
if you like.  Just don't use it as the handler installed for a PrID
not otherwise known to the kernel.

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: MIPS32 patches breaking DecStation
  2001-01-09 20:33             ` Kevin D. Kissell
@ 2001-01-09 20:33               ` Kevin D. Kissell
  0 siblings, 0 replies; 19+ messages in thread
From: Kevin D. Kissell @ 2001-01-09 20:33 UTC (permalink / raw)
  To: Ralf Baechle; +Cc: Harald Koerfgen, linux-mips

> > Yes, it's cute, but it relies on accidents of implementation to work,
> > and could easily fail on other CPUs otherwise compatible with
> > the R4000.  In principle, such a branch might incur no delay at
> > all on an advanced 64-bit processor.  By all means, use it for
> > the specific cases of the CPUs on which it is known to work,
> > but it should not be used in "default" MIPS CP0 handlers.
> 
> This behaviour of the R4000 branch is documented in the R4000 manual's
> description of the pipeline.

Yes, yes, like I said, use it whenever you see an R4000 PrID
if you like.  Just don't use it as the handler installed for a PrID
not otherwise known to the kernel.

            Kevin K.

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2001-01-09 20:33 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-01-08 23:41 MIPS32 patches breaking DecStation Florian Lohoff
2001-01-08 23:41 ` Florian Lohoff
2001-01-09  0:34 ` Kevin D. Kissell
2001-01-09  0:34   ` Kevin D. Kissell
2001-01-09  8:54   ` Florian Lohoff
2001-01-09 17:11     ` Harald Koerfgen
2001-01-09 18:28       ` Ralf Baechle
2001-01-09 19:30         ` Kevin D. Kissell
2001-01-09 19:30           ` Kevin D. Kissell
2001-01-09 19:54           ` Ralf Baechle
2001-01-09 19:54             ` Ralf Baechle
2001-01-09 20:33             ` Kevin D. Kissell
2001-01-09 20:33               ` Kevin D. Kissell
2001-01-09 15:09   ` Ralf Baechle
2001-01-09 15:09     ` Ralf Baechle
2001-01-09 15:50     ` Kevin D. Kissell
2001-01-09 15:50       ` Kevin D. Kissell
2001-01-09 16:43 ` Harald Koerfgen
2001-01-09 17:01   ` Ralf Baechle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox