Google
 

Trailing-Edge - PDP-10 Archives - BB-J939E-BM - documents/bliss.doc
There are 15 other files named bliss.doc in the archive. Click here to see a list.


            BLISS-36 Release 4A For TOPS-20: Release Notes
                             21-Sep-1984
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 2


                                   CONTENTS

        1       INTRODUCTION . . . . . . . . . . . . . . . . . . . . 3
        2       NEW FEATURES . . . . . . . . . . . . . . . . . . . . 3
        3       COMPILER PERFORMANCE IMPROVEMENTS  . . . . . . . . . 3
        3.1       Compiler dynamic memory use <36> . . . . . . . . . 3
        4       CODE QUALITY IMPROVEMENTS  . . . . . . . . . . . . . 3
        4.1       Move merging <All> . . . . . . . . . . . . . . . . 3
        4.2       Comparison merging <All> . . . . . . . . . . . . . 3
        4.3       Bit test merging <All> . . . . . . . . . . . . . . 3
        5       CORRECTIONS  . . . . . . . . . . . . . . . . . . . . 4
        5.1       ENABLEs and initialized LOCALs <All> . . . . . . . 4
        5.2       Relation between difference and constant <All> . . 4
        5.3       Frame pointer of main program <36> . . . . . . . . 4
        5.4       Incorrect error messages <All> . . . . . . . . . . 4
        5.5       PRESET with address of LOCAL variable <All>  . . . 4
        5.6       Multiple END statements in assembly listing for 
                  main routine <36>  . . . . . . . . . . . . . . . . 5
        5.7       Spurious "symbol previously declared" messages 
                  <All>  . . . . . . . . . . . . . . . . . . . . . . 5
        5.8       Compiler fails when installed in an SFD <36> 
                  (TOPS-10)  . . . . . . . . . . . . . . . . . . . . 5
        5.9       Illegal UUO after fatal error <36> (TOPS-10) . . . 5
        5.10      Flow analysis failure <All>  . . . . . . . . . . . 5
        5.11      Bad code for the MOD operator <All>  . . . . . . . 5
        5.12      Cross-reference fixes <All>  . . . . . . . . . . . 5
        6       MISCELLANEOUS  . . . . . . . . . . . . . . . . . . . 6
        7       CHANGES TO UNSUPPORTED TOOLS . . . . . . . . . . . . 6
        8       CHANGES TO UNSUPPORTED SOFTWARE  . . . . . . . . . . 6
        8.1       XPORT - Transportable BLISS Programming Tools  . . 6
        8.2       SIX12 - BLISS Symbolic Debugger  . . . . . . . . . 6
        9       RESTRICTIONS . . . . . . . . . . . . . . . . . . . . 6
        10      KNOWN BUGS . . . . . . . . . . . . . . . . . . . . . 8
        11      FOR FURTHER HELP . . . . . . . . . . . . . . . . . . 8
        12      COMPONENTS . . . . . . . . . . . . . . . . . . . . . 9
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 3


1  INTRODUCTION

This document provides information pertaining to BLISS-36 Version 4A.



2  NEW FEATURES

Version 4.1 of the BLISS language is upward  compatible  with  Version
4.0.   Each  change documented in this section includes a flag such as
<16> indicating which compilers it applies to.



3  COMPILER PERFORMANCE IMPROVEMENTS

3.1  Compilation speed <32,36>

The compiler speed has  improved  by  about  5-10%  when  no  assembly
listing   is  being  generated.   Earlier  versions  of  the  compiler
formatted the assembly listing before checking whether it needed to be
written or not.



3.2  Compiler dynamic memory use <36>

The total memory requirement for the compilation of large modules  has
been reduced somewhat.  The reduction appears to be about 20 pages for
modules which were running right up to the memory bounds with the V4.0
compiler.



4  CODE QUALITY IMPROVEMENTS

4.1  Move merging <All>

Assignments from consecutive fields of a source  area  to  consecutive
fields  of  a destination area now generate a single move instruction.
Also, assignments of literals to consecutive fields of  a  destination
area  should  now generate a single move instruction.  Thus, "A<3,3> =
.B<3,3>; A<6,4> = .B<6,4>" will be turned into "A<3,7> = .B<3,7>", and
"A<3,3> = 1; A<6,4> = 3" will be turned into "A<3,7> = 19".



4.2  Comparison merging <All>

Similarly, ".A<3,3> EQL .B<3,3> AND .A<6,4> EQL .B<6,4>" will  now  be
turned  into ".A<3,7> EQL .B<3,7>", and ".A<3,3> EQL 1 AND .A<6,4> EQL
3"  will  be  turned  into  ".A<3,7>  EQL  19".    The   corresponding
transformation for ORs of NEQs is also performed.
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 4


4.3  Bit test merging <All>

Multiple bit tests on a single word will be turned into a  mask  test.
For example, ".A<4,1> OR .A<6,1>" will be turned into "(.A AND %X'50')
NEQ 0".



5  CORRECTIONS

This section describes changes to correct problems which  resulted  in
compiler failures or in the generation of incorrect code.



5.1  ENABLEs and initialized LOCALs <All>

Initialized local variables which are used in  an  ENABLE  declaration
are  now  zeroed  before  the  handler  is  enabled,  and  initialized
afterwards.  This allows handlers to determine  whether  an  exception
occurred  during  initialization  or  during  routine  body execution.
Previously, BLISS-32 was doing the initialization before  the  ENABLE;
BLISS-36 and BLISS-16 were doing the ENABLE before the initialization,
but weren't zeroing the variables first.



5.2  Relation between difference and constant <All>

A test of the form "<expr1> - <expr2> <relation>  <const>"  was  being
incorrectly  converted to "<expr1> <relation> <expr2> + <const>".  For
example, "IF .A - .B GTR 0 THEN" was converted to "IF .A GTR .B THEN".
This  looks  plausible, but certain overflow conditions invalidate it.
The only form of this optimization allowed now is "<expr1>  -  <expr2>
EQL/NEQ 0" => "<expr1> EQL/NEQ <expr2>".



5.3  Frame pointer of main program <36>

The compiler was always initializing the frame  pointer  of  the  main
routine  to zero, even if the main routine's linkage specified that it
did not have a frame pointer.  This has been fixed.



5.4  Incorrect error messages <All>

Incorrect error messages were generated when the compiler  was  unable
to  read  a library or require file.  Also, the error message "PLIT or
INITIAL size exceeds implementation  limits"  was  not  generated  for
TOPS-10 BLISS-36.  These have been fixed.
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 5


5.5  PRESET with address of LOCAL variable <All>

When a local variable name occurred in a  PRESET  list,  the  compiler
generated an EXTERNAL reference for that name.  For example, "LOCAL A,
B :  BLOCK [3] PRESET ([0, 0, 32, 0] = A)" would result in "Undeclared
global symbol A" when it was linked.  This has been fixed.



5.6  Multiple END statements in assembly listing for main routine <36>

When /FORMAT:(ASSEM) was specified, the compiler  would  generate  two
"END .MAIN." statements in the assembly listing.  This has been fixed.



5.7  Spurious "symbol previously declared" messages <All>

With /CHECK=REDECLARE, a spurious "symbol previously  declared  in  an
outer block" message was generated when a symbol was declared EXTERNAL
in an outer block, and GLOBAL in an inner block.  This has been fixed.



5.8  Compiler fails when installed in an SFD <36> (TOPS-10)

The TOPS-10 BLISS-36 compiler would fail if it  was  installed  in  an
SFD.  This has been fixed.



5.9  Illegal UUO after fatal error <36> (TOPS-10)

The compiler would fail with an Illegal UUO  after  printing  a  fatal
error message, rather than prompting with a "" for a new command line.
This has been fixed.



5.10  Flow analysis failure <All>

The compiler would fail in the flow  analysis  phase  when  confronted
with  certain extremely complex patterns of common subexpression usage
(involving nested IFs within LOOPs within IFs).  This has been fixed.



5.11  Bad code for the MOD operator <All>

The compiler would sometimes generate code for the MOD  operator  that
would  compute  a  result  with  the  wrong  sign.  In particular, the
compiler would sometimes compile "(-x) MOD (-y)" as "x MOD  y".   This
will now be compiled as "-(x MOD y)".
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 6


5.12  Cross-reference fixes <All>

Several   minor   problems   with   the   output   produced   by   the
/CROSS-REFERENCE switch have been fixed.



6  MISCELLANEOUS

7  CHANGES TO UNSUPPORTED TOOLS


                                 NOTE

        This section describes  components  of  the  BLISS  V4
        release  that  are  not  supported  by DIGITAL.  These
        items are provided only as a service to our users.

See the BLISS-36 User's Guide for information concerning these tools.



7.1  XPORT - Transportable BLISS Interface

A maintenance release of XPORT is included in this release.  XPORT  is
documented in the XPORT Programmer's Guide (Order No.  AA-J201A-TK).



8  CHANGES TO UNSUPPORTED SOFTWARE

As a courtesy to our users, some  unsupported  development  tools  are
shipped with the BLISS distribution.



8.1  XPORT - Transportable BLISS Programming Tools

A maintenance release of XPORT appears in the version 4A release.



8.2  SIX12 - BLISS Symbolic Debugger

Included in this release is  a  machine-readable  manual  -  SIX12.MEM
which serves as a reference manual for the debugger.



9  RESTRICTIONS

This section summarizes restrictions  with  the  V4A  release.   Where
possible, temporary solutions are described.
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 7


PROBLEM:  The following code fragment

                d = 0;
                .....
                WHILE .d NEQ 0 DO
                    BEGIN
                    ....
                    x = 66 / .d;        ! Assume "d" never written
                    ...
                    IF .y THEN EXITLOOP
                    END

          will cause a zero-divide exception at  execution  time  when
          compiled  using  normal optimization.  The compiler believes
          that the expression "66/.d" is loop invariant and moves  the
          computation out of the loop.

SOLUTION: This is a restriction in V4A.  In this particular case,  the
          expression could be rewritten as:

                WHILE 1 DO
                    BEGIN
                    .....
                    IF .d EQL 0 THEN EXITLOOP;
                    ....
                    x = 66 / .d;
                    .....
                    END;

          In this case, the expression cannot  be  moved  out  of  the
          loop.




PROBLEM:  Incorrect code generated for structure  definitions  of  the
          form:

                STRUCTURE BAD[I,P,S]= [%UPVAL]
                    (IF .I THEN BAD ELSE BAD + .BAD<16,16>)<P,S>;

                OWN X: BAD[];
                LOCAL T;

                T = .X[.T,0,12];

          "X" is loaded into a register in the  THEN-branch,  but  the
          ELSE-branch uses the register without loading it.

SOLUTION: This is the result of a design flaw  in  the  way  structure
          references  are  expanded.  BLISS semantics guarantee that a
          structure actual-parameter is evaluated only once.  This  is
          implemented  by treating the first occurrence of a structure
          formal  as  if  it  was  a  BIND  declaration.   The   other
          occurrences  of  the structure formal are then treated as if
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 8


          they were uses of the "imaginary" bind-name.  This choice of
          implementation  fails  when  the  first  occurrence  of  the
          structure formal is in conditional flow!  The problem can be
          avoided by insuring that the first occurrence of each formal
          is outside  of  conditional  flow.   The  example  structure
          should be written as:

                STRUCTURE GOOD[I,P,S] = [%UPVAL]
                    (GOOD; IF .I THEN GOOD ELSE GOOD+.GOOD<16,16>)<P,S>;

          Note that the  "structure-name"  is  the  zero-th  structure
          formal  parameter.  The formals "I", "P" and "S" are already
          outside  of  conditional  flow,  so   they   are   processed
          correctly.   This  change  will  cause  the  compiler to use
          slightly  more  memory,  but  the  resulting  code  will  be
          correct.   There  should  be  no  reduction  in optimization
          either.

          Be aware that there is no problem when the conditional  flow
          is  constant-folded  at  compile-time,  or  when there is no
          conditional flow in the structure body.







10  KNOWN BUGS

There are no known problems with the TOPS-20 release.



11  FOR FURTHER HELP

     A number of sources of additional help are available.

      o  For information on command interface -- "HLP:BLISS.HLP"  Just
         type "HELP BLISS" to the monitor.

      o  Language information -- "BLISS  Language  Guide":   Documents
         the  BLISS  language.   The  Fourth  Edition, which documents
         version  4  of  BLISS  is  available  as  SDC  order   number
         AA-H275C-TK, with Update Notice 1, order number AD-H275C-T1.

      o  Compiler information -- "BLISS-36 User's  Guide":   Describes
         use  of  the  BLISS-36  compiler,  some  available tools, and
         machine  specific  features.   The  Fourth   Edition,   which
         documents  version  4  of  BLISS-36 is available as SDC order
         number AA-H712D-TK.

      o  Syntax summary -- "BLISS Pocket  Guide":   Available  as  SDC
         order number AV-AT45A-TK.
BLISS-36 Release 4A For TOPS-20: Release Notes                  Page 9


      o  BLISS course -- A course in the BLISS programming language is
         available  from  DEC.  Your system manager may obtain further
         information by contacting DEC Educational Services.

      o  BLISS-36 debugger (SIX12):  "HLP:SIX12.HLP":  Just type "HELP
         SIX12" to the monitor.

      o  Simple  terminal  I/O:   "HLP:TUTIO.HLP":   Just  type  "HELP
         TUTIO" to the EXEC.

      o  Conversion   of   BLISS-10   programs    to    BLISS-36    --
         "HLP:CVT10.HLP":   Just  type  "HELP CVT10" to the EXEC.  For
         greater detail see the file "DOC:CVT10.DOC".

      o  Monitor interfaces -- "DOC:MONINT.DOC".

      o  Examining ".REL" files -- "HLP:DMPREL.HLP":  Just type  "HELP
         DMPREL" to the EXEC.




12  COMPONENTS

     Below is a list of the major components of the  BLISS-36  system.
Full  support  is  available  only for the BLISS compiler itself.  The
other components are unsupported but will be maintained to the  extent
our resources allow.

      o  BLISS -- The BLISS-36 compiler itself.

      o  EZIO and TUTIO -- I/O utilities for BLISS-36.

      o  Monitor Interfaces -- definitions necessary  for  interfacing
         with the TOPS-10 and TOPS-20 monitors.

      o  CVT10 -- BLISS-10 to BLISS-36 conversion program.

      o  SIX12 -- High level debugger for BLISS-36.

      o  XPORT -- Transportable BLISS programming tools