SIMD micro architectures use conditional execution at the mill (or pair of mills for complex operands) level. This removes the program sequencer and global condition codes from consideration, only the mill's "local condition" controls arithmetic operation. The technique appeared in ~2nd generation DSP chips in the late 80's and became common when they embraced multi core / multi mill architectures, I presume it has the merit of not "breaking" the pipelining. It can now be found in R and A series Arm cores. I imagine there are anteceedents prior to its use in the DSP 56300 and Sharc processors. The ordinal instruction is IFcc, where the specific operation and cc are also specified in the instruction encoding and conditional execution is local to each mill (or pair).
Martin -----Original Message----- From: Paul Koning via cctalk [mailto:[email protected]] Sent: 08 August 2025 17:52 To: [email protected] Cc: Paul Koning <[email protected]> Subject: [cctalk] Re: 80386 - 1985 > On Aug 8, 2025, at 1:30 PM, ben via cctalk <[email protected]> wrote: > > On 2025-08-08 10:54 a.m., Maciej W. Rozycki via cctalk wrote: >> On Thu, 7 Aug 2025, Paul Koning wrote: > >> The key concepts clearly borrowed from the MIPS ISA were: a >> hardwired zero register and the dependency on that for the >> completeness of the ALU operations provided, the lack of condition >> codes and the use of general registers instead for conditional branches.. > > Funny how most classic computers, did the same thing. > It was called skip on condition. The same thing as branch on register? Nope, "skip on condition" is a flavor of condition code branch. The RISC argument against condition codes, and why Cray didn't use them in the 6600, is that they are an instruction side effect that has to be interlocked along with the "real" result. And it's a global state, so it introduces unwanted serialization. For example, in a 6600 (or a MIPS or an Alpha), you can have an add into R3 executing concurrently with a multiply into R4, with no output conflicts. If you add condition codes to the architecture, those are a second output and the two operations now conflict. Another advantage is that you can conditionally branch on a result from some number of instructions ago, while instructions in between are still finishing up. No need to drain the pipeline. Of course there are other ways to do the "some instructions ago" thing, by having condition codes that are set only if an instruction option says to do so. The Electrologica machines (X1, from 1958, and the successor X8) have that feature, making them similar to ARM but more flexible. > With out the advance of large fast paged DRAM's RISC would never got > out the Door. The 6600 max memory was 128k 60-bit words, which for those days was admittedly quite large. No VM, though it did support relocation (base address and field length, similar to the DEC KA10). Large RAM is nice but I don't see what it has to do with RISC. paul
