Google
 

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]