Quality of VAX compilers



I seem to have acquired an acute fascination with the VAX architecture.

As part of that, I'm curious to know about the quality and methods
employed by the old VAX compilers. Did they schedule the code? Did they
use link-time optimizations? Did they have tables on the costs of various
instructions? Did they have flags for targetting different members of the
VAX family? How good were their register allocators? Did they inline
functions? Did they generate alternate entrypoints where they could, in
order to avoid the horrid CALLS/CALLG/RET instructions? Could they pass
parameters in registers for functions that were only used "internally" in
a module/program?

What tricks did they employ to get decent floating-point performance out
of an architecture that wasn't really well-suited to that?

(16 "general-purpose registers, of which one was the PC, one was the SP,
and two others were also used by the system. Floating-point operations
used the same registers as integer operations, and double floating-point
used register pairs. This puts a rather low limit on what you can keep in
registers)

-Peter
[As I recall, the answers to all of those questions was "sometimes", except
that I don't recall any that generated model-specific code. -John]
.



Relevant Pages

  • Re: PART 3. Why it seems difficult to make an OOO VAX competitive (really long)
    ... The VAX equivalents of IA-32 LEA are MOVA and PUSHA. ... > PDP-11 registers, addressing modes, and instructions onto the VAX ones. ...
    (comp.arch)
  • Re: Print statement within If-Then block changes output!!!????
    ... Presuming that Colin's conclusion that this isn't the usual sort of out-of-bounds error causing that problem, and that it is in fact a compiler bug, I think I've got a fair guess which exactly compiler bug it is, because I've run into it in exactly this situation: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=323. ... The short version is of the bug this: The Intel floating-point system has 80-bit floating-point registers, but has only 64-bit floating-point storage. ... Thus, there are cases where, if a value is stored in memory, its value will be slightly different than if its kept in a register. ...
    (comp.lang.fortran)
  • Re: Either 64bit mode or floating-point ?
    ... 64-Bit Media and x87 Floating-Point Instructions ... MMX registers. ...
    (comp.lang.asm.x86)
  • Re: Function ieee_value( r, IEEE_SIGNALING_NAN )
    ... Any compiler implementor worth his salt could make the ... to go through the floating-point registers. ... reference in the example should be a signaling NaN. ... It is easy to store a signaling NaN into a floating-point ...
    (comp.lang.fortran)
  • Re: builtin lists and Intel SSE support?
    ... these speedups can be attributed to the use of the SEE2 unit over the x87 ... utilising extra integer registers). ... ability to intermix integer and floating-point instructions in the same ... Code written with 128-bit media floating-point ...
    (comp.lang.lisp)