[comp.lang.c] architectural support in languages

alderson@Jessica (Rich Alderson) (05/05/89)

PL/1 on the System/360 provided much support for the hardware representation of
various data types.  The biggest problem was the decision of the designers to
default FLOAT to DECIMAL, which caused a number of conversion errors to creep
in when doing long chains of operations.

The previous posting was wrong about the use of type markers such as "B" for
binary integers:  Fixed binary was represented as either decimal digits (with
conversion) or as binary digits with a suffixed "B" to prevent their interpre-
tation as large decimal numbers.  Thus, a FIXED BINARY(31,16) number represen-
ting 2**5+2**-1 could be either "32.5" or "10000.1B"--the compiler made no
distinction.

BCD representation was done with the PICTURE declaration:  To hold "32.5" in
exact BCD representation, the variable should be (at least) declared

	PICTURE '99V9'

which says allow 3 digits, with an assumed decimal point between the second and
third.

Because PL/1 allowed overlay of two data items in certain cases, and had a
bitstring type (represented as a string of bits in single quotes and suffixed
with a "B"), manipulation of the raw bits in a fixed binary number (for
example) was possible.  And it was much cleaner, because explicit, than the
Pascal trick of using variant records without tags.

I realize that the previous poster tried to move this off of comp.arch, but it
seemed to me that given the occasional discussion here of HLL support for
machine-level constructs, this had to go there as well.

Rich Alderson