____________________________________________________ MACRO-64 Assembler for OpenVMS AXP (TM) Systems Release Notes November 1993 This document provides information about the latest release of the MACRO-64 Assembler for OpenVMS AXP Systems. It includes information on features, changes, and resolved problems. Version V1.1 Build Number: 079 DIGITAL-INTERNAL FIELD TEST Revision/Update Information: Software Version: MACRO-64 Assembler for OpenVMS AXP Systems Version 1.1 Date: October 22, 1993 Digital Equipment Corporation Maynard, Massachusetts ________________________________________________________________ 1993 © Digital Equipment Corporation 1993. All rights reserved. The following are trademarks of Digital Equipment Corporation: Alpha AXP AXP DEC OpenVMS VAX DOCUMENT The AXP logo The DIGITAL logo Digital Equipment Corporation Proprietary Information This information is proprietary to Digital and is subject to the terms and conditions of your non-disclosure agreement. This document was prepared using VAX DOCUMENT, Version 2.1. _________________________________________________________________ Contents Preface................................................... v 1 New and Modified Features 1.1 $CALL Improvement with 0/A Stack Argument..... 1-1 2 Resolved Problems 2.1 DEBUG Scrolling of Repeat Blocks.............. 2-1 2.2 DEBUG Information for Local Data Labels....... 2-1 2.3 More Information Needed when Out of Memory.... 2-1 2.4 HELP MACRO/ALPHA_AXP Doesn't Work............. 2-2 2.5 HELP MACRO/ALPHA Broken on OpenVMS AXP V1.5-FT3 and V1.5-FT4......................... 2-2 2.6 MACZERO Diagnostic Anomalies.................. 2-3 2.7 Superfluous Argument vs. Scratch Register Conflict...................................... 2-3 2.8 No Diagnostics in /PREPROCESS_ONLY Mode....... 2-3 2.9 Recursive Lexical String Symbol Causes Hang... 2-4 2.10 No ADDTRUNC Diagnostic with .SIGNED_xxxx...... 2-4 2.11 CALL/LDQ_A/LDQ_NOP............................ 2-4 2.12 DEBUG Cannot Examine Registers Outside a Routine....................................... 2-5 2.13 $ABS$ Psect Starts at Offset 4................ 2-5 2.14 Two Diagnostics for Missing Closing Quote..... 2-5 2.15 Machine Code Display of Floating Types Regression.................................... 2-5 2.16 $RETURN Needs .BEGIN_EXACT/.END_EXACT......... 2-5 2.17 .SHOW BINARY Is Too Strong.................... 2-6 2.18 /ALIGN=CODE Doesn't Align Entry Points........ 2-6 2.19 Entry in Exact Range Crashes MACRO-64......... 2-6 2.20 .BEGIN_EXACT and Automatic Alignment.......... 2-6 iii 2.21 .INSTRUCTION, MIX Psects and Forward References.................................... 2-6 2.22 .DEFINE_xREG Directive Sometimes Causes Assembler Hang................................ 2-7 2.23 $CALL Passes Relocatable 0 as Absolute 0...... 2-7 2.24 Multiple Assembly Units on a Single Command Line.......................................... 2-7 2.25 /DEBUG=TRACEBACK Default...................... 2-7 2.26 $OPDEF Instructions Use Excessive Memory at Assembly Time................................. 2-7 2.27 Difference between VAX and AXP Hosts.......... 2-8 2.28 External BSR Target Label in Machine-Code Listing....................................... 2-8 2.29 Large Lexical String Symbols Cause Assertion..................................... 2-8 2.30 Erroneous Program Causes Assembler Crash...... 2-8 3 Known Problems and Restrictions 3.1 .BLKx Directives in Machine-Code Listing...... 3-1 3.2 Instructions for MIX Psects................... 3-1 iv _________________________________________________________________ Preface Introduction The MACRO-64 Assembler for OpenVMS AXP Systems provides a macro assembly language for the native Alpha AXP instruction set. MACRO-64 is available as a native assembler on the OpenVMS AXP Operating System. MACRO-64 is also available as a cross assembler hosted on the OpenVMS VAX operating system internally to Digital software development groups, and for a limited time to customers as part of an AXP cross-tool kit offered by Digital Services. Reporting Problems Please report all problems in the MACRO-64 notes conference 11SRUS::ASM$NOTES:ASM.NOTE. Intended Audience This document is intended for system managers and programmers who need to be informed about features, changes, and resolved problems. Document Structure This document is divided into the following chapters: o Chapter 1, New and Modified Features, describes new features or implementations since MACRO-64 T1.1-048, the MACRO-64 V1.1 Field Test 1 release. o Chapter 2, Resolved Problems, describes problems resolved since T1.1-048. v o Chapter 3, Known Problems and Restrictions, describes problems and restrictions that the development team is aware of, but has not resolved at the time of this release. Associated Documents For more information on MACRO-64, see the following manuals in the documentation set: o MACRO-64 Assembler for OpenVMS AXP Systems Reference Manual o MACRO-64 Assembler for OpenVMS AXP Systems Installation Guide For more information on programming in the OpenVMS AXP environment and on the Alpha AXP Architecture, see the following: 1. OpenVMS Calling Standard 2. Alpha Architecture Reference Manual 3. Alpha Architecture Handbook 4. Alpha System Reference Manual vi Conventions The following conventions are used in these release notes: Ctrl/x A sequence such as Ctrl/x indicates that you must hold down the key labeled Ctrl while you press another key or a pointing device button. In examples, a key name is shown enclosed in a box to indicate that you press a key on the keyboard. (In text, a key name is not enclosed in a box.) . . . In examples, a horizontal ellipsis indicates one of the following possibilities: o Additional optional arguments in a statement have been omitted. o The preceding item or items can be repeated one or more times. o Additional parameters, values, or other information can be entered. A vertical ellipsis indicates the omission of . items from a code example or command format; . the items are omitted because they are not . important to the topic being discussed. [] In format descriptions, brackets indicate that whatever is enclosed within the brackets is optional; you can select none, one, or all of the choices. Brackets are not, however, optional in the syntax of a directory name in a file specification. {} In format descriptions, braces surround a required choice of options; you must choose one of the options listed. boldface Boldface text represents the introduction text of a new term or the name of an argument, an attribute, or a reason. Boldface text is also used to show user input in online versions of the book. vii UPPERCASE Uppercase letters indicate that you must enter TEXT a command (for example, enter OPEN/READ), or they indicate the name of a routine, the name of a file, the name of a file protection code, or the abbreviation for a system privilege. - Hyphens in coding examples indicate that additional arguments to the request are provided on the line that follows. numbers Unless otherwise noted, all numbers in the text are assumed to be decimal. Non-decimal radices- binary, octal, or hexadecimal-are explicitly indicated. viii 1 _________________________________________________________________ New and Modified Features This chapter describes new features and feature changes that have been added since the MACRO-64 T1.1-048 release. 1.1 $CALL Improvement with 0/A Stack Argument With previous versions of MACRO-64, the $CALL macro passed the address zero as a stack argument using the following sequence: LDA SCRATCH_REG, 0 (R31) STQ SCRATCH_REG, x (SP) A more optimal sequence is as follows: STQ R31, x (SP) This optimization has been incorporated into MACRO-64 V1.1-079. New and Modified Features 1-1 2 _________________________________________________________________ Resolved Problems This chapter lists problems corrected since the T1.1-048 release. 2.1 DEBUG Scrolling of Repeat Blocks The debugger does not scroll the source window within a repeat block definition when you are executing instructions in a repeat block. Instead, the debugger treats the entire repeat block as a single statement. This problem has been corrected with MACRO-64 V1.1-079. 2.2 DEBUG Information for Local Data Labels No local symbol debug information is generated for some local data labels having a runtime address bound to a storage location whose storage is allocated with one of the .BLKx directives. This problem has been corrected with MACRO-64 V1.1-079. 2.3 More Information Needed when Out of Memory If the assembler runs out of virtual memory with a very large assembly unit, the assembler aborts with a "%LIB- F-INSVIRMEM, insufficient virtual memory" diagnostic. The assembler should provide some indication of what it was trying to do when the failure occurred. This problem has been addressed with MACRO-64 V1.1-079 as follows: Resolved Problems 2-1 Resolved Problems 2.3 More Information Needed when Out of Memory When the assembler runs out of memory, it includes the total number of lines assembled up to that point in the INSVIRMEM diagnostic message. The assembler suppresses generation of an object module. If you specify /LIST on the command line (or you default the /LIST qualifier in batch mode), the assembler reclaims some of its internal, dynamic, heap memory that is normally needed for object- module generation. The assembler then attempts to generate a listing file. If it succeeds, the last line in the listing file is the line the assembler was processing when it ran out of virtual memory. Note that it is unlikely but possible that the assembler may again run out of memory when it attempts to produce the listing file. In that case, the assembler issues a LASTGASP diagnostic message and aborts without generating a listing file. 2.4 HELP MACRO/ALPHA_AXP Doesn't Work HELP MACRO/ALPHA_AXP doesn't work. You must instead type HELP MACRO/ALPHA. This problem has been corrected with MACRO-64 V1.1-079. 2.5 HELP MACRO/ALPHA Broken on OpenVMS AXP V1.5-FT3 and V1.5-FT4 If you type "HELP MACRO/ALPHA" on FT3 or FT4 of OpenVMS AXP V1.5 after installing MACRO-64, two help sections are displayed for /ALPHA and help leaves you at the top of the help-library hierarchy. To navigate the MACRO-64 help, you must type "HELP MACRO/ALPHA topic", where "topic" is one of the MACRO-64 topics displayed when you type HELP MACRO /ALPHA. This problem lies with MACRO-64. However, OpenVMS AXP V1.5-SSB has been changed such that "HELP MACRO/ALPHA" works correctly after installing MACRO-64. This problem has been corrected with MACRO-64 V1.1-079. 2-2 Resolved Problems Resolved Problems 2.6 MACZERO Diagnostic Anomalies 2.6 MACZERO Diagnostic Anomalies When the first numeric expression to a .IF or .IIF directive is invalid, MACRO-64 evaluates it twice. The second expression, if present, is erroneously not evaluated. The .IF directive results in two diagnostic messages against the first expression, the second of which is redundant. Moreover, the diagnostic point of interest that is cited is the token beyond the end of the first expression. With .IIF EQ, .IIF LE, and .IIF GE, MACRO-64 attempts to interpret the first expression as a statement, possibly resulting in additional and superfluous diagnostic messages. This problem has been corrected with MACRO-64 V1.1-079. 2.7 Superfluous Argument vs. Scratch Register Conflict Currently, $CALL issues a diagnostic if you specify an argument-source or argument-target register that you also specify or default as a scratch register. (The default scratch registers are R0, R1, F0, and F1.) The diagnostic is legitimate if $CALL actually needs to use the scratch register to load an argument from memory and subsequently store it on the stack. However, the diagnostic is superfluous if $CALL does not need a scratch register. This problem has been corrected with MACRO-64 V1.1-079. 2.8 No Diagnostics in /PREPROCESS_ONLY Mode In /PREPROCESS_ONLY mode, MACRO-64 performs normal syntactic and semantic processing of your source program after the preprocessing stage in order to process normal symbol definitions and correctly maintain the current location counter ("."). However, most diagnostics that might be produced in these latter assembly stages would not be meaningful to you in /PREPROCESS_ONLY mode. Therefore, when MACRO-64 operates in /PREPROCESS_ONLY mode, the intended behavior is that all diagnostics arising from the latter assembly stages be suppressed. Unfortunately, preprocessing diagnostics, which would be meaningful in /PREPROCESS_ONLY mode, are also suppressed. This problem has been corrected with MACRO-64 V1.1-079. Resolved Problems 2-3 Resolved Problems 2.9 Recursive Lexical String Symbol Causes Hang 2.9 Recursive Lexical String Symbol Causes Hang The following construct causes the assembler to loop and eventually abort for lack of virtual memory: NOTHING = "%NOTHING% MORE" .print "%NOTHING%" In fact, this is an error in the source program. This construct directs the assembler to do something forever-the lexical string-symbol definition is infinitely recursive. This problem has been addressed with MACRO-64 V1.1-079 as follows: The assembler now issues a diagnostic message if you attempt to process more than 5000 lexical operators in a single statement. 2.10 No ADDTRUNC Diagnostic with .SIGNED_xxxx The assembler does not issue an ADDTRUNC diagnostic message for attempts to store a relocatable address value with the .SIGNED_BYTE and .SIGNED_WORD directives. It should issue a warning diagnostic. This problem has been corrected with MACRO-64 V1.1-079. 2.11 CALL/LDQ_A/LDQ_NOP Previous versions of MACRO-64 accept the following pseudo- ops: CALL LDQ_A LDQ_NOP These pseudo-ops do nothing useful and are likely to cause the assembler to crash. These pseudo-ops have been removed from MACRO-64 V1.1-079. 2-4 Resolved Problems Resolved Problems 2.12 DEBUG Cannot Examine Registers Outside a Routine 2.12 DEBUG Cannot Examine Registers Outside a Routine When the symbolic debugger doesn't know what routine you are in, you cannot examine registers as you might normally do. If you try, you receive the following diagnostic: DBG> ex r0 %DEBUG-W-SYMNOTACT, non-static variable '.MAIN.\MAIN\R0' is not active This problem has been corrected with MACRO-64 V1.1-079. 2.13 $ABS$ Psect Starts at Offset 4 The $ABS$ psect erroneously starts at offset 4. It should start at offset 0. This problem has been corrected with MACRO-64 V1.1-079. 2.14 Two Diagnostics for Missing Closing Quote If you omit a closing quote on a string literal, MACRO-64 issues two diagnostic messages concerning the missing quote. It should issue only one. This problem has been corrected with MACRO-64 V1.1-079. 2.15 Machine Code Display of Floating Types Regression In the machine-code section of the listing, floating-point initial data values are not shown correctly. However, floating-point initial values are shown correctly in the left margin in the source section of the listing. This problem has been corrected with MACRO-64 V1.1-079. 2.16 $RETURN Needs .BEGIN_EXACT/.END_EXACT The $ROUTINE macro correctly generates the prologue within a .BEGIN_EXACT/.END_EXACT block. This prevents disruption by the optimizer of the critical sequence of actions that must occur during prologue processing. $RETURN should do likewise for the epilogue, but in previous versions of MACRO-64, it does not. This problem has been corrected with MACRO-64 V1.1-079. Resolved Problems 2-5 Resolved Problems 2.17 .SHOW BINARY Is Too Strong 2.17 .SHOW BINARY Is Too Strong .SHOW BINARY and /SHOW=BINARY cause all lines that emit binary to be included in the listing. They should only affect macro expansion lines, and they show not override .NLIST (listing-control counter) and .NOSHOW CONDITIONALS. This problem has been corrected with MACRO-64 V1.1-079. 2.18 /ALIGN=CODE Doesn't Align Entry Points The .ENABLE ALIGN_CODE and /ALIGN=CODE options do not align procedure entry points. Code labels that are specified as the second argument to the .PROCEDURE_DESCRIPTOR directive should be aligned to at least a quadword boundary when automatic code alignment is enabled. This problem has been corrected with MACRO-64 V1.1-079. 2.19 Entry in Exact Range Crashes MACRO-64 Previous versions of MACRO-64 crash when the code entry point to a procedure (a label specified as the second argument to the .PROCEDURE_DESCRIPTOR directive) occurs within an exact range delimited with the .BEGIN_EXACT and .END_EXACT directives. This problem has been corrected with MACRO-64 V1.1-079. 2.20 .BEGIN_EXACT and Automatic Alignment In previous versions of MACRO-64, the .BEGIN_EXACT directive causes automatic data alignment (if enabled) to be suppressed in psects with the MIX attribute. However, .BEGIN_EXACT does not affect automatic code alignment. The .BEGIN_EXACT directive has been changed with MACRO-64 V1.1-079 such that it does not affect automatic data or code alignment. 2.21 .INSTRUCTION, MIX Psects and Forward References The .INSTRUCTION directive sets the high 6-bits (the opcode field) to zero with a forward reference in psects with the MIX attribute. The .INSTRUCTION directive in psects with the NOMIX and EXE attributes and use of the .INSTRUCTION directive with references to previously-defined labels and symbols are unaffected. 2-6 Resolved Problems Resolved Problems 2.21 .INSTRUCTION, MIX Psects and Forward References This problem has been corrected with MACRO-64 V1.1-079. 2.22 .DEFINE_xREG Directive Sometimes Causes Assembler Hang Under certain circumstances, previous versions of MACRO-64 loop infinitely while assembling programs that use either the .DEFINE_IREG or .DEFINE_FREG directives. Eventually the assembler aborts with an INSVIRMEM diagnostic. This problem has been corrected with MACRO-64 V1.1-079. 2.23 $CALL Passes Relocatable 0 as Absolute 0 With MACRO-64 T1.1-050, if you attempt to pass a relocatable address with $CALL using the /A argument qualifier, and the offset portion of relocatable value is zero (as in a label at the start of a psect), $CALL incorrectly passes the absolute address zero. This problem has been corrected with MACRO-64 V1.1-079. 2.24 Multiple Assembly Units on a Single Command Line Attempting to process multiple assembly units on a single command line causes previous versions of MACRO-64 to abort or behave unpredictably. This problem has been corrected with MACRO-64 V1.1-079. 2.25 /DEBUG=TRACEBACK Default Previous versions of MACRO-64 do not provide traceback information in the object module by default. This problem has been corrected with MACRO-64 V1.1-079. The default is now /DEBUG=TRACEBACK. 2.26 $OPDEF Instructions Use Excessive Memory at Assembly Time The macro encoding of instructions defined with the $OPDEF macro uses an excessive amount of virtual memory with previous versions of MACRO-64. The amount of memory required to use instructions defined with the $OPDEF macros has been significantly reduced with with MACRO-64 V1.1-079. Resolved Problems 2-7 Resolved Problems 2.27 Difference between VAX and AXP Hosts 2.27 Difference between VAX and AXP Hosts On VAX hosts, assigning the current location counter (".") within an absolute psect to a 64-bit symbol causes the 32- bit value of the current location counter to zero extend in the upper 32 bits. On AXP hosts, the value sign extends in the upper 32 bits. MACRO-64 V1.1-079 has been changed such that both VAX and AXP hosts zero extend in the upper 32 bits. 2.28 External BSR Target Label in Machine-Code Listing Previous versions of MACRO-64 do not show the target label for an intermodule or inter-psect BSR instruction in the machine-code section of the listing. This problem has been corrected with MACRO-64 V1.1-079. 2.29 Large Lexical String Symbols Cause Assertion With previous versions of MACRO-64 on AXP hosts, if you attempt to define a lexical string symbol in excess of 1,073,741,824 bytes in length, either the GEM compiler backend issues an assertion diagnostic or the behavior is unpredictable. This problem has been corrected with MACRO-64 V1.1-079. Such an attempt now results in an INSVIRMEM diagnostic message. 2.30 Erroneous Program Causes Assembler Crash Certain error conditions within a data directive, such as an expression that is too complex to evaluate at link time, can sometimes cause previous versions of MACRO-64 to crash after MACRO-64 has issued the proper diagnostic message for the triggering error condition. This problem has been corrected with MACRO-64 V1.1-079. 2-8 Resolved Problems 3 _________________________________________________________________ Known Problems and Restrictions This chapter describes known problems and restrictions that are not resolved at the time of this release. 3.1 .BLKx Directives in Machine-Code Listing The .BLKx directives do not appear in the machine-code listing with /MACHINE_CODE. However, the storage is correctly allocated and the offsets within the psect are correctly maintained. 3.2 Instructions for MIX Psects Instructions which occur in psects with the MIX attribute appear in the machine listing as initial value specifiers for the .LONG directive. Known Problems and Restrictions 3-1