Sean Conner wrote two great posts on Mon, 10 Apr 2017 21:43:29 -0400
These are all very good points. I agree I was exagerating by saying the
iAPX432 and 8086 couldn't run C. After all, the language was born on the
PDP-11 and that was limited to either 64KB or 128KB. So any C programs
for that machine could be trivially recompiled to run on either Intel
processor. But I certainly wouldn't want to port the C version of Spice
to DOS, for example (I was given the job of porting the Fortran version
of Spice from the PDP-11 to the Burroughs B6900 and can tell you that
tales of Fortran's compatiblity are greatly exagerated, but that is
another story). I also used QNX C which had some odd notation I have
forgotten which allowed you to have pointers using the extra segment
instead of the data segment. It was something like @cp instead of *cp.
The reason I used [bp-2] instead of [bp] in my second example is that I
supposed the latter was for the dynamic links (pointer to who called us)
so I needed the static link (pointer to who defined us) to be somewhere
else. I did not bother trying to remember how the ENTER and LEAVE
instructions work so my examples probably are not compatible with them:
https://pdos.csail.mit.edu/6.828/2012/readings/i386/ENTER.htm
My list should have included processors designed to run C. I won't put
RISC architectures there though they were heavily influenced by studying
the output of C compilers since they explicitly rejected the trend to
"close the semantic gap".
C: C-Machine, CRISP (Hobbit), ZPU
The machines don't bother with a base pointer (frame pointer in the case
of the 68000) register since C compilers can work without them.
-- Jecel