Trailing-Edge
-
PDP-10 Archives
-
walsh_goodStuff_1600
-
more-uns/blis11.doc
There are no other files named blis11.doc in the archive.
BLIS11.DOC DOCUMENT UPDATED: 6 SEPT 78
LAST COMPILER VERSION: 3(165)
COMPILER INSTALLED: 6 SEPT 78
This document is in four parts:
1. Documentation
2. Release Information
3. Bug List
4. Functional Changes
1.0 DOCUMENTATION
BLISS-11 Programmer's Manual, DECUS No. 10-213
BLISS-11 (Additional Info. and Documentation), DECUS No. 10-213
HLP:BLIS11.HLP
DOC:BLIS11.DOC (this document)
2.0 RELEASE INFORMATION
The released BLIS11 compiler is kept on SYS:. New versions of
BLIS11 may, from time to time, be installed on NEW: and solid
versions moved to SYS: and, when superceded, to OLD:.
Some installations have different conventions about where new and
old versions of the compiler are kept. One should contact the
system manager if he has any doubts.
The following modules contain support routines which may be
referenced by compiler-generated code. These modules are located
on BLI:
MULDIV.B11 Multiply and divide (non-EIS)
ROTSHI.B11 Rotate and shift (non-EIS)
MUDISH.MAC Multiply, divide, rotate, and shift (EIS)
COROUT.B11 Coroutine expressions
SAVREG.MAC Register saving and restoring
SIGENB.MAC SIGNAL and ENABLE
FORT.MAC FORTRAN linkage
3.0 BUG LIST
BLISS-11 BUG LIST LAST UPDATE: 31-JUL-78
BUG FIX DATE
NUMBER VERS. VERS. REPORTED DESCRIPTION
------ ----- ----- -------- -----------
2043 2(135) 3(136) 15-JUN-78 NULLs are occasionally present at the
end of buffers in the listing file
causing error messages in MACRO-11 or
MACY11.
2042 2(135) 3(136) 26-MAY-78 BLISS-11 does not handle some machine
specific functions properly.
Page 2
2041 2(117) 2(131) 3-APR-78 Sometimes an infinite loop occurs when
an object file is specified in a
command line with the /-I switch.
2040 2(117) 2(131) 30-MAR-78 If BLISS routine call has FORTRAN
routine call as an actual then BLISS
routine is not called.
2039 2(117) 2(123) 21-MAR-78 Indirect command files of longer than
1 block do not work properly.
2038 2(117) 2(123) 21-MAR-78 Indirect command files with SOS line
numbers do not work.
2037 1(104) 2(113) 30-JAN-78 The linkage option CLEARSTACK does not
suppress the stack adjustment after an
EMT call.
2036 --- --- 19-JAN-78 Unnecessary and redundant generation
RHO list CSE's.
2035 --- --- 6-DEC-77 Computes address in R11, then uses R0.
R0 previously had held the same value.
2034 1(104) 2(123) 20-OCT-77 "IF" exp returning identical store
exps. produces incorrect code.
2033 1(104) 2(113) 20-OCT-77 Routine calls in DO-WHILE's or the
test part of WHILE-DO do not mark
CSE's of Externals.
2032 1(103) 1(104) 7-OCT-77 A cse whose parent increments one to
the cse does not generate an ADD
instruction corresponding to a
constant which is part of the cse.
2031 1(103) 1(104) 5-OCT-77 Invalid stack adjustment done in
routine containing ENABLE.
2030 77192 1(103) 12-AUG-77 A store of a literal to a field other
than <0,16> causes an ill mem ref.
2029 77192 1(103) 4-AUG-77 When the zeroing of a location is
followed non-directly by a comparison
of the contents of that location with
zero, a superfluous TST #0 instruction
is sometimes generated.
2028 77192 --- 4-AUG-77 When ADD 4, SP is located before an
inlinecom statement, it is not
replaced with CMP (SP)+, (SP)+.
2027* 77192 -BUG- 25-JUL-77 Under the 6.03 monitor, the compiler
goes into an infinite loop repeatedly
printing the same error message
Page 3
whenever a require file (activated by
the [ ]) is in syntax, the sign-on or
library PPN but not the last PP N
used.
2026 77192 1(103) 14-JUL-77 CSE's surrounding ENABLE blocks are
assigned to registers causing their
contents to be lost upon execution of
a SIGNAL.
2025 77173 1(103) 29-JUN-77 Invalid optimization of use of stack
pointer involving auto-increment and
decrement.
4.0 FUNCTIONAL CHANGES
4.1 Functional Changes Since Version 2(135)
1. DIVTWO Switch
In earlier versions of BLISS-11, division by powers of two
was accomplished by shift instructions. This caused
incorrect results many times when the dividend was negative.
In version 2(135), the compiler was altered to do actual
divisions and not shifts to correct the problem. Some users
have requested that the ability to generate shifts for
divisions by powers of two be restored with the user
responsible for the context in which this is employed.
Command Switch: --
Module Head: DIVTWO,NODIVTWO* (*=default)
SWITCHES: DIVTW,NODIVTWO
Function: Divides by power of two will be done
with shift instructions. NODIVTWO
causes actual division operations to
be performed when dividing by two.
2. Generation of MUL and DIV Instructions
If the EIS or /A switch is specified, MUL and DIV
instructions will now be generated for multiplication and
division.
3. PSECT Default
PSECT instead of CSECT is now the default program section.
4. Redefinition of Formals
A warning message is generated if a formal name is redefined
at the top block of a routine.
5. MACY11 Invocation Messages
Page 4
The console messages indicating that MACY11 has started and
completed have been changed on the DECsystem-10 to
correspond to those output on the DECsystem-20.
4.2 Functional Changes Since Version 1(104)
1. Object Code Generation
If an object file is included in the command line, MACY11
will be invoked by BLISS-11 after the compilation. See
BLIS11.HLP for details.
2. Extension of /I Switch
The /I switch has been extended in meaning so that when /-I
is specified, the BLISS-11 listing (P11) file will be
deleted after the assembly has completed if MACY11 is
invoked.
3. MACY11 Module Head Switch
Command Switch: --
Module Head: MACY11='switch(es)'
SWITCHES: --
Function: The switches specified within the single
quotes will be passed by BLISS-11 into the
invoked MACY11 command line. a comma
and/or equals sign may occur within the
quotes to show which switches are
associated with which command line files.
If no comma or equals sign is present, the
switches are appended to the end of the
MACY11 command line. The default is no
switches. Example:
MACY11='/LI:SRC,/SP/NL=/EN:PNC'
will associate /LI:SRC with the object
file, /SP and /NL with the listing file,
and /EN:PNC with the source file.
4. VOLATILE Attribute
The VOLATILE attribute warns the compiler that the contents
of a declared data segment can change by an action that is
not directly specified by the program. Since the compiler
cannot predict the point in a program at which such an
action can occur, this warning requires that the compiler
assume that the value in the declared data segment can
change at any time. Consequently, the compiled code must
fetch the contents of that data segment anew for each fetch
in the BLISS program. VOLATILE is now a reserved keyword.
Page 5
The VOLATILE attribute can be specified directly preceding
the -type keyword in OWN, GLOBAL, LOCAL, EXTERNAL, and
STACKLOCAL allocation declarations (but not in REGISTER
declarations). The VOLATILE attribute can also directly
precede MAP or BIND in those declarations. However, the
VOLATILE attribute cannot be used in dynamic BINDs.
Non-volatile BINDs or MAPs cause the symbol bound or mapped
to lose any volatility the symbol to which it is bound or
mapped might have had. The VOLATILE attribute corresponds
to the first symbol in the declartion in which it occurs.
Examples:
VOLATILE BIND IOREG=17746;
VOLATILE OWN X,Y; (X is volatile, Y is not)
VOLATILE MAP BLKVEC A:B; (A is volatile, B is not)
VOLATILE BIND Q=.R; (Illegal)
VOLATILE REGISTER RR5; (Illegal)
5. Cross Reference of Line Numbers
If BLISS-11 is called from BLISS-16C and the intermediate
file is to be deleted, the line numbers cross referenced in
the generated assembler code will refer to the BLISS-16C
source. If the intermediate file is not to be deleted, the
line numbers will refer, as before, to the intermediate
file.
6. LOCAL and FORMAL Symbols
LOCAL and FORMAL symbol names will occur in the comment
field of generated assembler instructions for those lines
containing operands which represent LOCALs or FORMALs. If
an instruction has two operands, only one of which is a
LOCAL or FORMAL, the operand which is not shall be
represented by an asterisk in the comment. For example:
MOV XYZ,R5 ; 0110 *,B
MOV 2(SP),17770 ; 0111 A,*
CLR R3 ; 0112 C
MOV R5,2(SP) ; C,A
7. VOLATILE Binds to Literals
Literal values defined by BINDs having the volatile
attribute will be represented throughout the listing by the
name to which the value is bound. A direct assignment of
the literal value to the symbol bound to it will be output
in the listing.
Page 6
8. Indirect Files
Indirect files can now be written with SOS and can be longer
than one block. If the first character of a command line is
semi-colon that line will now be treated as a comment and
ignored.
4.3 Functional Changes Since V.77192
1. Uplits with an allocation unit of byte can now start on an
odd byte boundary if the previous storage allocated ended on
an odd byte boundary. This can reduce the amount of memory
used by the program.
2. Local declarations in the vicinity of ENABLEs are now handled
properly, as are cse's which span ENABLESs.
3. Modifications have been made in the code generated to
optimize moves between fields of varying position and size.
4. Source lines longer than 104 characters are split, at that
point, by a CRLF in the P11 file so that MACY11 will output
all characters of the BLISS-11 source in its listing file.
5. An .ENABL LC is now inserted at the start of the mainline
code. Listing directives are excluded from the macro
listing.
6. The version number now conforms to the DEC standard.
4.4 Functional Changes Since V.77083
1. BYTE Initialization and BYTE Plits
Data initialization in units of BYTEs is now permitted in
OWN and GLOBAL declarations as well as in PLITs. An
allocation unit of BYTE or WORD can now precede any
load-time-expr or string "tuple-item" or any "plitarg".
When an allocation unit appears just before a plitarg or
tuple-item, it applies to that item alone. When it appears
before a parenthesized list of tuple-items, it applies to
the entire list. Several allocation-units can be used in a
single plit or initialization; for any given item, the
innermost allocation-unit is the one that applies. RAD50
strings and expressions evaluating to more then 8 bits of
significant data are not permitted when the allocation unit
is BYTE. WORD length data cannot begin on a byte boundary.
Every declaration containing a WORD allocation unit
specification anywhere in its initialization will begin on a
word boundary. Declarations containing only BYTE allocation
unit specifications in their initializations can begin on
either a byte or word boundary.
Page 7
Examples:
BIND Y = PLIT BYTE("A",7,WORD(BYTE("B","C"),"D","E"));
generates
+4
Y: .ASCII \A\
.BYTE 7
.ASCII \B\
.ASCII \C\
.ASCII \D\
.EVEN
.ASCII \E\
.EVEN
BYTE OWN X[4]=BYTE(1,2,3,4); generates X: .BYTE 1,2,3,4
2. MINU and MAXU Operators
MINU and MAXU are new operators which have as their values
the minimum and maximum of their operands, respectively,
when the operands are treated as unsigned expressions.
3. New Addressing Mode and Object Code Options
Two new module head switches permit the user to cause
assembly directives to be issued to alter the addressing
mode and object code of a module. The meaning of the MAIN
module head switch has been extended to have an
interpretation when the object code is absolute.
Command Switch: --
Module Head: ADDMODE(attribute)
SWITCHES: --
Function: This switch allows the BLISS-11
programmer to specify to MACRO-11
which of relative and absolute
addressing mode to use in
assemblying the code. If the
attribute is ABSOLUTE, an .ENABL
AMA function control directive will
be output at the start of the
output file, causing subsequent
assembly in address mode 37
(absolute). If the attribute is
RELATIVE or the ADDMODE switch is
not present, the assembler will use
address mode 67 (relative).
Page 8
Command Switch: --
Module Head: OBJECT(attribute)
SWITCHES: -
Function: If the attribute ABSOLUTE is
specified, BLISS-11 will geneate an
.ENABL ABS function control
directive in the output file,
resulting in absolute object code.
All subsequent PSECT, CSECT, and
EXTERNAL declarations will be
flagged with warnings and ignored.
If the attribute RELOCATABLE has
been specified or no OBJECT switch
is present, relocatable code will
be generated.
Command Switch: --
Module Head: MAIN or MAIN(E)
SWITCHES: --
Function: Declares that the module contains
the starting point to be used by
the loader as the loaded program's
starting address. If E is
specified and the OBJECT switch
attribute is RELOCATABLE, a stack
of E words is allocated from
address 400 to 400 + E (where E is
specified in words). If E is
specified and the OBJECT switch
attribute is ABSOLUTE, the program
will be loaded at the byte address
specified by E. In all modules
except absolute ones which start at
address 0, the SP register is
initialized.
4. CLEARSTACK and RTT Linkage Attributes
Within a linkage declaration, the keywords CLEARSTACK and
RTT can appear in the same syntactical position as link
arguments. A routine declared with CLEARSTACK linkage will
clear all formal arguments off the stack before returning.
If a routine with CLEARSTACK linkage is called, BLISS-11
will assume on return that the routine has already cleared
the stack of its formal parameters. Both BLISS-11 and
non-BLISS-11 routines can have the CLEARSTACK attribute.
The RTT attribute specifies that all exits from the routine
be made with the RTT instruction. As an example:
LINKAGE ABC = BLISS(REGISTER=1,CLEARSTACK,RTT);
declares a linkage which passes the first argument in
register 1, and clears subsequent arguments from the stack
before returning with an RTT.
Page 9
5. Listing Changes
. BINDs to Plits now retain user symbol names in lieu of the
synthesized P$AAA names. Plit names, as well as Module
names and OWN, GLOBAL, EXTERNAL, ROUTINE, and LABEL names,
should be distinct within the first six characters in order
to avoid assembly errors. If this is not possible, the
UNAMES switch can be used to create distinct names.
. Local labels are now of the form n$. They are renumbered to
begin at 1 in each routine. Labels are assigned in
ascending order in steps of 1. A .DSABL LSB assembly
directive is inserted into the output file at the beginning
of each routine. An .ENABL LSB is inserted into the output
file at the end of each routine.
. Register names have been changed from R$n to Rn.
. A form feed is inserted between the source lines of a
routine and the generated code for that routine if the
routine was immediately preceded by a form feed in the
source file.
. References to source line numbers now occur as comments in
the generated code.
. Appropriate assembly directives are now generated so that
the assembly listing will have the source code properly left
adjusted.
6. Sequential Storage Allocation
Storage is now allocated in source declaration order within
PSECT/CSECT's. Storage declared within a routine will be
output at the end of the code for the inner most routine in
which the declaration occurs. All storage declared within
the module but not within any routine will be output after
the mainline code.
Page 10
7. Code Readability
A new switch causes code which is more easily followed and
deciphered to be generated.
Command Switch: /R,/-R* (* = default)
Module Head: READCODE,NOREADCODE
SWITCHES: READCODE,NOREADCODE
Function; When on, this switch causes more
readable though less optimized code
to be generated. In particular:
. Modification to the length of the
stack will be done via ADD's and
SUB's instead of TST's and CMP's.
. Each routine exit will be made
via a single common RTS, RTI, or
RTT only.
. Each routine will have a single
entry and exit point.
8. Changes Related to BLISS-16C
. Command Switch: --
Module Head: BLS16
SWITCHES: --
Function: This switch tells BLISS-11 that it is
being called from BLISS-16C. The
purpose of this is threefold:.
. To permit the use of amperand (&) in
certain names generated by BLISS-16C
to avoid any conflict with user
generated names.
. To provide an added protection against
accidental deletion of the source file
via the /-I switch in the command
line.
. To indicate that the number of rubouts
on a line is to be used as a flag as
to whether a line should be output on
the listing.
Page 11
. Command Switch: /I*,/-I
Module Head: --
SWITCHES: --
Function: Do not delete the source file after
compilation. A switch setting of /-I
will delete the source file only if the
BLS16 Module Head switch is also
present.
. Command Switch: /B*,/-B
Module Head: --
SWITCHES: --
Function: Keep all source code lines in output
file. If /-B is specified, only source
lines which begin with an exclamation
point (!) are included in the output
file. In BLISS-16C files, this results
in elimination of the intermediate code.
. Command Switch: --
Module Head: --
SWITCHES: NULL
Function: This switch has no direct effect. Its
purpose is to provide the lexical
analyzer of BLISS-11 with a lexeme for
its look-ahead mechanism to find so that
comments which precede a routine are
included in the listing of that routine,
not the one before it.
. A command line consisting of a file name followed by a "#"
is similar to a file name followed by an "!". The file
named is a program which is initiated. While the "!" causes
execution to commence at the starting address plus 1, a "#"
causes execution to commence at the starting address itself.
The default device is SYS:. This feature provided a means
for BLISS-11 to get back to BLISS-16C after completing a
compilation.
9. Miscellaneous Changes
. All repeatable bugs reported within DEC by June 1, 1977 have
been corrected.
. Indirect files are now acceptable in the command line.
. Initialization which references the datum being defined is
now permitted (ie. OWN X[4]=(5,X[3],2,X[2]); ).
. Command Switch: /J,/-J*
Module Head: --
SWITCHES: --
Function: This switch inhibits all references to
the time, date, and version number in
the output file.
Page 12
4.5 Functional Changes Since V.76154
1. Underscore Character
The default semantic definition of the underscore character
has been changed to that of a letter. It can now be used
within names. Underscore will be converted to the character
dot (.) in the compiled output. A name consisting of a
single underscore is illegal. Those using underscores
within names are urged to acquaint themselves with the role
of the character dot in the naming standards. This is
described in section E.4 of the MACRO-11 Reference Manual
DEC-11-OIMRA-A-D.
In order to permit old programs to compile, a new switch has
been created which, when off, will designate underscore to
be an assignment operator.
Command Switch: /W*,/-W (* indicates default)
Module Head: UNDERSCORE, NOUNDERSCORE
Switches: ---
Function: Designate underscore as a name
character in lieu of an assignment
operator.
2. Macro Expansions
A new macro expansion switch (TRACE) has been created. The
sense of the EXPAND switch has been changed. It is now
possible to list only the ultimate results of a macro
expansion. The new switch definitions are:
Command Switch: /E,/-E*
Module Head: /EXPAND,NOEXPAND
SWITCHES: EXPAND,NOEXPAND
Function: Activate tracing of macro
expansions. Output only the result
of a macro expansion.
Command Switch: /T,/-T*
Module Head: TRACE,NOTRACE
SWITCHES: TRACE,NOTRACE
Function: Activate tracing of macro
expansions. Output text of the
macro call with actual argument
determination, iteration display,
and resulting complete macro
expansion.
3. INLINE and INLINECOM
INLINE and INLINECOM will now accept multiple arguments
separated by commas. The blank lines surrounding inline
comments in the output file have been removed.
Page 13
4. $CHAR Lexical Function
$CHAR is a new function which takes a list of numbers and
quoted characters as arguments. Each argument is
interpreted as the code of an ASCII character. The result
of the function is a string-literal that consists of the
concatenation of each of the specified characters. This
function is useful for representing special characters that
cannot be entered in the usual way. For example:
$CHAR(65,66,67,"D") is equivalent to "ABCD"
5. $CHARCOUNT Lexical Function
$CHARCOUNT is a new function which takes a list of quoted
strings as arguments. The value of the function is the sum
of the number of characters in all the string arguments. As
an example:
$CHARCOUNT("ABC","DE") is equivalent to 5
6. ASCIC String Type
A new string type, ASCIC, produces a counted ASCII string.
It is the same as ASCII except that the first byte of the
string is the count of the number of characters that follow.
As an example:
ASCIC "12345" produces .BYTE 5
.ASCII "12345"
7. DECX-11 Special Routine Call
A new special routine call, DECX, has been created which
generates a routine call with inline arguments. The first
argument to a DECX call must be a compile time expression
which is placed in the right half of a TRAP instruction
word. Subsequent arguments must be link time expressions
which are inserted as words following the TRAP instruction.
As an example:
DECX(10,NUM,TABLE[2],BEG) generates TRAP 10
.WORD NUM
.WORD TABLE+4
.WORD BEG
Normally a macro such as that below might be defined for use
in DECX calls:
MACRO SAMPLE(A,B,C) = DECX(10,A,B,C);
Page 14
8. FORTRAN Routine Linkage
FORTRAN linkage is now supported in BLISS-11. BLISS-11
routines can call FORTRAN routines and can be called from
FORTRAN routines. The linkage has been implemented in a
manner compatible with the PDP-11 FORTRAN linkage mechanism
as set forth in the DEC PDP-11 FORTRAN manual,
DEC-11-OXFMA-A-D.
When "FORTRAN" is used syntactically as a routine name in a
routine call expression, the first argument is evaluated at
run-time and interpreted to designate the entry point of the
routine being called. The remaining arguments are passed to
the named routine in the manner required by the linkage
definition. FORTRAN arguments are interpreted as addresses.
FORTRAN "null arguments" may be accomplished by writing the
explicit value -1. As an example:
FORTRAN(COUNT,BASE,.OFFSET,-1)
would generate a FORTRAN linkage to a routine located at
COUNT. Three arguments are passed: BASE and .OFFSET, which
are addresses, and a null third argument.
Entry to the FORTRAN routine is made via a support routine,
$FORT, which reverses the order of arguments on the stack,
prefixes the list of arguments with a word containing the
number of arguments, and deposits the address of this word
in register 5. This argument juggling is done to make the
routine call conform to FORTRAN standards. The support
routine $FORT is contained in the MACRO-11 file FORT.MAC.
BLISS-11 routines can now be written with the FORTRAN
linkage type. All arguments to such routines should be
interpreted as addresses if they are not -1, which
represents a null argument. Register 5 should not be
altered within a routine with the FORTRAN linkage type since
register 5 is used as a base from which arguments passed to
the routine are retrieved. Register 5 points to the top of
the caller's argument list so that
.(.R5)<0,8>
can be used to fetch the number of arguments. Note that
only the low order byte is accessed. As an example, ADDONE
adds one to all of its arguments' values:
ROUTINE FORTRAN ADDONE(A,B,C)=
BEGIN
.A = ..A + 1;
.B = ..B + 1;
.C = ..C + 1
END;
Page 15
9. Miscellaneous Changes
. The five superflous spaces at the start of each MACRO-11
comment line in the output file are now deleted.
. The error summary is always typed out, even when CNTL-O has
been depressed while error or warning messages are being
output.
. All bugs reported within DEC by December 15, 1976 have been
corrected.
. An .ENABL LC directive is now output immediately after
.TITLE in the output file to allow for proper processing of
lower case letters in string literals.
4.6 Functional Changes Since V.76078
1. The compiler now generates a label corresponding to the
module name preceding the module level code (and the
associated .GLOBL) only if MAIN was given in the module
head. This permits a routine in the module to have the same
name as the module without causing an assembly error.
2. All bugs reported since V.76078 have been corrected.
4.7 Functional Changes Since V.75091
1. The extension .BLI is a default extension; the order of
search is .B11, .BLI, null.
2. Miscellaneous listing format changes:
a. A .SBTTL is generated for every routine.
b. Literals are printed as signed or unsigned as
appropriate in their context.
c. The directives .BLKW and .BLKB are used for storage
allocation.
3. The ASH instruction can now be generated under switch
control. The module-head and SWITCHES declaration
parameters EIS and NOEIS, and the command-line switches /A
and /-A, control this feature. The default is NOEIS (/-A).
4. All reported bugs have been corrected.
5. The special functions MTPS and MFPS have been added to
generate the corresponding LSI-11 instructions. They are
identical in syntax and semantics to the functions MTPI,
MTPD, MFPI, and MFPD.
Page 16
4.8 Functional Changes Since V.74206
These are described in "BLISS-11 (Additional Information and
Documentation)"".
[end of BLIS11.DOC]