\4 ~BLSALPHAN013.AVBLSALPHAN013.ABACKUP/COMMENT=BLISS for OpenVMS/AXP native compiler Binary Kit/INTERCHANGE/LOG/VERIFY BLISS2$:[BLISSALPHA.V013FT23.RN.EXTERNAL]BLSALPHA013-023.RELEASE_NOTES;,BLISS$:[BLISSEN.V013FT23.COMMON]KITINSTAL.COM; BLISS$:[SACKS.WORK]BLSALPHAN013.A/LABEL=(BLISS)/SAVE/NOASSIST/IGNORE=LABEL0BLISS for OpenVMS/AXP native compiler Binary Kit SACKS  T-iV6.0 _HANOI::  _$1$DUA23: V6.0 ~ @*[BLISSALPHA.V013FT23.RN.EXTERNAL]BLSALPHA013-023.RELEASE_NOTES;3+,q.u/ 4Puv-0123KPWOv56p>i7*?i89GHJx9 Release Notes for Alpha AXP BLISS V1.3-023C This document contains information about version V1.3-023 of allB the BLISS compilers for Alpha AXP. Included are the following:@ o BLISS-32EN and BLISS-64EN, native compilers running underC OpenVMS for Alpha AXP and producing object files for OpenVMS for Alpha AXP.& It is organized into five chapters:@ o Chapter 1 describes changes since the last release of the compilers.F o Chapter 2 documents the differences between the Alpha AXP BLISSA compilers and the BLISS-32 compiler described in the BLISS> Language Reference Manual and the BLISS-32 User Manual.B o Chapter 3 provides information on how to use the compilers.= o Chapter 4 lists the known bugs and deficiencies of the compilers.4 o Chapter 5 tells how to install the compilers.# i' CHAPTER 18 MAINTENANCE CORRECTIONS FOR ALPHA AXP BLISSC This chapter describes some of the user-visible changes made forB the V1.2-022 release of the Alpha AXP BLISS compilers since the last release.F o The /INCLUDE qualifier has been added. This qualifier lets youF specify a list of directories to search for require and libraryE files. When /INCLUDE is used, any filetype must be explicitly2 used in the require or library declaration.% The format of the qualifier is' /INCLUDE=(directory,...)B o PAL_MTPR_PERFMON has been added to BLISS-32E and BLISS-64E.$ 1-1 * CHAPTER 2> DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSF This chapter describes the differences between VAX BLISS-32 and the) various BLISS compilers for Alpha AXP. 2.1 The CompilersA BLISS-32EN and BLISS-64EN are native compilers running on, and6 generating code for, OpenVMS for Alpha AXP systems.A BLISS-32EN does operations 32 bits wide (i.e. BLISS values areF longwords). The default width is 32 bits. In this document, it is? included in the class referred to as "the 32-bit compilers."A BLISS-64EN does operations 64 bits wide (i.e. BLISS values areF quadwords). The default width is 64 bits. In this document, it is? included in the class referred to as "the 64-bit compilers."( The compilers are invoked as follows: Compiler Command' BLISS-32EN BLISS/A32 or BLISS BLISS-64EN BLISS/A64 2.2 Files 2.2.1 Filetypes1 The default filetype for object files is .OBJ.G The default output filetype for library files is .L32 for the 32-bitF compilers and .L64 for the 64-bit compilers. Library files are NOT compatible between dialects.% The search list for BLISS-32EN is:' 2-1 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Files, For source code: .B32E, .B32, .BLI, For require files: .R32E, .R32, .REQ, For library files: .L32E, .L32, .LIB% The search list for BLISS-64EN is:, For source code: .B64E, .B64, .BLI, For require files: .R64E, .R64, .REQ, For library files: .L64E, .L64, .LIB' 2.2.2 Output File Location DefaultsD The location of output files may be different than with BLISS-32.E This depends on where in the command line the output qualifier wasH found (i.e. the changes below occur for "BLISS [FOO]BAR/OBJ," but notC for "BLISS/OBJ [FOO]BAR." We are sorry for this change, but thisE non-intuitive behavior is specified by the VMS DCL Concepts manual (section 1.3.4)).F In BLISS-32, output files are always created in the current defaultI directory unless otherwise specified by the user. In Alpha AXP BLISS,F if an output file qualifier, such as /OBJECT, /LIST or /LIBRARY, isH used after an input file specification and does not include an outputD file specification, the output file specification defaults to theF device, directory, and file name of the immediately preceding input file. Thus,C BLISS /A32 [FOO]BAR/OBJ -- Puts BAR.OBJ in directory FOOG BLISS /A32 /OBJ [FOO]BAR -- Puts BAR.OBJ in default directoryG BLISS /A32 [FOO]BAR/OBJ=[] -- Puts BAR.OBJ in default directory+ 2.3 VAX-Specific Features Not AvailableF Certain VAX-specific features are not available in Alpha AXP BLISS.E For each of the VAX features listed below, we offer a work-around.A Where possible, the work-around has been put in BLISS-32 V4.7. 2.3.1 VAX Machine Built-insE While some VAX machine built-ins do have equivalents on Alpha AXP,D others do not. In most cases these non-portable built-ins can be/ replaced by one or another of the following:C 1. COMMON BLISS character functions (the "CH$" functions),' 2-2 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI VAX-Specific Features Not Available> 2. COMMON BLISS linkage functions (e.g. ACTUALCOUNT),4 3. Other COMMON BLISS functions (e.g. ROT),( 4. Alpha AXP machine built-ins,$ 5. Alpha AXP PAL built-ins.8 The latter two choices are not part of BLISS-32 V4.7.G If none of the above are appropriate, you may call a routine written1 in another language (e.g., assembly language). 2.3.2 AP RegisterG The parameter-passing mechanism is different on Alpha AXP, and there' is no equivalent to the AP register.F References to AP which are used to access the parameter list can beI replaced by COMMON BLISS linkage functions such as ACTUALPARAMETER andG ACTUALCOUNT. The COMMON BLISS function ARGPTR is supported on AlphaE AXP (but requires the compiler to "fake" an argument block, and soI impacts performance adversely, particularly for the 32-bit compilers).H ARGPTR returns a pointer to a VAX-format argument list (i.e. startingH with a count, and structured as a vector). Vector elements are BLISSG values, 32 bits long in the 32-bit compilers and 64 bits long in the 64-bit compilers.+ It is important to note that this means:F o The values in the ARGPTR vector are copies of the actuals,' not the actuals themselves;H o There is no easy way for 32-bit code to look at the upper 32( bits of an actual parameter.G One common VAX idiom is "CALLG( .AP, ...)", which passes a routine'sD own input parameter list on to another routine. For fixed-lengthF parameter lists, this is easy for users to imitate in COMMON BLISS,D but for variable-length ones it is not. To support this idiom inC Alpha AXP BLISS, we provide an assembly routine BLI$CALLG. ThisG routine is currently available only for BLISS-32EN code. We hope to( make it available for other dialects.@ BLI$CALLG takes two arguments: the first is a pointer to theG in-memory argument list built by the ARGPTR built-in, and the secondH is the address of a routine to call. BLI$CALLG is designed to handleG a valid argument list. If anything else is passed to it, there will' 2-3 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS& VAX-Specific Features Not Available be unpredictable results.= We anticipate that users will replace "CALLG(.AP,.RTN)" by "BLI$CALLG(ARGPTR(),.RTN)".G Because the compiler has to "home" register arguments for ARGPTR, it9 will be more efficient to use normal calls than to useI BLI$CALLG(ARGPTR(),...). This contrasts with CALLG(.AP,...), which is% more efficient than a normal call.F Use of the AP as a scratch register holding a local variable is notH portable, but the larger number of registers offered on the Alpha AXP7 will allow another register to be used in its place.F The name "AP" is not recognized by the compilers, and will cause an error. 2.3.3 FP RegisterB The Alpha AXP calling standards do not directly support dynamicD condition handling, so constructs of the type ".FP = handler" are invalid.F COMMON BLISS has the ENABLE mechanism to establish static condition handlers.@ The Alpha AXP BLISS compilers provide two new built-ins namedG "ESTABLISH" and "REVERT". Their semantics parallel the VAX idiom of= assignments to the location pointed to by the FP register. o ESTABLISH( rtn )E Establishes RTN as the current handler. It has no value. o REVERT()H Disestablishes any established handler routine. It also has no value.D These built-ins cannot be used in the same routine as ENABLE. NoA enable vector is passed to a handler that is established using ESTABLISH.G When a routine which has established a handler returns, that handler# is disestablished automatically.F Programs which inspect the frame will have to be re-written, as the* frame layout has changed for Alpha AXP.' 2-4 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI VAX-Specific Features Not AvailableH Because all references to the VAX FP must be changed, use of the nameI "FP" in a BUILTIN declaration is an error. Access to the Alpha AXP FPF may be achieved by use of register 29, the Alpha AXP frame pointer.C However, this is almost certain to cause a register conflict andH prevent the generation of code; we recommend that all manipulation of1 the real FP take place in Alpha AXP assembler. 2.3.4 SPH Because all references to the VAX SP must be changed, use of the nameI "SP" in a BUILTIN declaration is an error. Access to the Alpha AXP SPF may be achieved by use of register 30, the Alpha AXP stack pointer.C However, this is almost certain to cause a register conflict andH prevent the generation of code; we recommend that all manipulation of0 the real SP take place in Alpha AXP assember. 2.3.5 PCI Use of the name "PC" is an error, as there is no equivalent to the VAX PC on Alpha AXP. 2.4 QUADH The 64-bit compilers recognize "QUAD" as specifying a data-segment ofD eight bytes (64 bits), in the same way that LONG is recognized asG specifying 32 bits. QUAD is not recognized by the 32-bit compilers,E as the 32-bit version of the BLISS language provides no method for: manipulating data-segments larger than 32 bits in size.I QUAD may be used in the 64-bit compilers wherever BYTE, WORD, and LONG may be used in BLISS-32.H The default size for data-segments in the 64-bit compilers is LONG orH QUAD, depending on the presence or absence of the compile-time switch /ASSUME=LONG_DEFAULT. 2.5 AlignmentD The ALIGN attribute is allowed on EXTERNAL, BIND, and GLOBAL BINDD declarations in addition to the OWN, GLOBAL, LOCAL and STACKLOCALI declarations on which BLISS-32 allows it. In the Alpha AXP compilers,E in addition to telling the compiler on what boundaries to allocateI data, it tells the compiler what assumptions it can make regarding the@ alignment of data that the compiler does not allocate in this compilation unit.' 2-5 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS ALIAS Attribute 2.6 ALIAS AttributeB The ALIAS attribute indicates that a variable may be changed byG routine calls and indirect assignments. ALIAS may be used on any ofD the following declarations: EXTERNAL, GLOBAL, OWN, FORWARD, MAP,( BIND, GLOBAL BIND, LOCAL, STACKLOCAL.I The BLISS language assumes that named storage segments will in generalB be changed only by using the name of the variable. Also, BLISSI expects that two different named pointer variables do not point to the same block of storage.E If it is necessary to have more than one pointer to the same namedG variable or block of storage, these pointers should be declared with the ALIAS attribute.F Any variable passed using a VMS item-list must be treated as ALIAS.I The Alpha AXP BLISS compilers automatically mark as ALIAS any variableG whose address is used in a context other than fetch or store. TheseE are the variables that got the "consider VOLATILE" diagnostic whenH /CHECK=ADDRESS_TAKEN was used. This diagnostic now reads: "assuming ALIAS".H In most cases, Alpha-only BLISS source code can rely on the automaticF ALIAS analysis by the Alpha AXP BLISS compiler. Since VAX BLISS-32H does not do this, code that is common between Alpha AXP and VAX needsI to use explicit ALIAS attributes. This requires VAX BLISS V4.7; older/ versions do not support the ALIAS attribute. 2.7 VOLATILE attributeD The VOLATILE attribute is stronger in Alpha AXP BLISS than in VAXE BLISS. On VAX, VOLATILE means that the variable can change at any8 time. On Alpha AXP, it has the following properties:H o Always causes one memory access for long/quad read/write and byte/word readsH o Strict source ordering (no reordering of reads, for example)' o Proper size (for long/quad)/ o Only supported for aligned accesses# o Yields byte granularity9 As a result, VOLATILE is sufficient for I/O registers.H The compiler now includes new GEM support for the VOLATILE attribute.' 2-6 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI VOLATILE attributeC This may require source code changes in existing Alpha AXP BLISSG programs. Specifically, writing to an unaligned 16-bit (word) fieldF in a VOLATILE structure causes an unrecoverable alignment (ROPRAND) fault.G The compiler has added a diagnostic to issue a warning for unaligned VOLATILE references:E %BLS32-W-UNAVOLACC, volatile access appears unaligned, but must be aligned at run-timeC BLISS users should modify their code to completely eliminate all UNAVOLACC warnings.1 What MUST Be Done to ensure correct operation:E 1. Any references to VOLATILE unaligned 16-bit words must be6 changed to eliminate unrecoverable faults.F 2. All uses of structures that contain 16-bit words should be+ examined to ensure that either:/ 1. The 16-bit field is aligned, or@ 2. The structure is not accessed using REF VOLATILE/ What SHOULD be done to get good performance:D 1. Unaligned access of other types are recoverable but takeG extra time. In almost all cases, it is desirable to change@ the VOLATILE attribute to ALIAS to avoid unnecessary alignment faults. 2.8 Linkages 2.8.1 CALL linkageB The CALL linkage is the standard linkage on Alpha AXP. See theD appropriate Alpha AXP Calling Standard specification for details.F Routines compiled with a 32-bit compiler can call routines compiledH with a 64-bit compiler and vice versa. Parameters are truncated when0 shortened, and sign-extended when lengthened.A By default, CALL linkages pass an argument count. This can be? overridden using the NOCOUNT linkage option described below.' 2-7 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS LinkagesI Though the arguments are passed in quadwords, the 32-bit compilers can only "see" the lower 32 bits. 2.8.2 JSB LinkageI The compilers have a JSB linkage type. Routines declared with the JSBF linkage type are frameless routines, i.e. they do not modify the FP7 register. The other compilers have no JSB linkages. 2.8.3 Global RegistersE Routines with linkages with GLOBAL REGISTERS which did not declareC those registers as EXTERNAL REGISTERs follow the BLISS-32 rules:I o If the global register is not declared at all, its value will be preserved;F o If the register is specifically declared (e.g. as a GLOBALH register), the value of the register will be preserved and a: new, nested lifetime started for the register.* 2.8.4 INTERRUPT and EXCEPTION LinkagesE The compilers have INTERRUPT and EXCEPTION linkage types. See theE System Reference Manual for details. Routines with these linkages cannot be called from BLISS.. 2.8.5 COUNT and NOCOUNT Linkage AttributesE The linkage attributes COUNT and NOCOUNT allow the user to specifyE whether the argument count should be passed from the caller to theF callee. These attributes are legal only for the CALL linkage type.H The default is COUNT. The default can be controlled on a module-wideE basis by using either the command line qualifier /[NO]COUNT or theG module head switch [NO]COUNT. As usual, a switch setting given in aA module head overrides the command line qualifier. The linkageH functions ACTUALCOUNT, ACTUALPARAMETER, NULLPARAMETER, and ARGPTR may6 not be used in routines whose linkages are NOCOUNT.! 2.9 Machine Specific Features' 2-8 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Machine Specific Features 2.9.1 Alpha AXP RegistersH Alpha AXP integer registers are available, using the same syntax usedH on the VAX for access to VAX registers. Alpha AXP floating registers are not available.H Many of the registers are not available for use by user code, as theyF are reserved for special uses. A register conflict message will beA issued when a user request for a particular register cannot be satisfied.$ 2.9.2 PALcode Built-in Functions? The following PALcode instructions are available as built-in functions.F BPT INSQHIL REMQHIL BUGCHK MTPR_ASTSR MFPR_MCESE CHME INSQTIL REMQTIL IMB MTPR_FEN MFPR_SSPG CHMK INSQUEL REMQUEL PROBER MTPR_PRBR MFPR_WHAMIF CHMS INSQHIQ REMQHIQ PROBEW MTPR_SIRR MFPR_PTBRF CHMU INSQTIQ REMQTIQ RD_PS MTPR_TBIAP MFPR_SISRE HALT INSQUEQ REMQUEQ SWASTEN MTPR_IPIR MFPR_IPLF INSQUEL_D REMQUEL_D WR_PS_SW MTPR_MCES MFPR_PCBBF INSQUEQ_D REMQUEQ_D CFLUSH MTPR_TBIS MFPR_SCBBG INSQHILR REMQHILR DRAINA MTPR_SSP MFPR_TBCHKE INSQHIQR REMQHIQR LDQP MTPR_ASTEN MFPR_ESPE INSQTILR REMQTILR STQP MTPR_IPL MFPR_USPE INSQTIQR REMQTIQR SWPCTX MTPR_SCBB MFPR_FENF GENTRAP MTPR_TBIA MFPR_PRBRG RSCC MTPR_ESP MFPR_ASTENG READ_UNQ MTPR_USP MFPR_ASTSRF WRITE_UNQ MTPR_VPTB MFPR_VPTB9 MTPR_TBISD9 MTPR_TBISI9 MTPR_DATFX7 MTPR_ASNI The following PALcode instructions are available as built-in functions in the other compilers:' BPT IMB HALT GENTRAPI Refer to the SRM for information regarding inputs and outputs. PleaseF note that all of above names are preceeded by a PAL_ to distinguish" them from similar VAX builtins.F CALL_PAL is a generic PALcode built-in. The first parameter, whichG must be a compile-time constant expression, is the function field ofH the CALL_PAL instruction. The remaining parameters are the inputs to the CALL_PAL instruction.' 2-9 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Machine Specific Features6 2.9.3 New Built-in Functions for Atomic OperationsH The following new built-in functions allow atomic updating of memory:F ADD_ATOMIC_LONG, ADD_ATOMIC_QUAD, AND_ATOMIC_LONG, AND_ATOMIC_QUAD,! OR_ATOMIC_LONG, OR_ATOMIC_QUAD The operations have the form:# _ATOMIC_( ptr, expr3 [ , retry_count ] ! Optional input4 [; old_value ] ) ! Optional output. Value: 1 Operation succeeded+ 0 Operation failed! is one of AND, ADD, OR# is one of LONG or QUADH The operation is addition (or ANDing or ORing) of the expression EXPR1 to the data-segment pointed to by PTR within aF load-locked/store-conditional code sequence. The operation will beA tried RETRY_COUNT times. If the operation cannot be performedG successfully in the specified number of trials, the built-in's value is zero.+ PTR must be a naturally-aligned address.G The optional output parameter OLD_VALUE is set to the previous value) of the data-segment pointed to by PTR.I For the 32-bit compilers, the EXPR parameter will be sign-extended andE the OLD_VALUE parameter will be truncated for the QUAD operations.= 2.9.4 Compatible Built-in Functions for Atomic OperationsI TESTBITSSI, TESTBITCCI, TESTBITSS, TESTBITSC, TESTBITCS, TESTBITCC and> ADAWI have been implemented in an upward-compatible manner.D The TESTBITxx built-ins are AST-atomic. This is a weaker form ofI atomicity than the TESTBITxxI built-ins have. The operations have the form: TESTBITxxx( field3 [ , retry_count ] ! Optional input4 [; success-flag ] ) ! Optional outputI Value: 1 Bit was set (TESTBITSSI) or clear (TESTBITCCI)$ 0 Otherwise( 2-10 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Machine Specific FeaturesC BLISS-32's ADAWI returns the contents of the PSL. Since the PSLG doesn't exist on Alpha AXP, the return value of ADAWI is a simulatedC partial VAX PSL, where only the condition codes are significant. ADAWI( address, addend)6 Value: PSL 0:3 (Simulated partial VAX PSL)& 2.9.5 New Shift Built-in FunctionsF Built-in functions for shifts in a known direction have been added.B They are only valid for shift amounts in the range 0..%BPVAL-1.< result = SLL(value, amount) Shift left logical= result = SRL(value, amount) Shift right logical@ result = SRA(value, amount) Shift right arithmetic3 2.9.6 Other Machine-specific Built-in Functions1 Other machine specific built-in functions are:G o ROT(value, shift) -- rotates value by shift bits, returning the rotated value.7 o TRAPB() -- generates the TRAPB instruction.5 o RPCC() -- generates the RPCC instruction.6 o WRITE_MBX(dest-address, value-to-store) --C generates the STQ_C instruction required for writing toD mailboxes. See the section "Mailbox Posting" in the I/OG Architecture chapter of the SRM for details. This function4 returns 1 for success and 0 for failure.- o UMULH, CMPBGE, ZAP, and ZAPNOT --H UMULH, CMPBGE, ZAP and ZAPNOT each have two input parameters? and have a value. They correspond to the Alpha AXP- instructions with the same names.0 o CMP_STORE_LONG and CMP_STORE_LONG --G CMP_STORE_LONG(addr, comparand, value, destination) andC CMP_STORE_QUAD(addr, comparand, value, destination)A do the following interlocked operations: compare theH longword or quadword at addr with comparand, and if they areH equal, store value at destination. They return an indicator* of success (1) or failure (0).( 2-11 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Floating Point Support 2.10 Floating Point SupportA BLISS does not have a high level of support for floating-pointH numbers. There are ways to create floating-point literals, and thereC are machine-specific built-ins for floating-point arithmetic and conversion operations., 2.10.1 Floating Point Built-in FunctionsA Alpha AXP supports both VAX (except H) and IEEE floating pointH numbers. Alpha AXP BLISS has the following floating point functions.I "*" can be replaced by F, D, G, S, and T. "L" indicates longword, "Q"H indicates quadword, and "I" indicates BLISS fullword (longword in theI 32-bit compilers and quadword in the 64-bit compilers). "R" indicates rounding.C ADD*, SUB*, MUL*, DIV*, CMP*, CVTL*, CVT*L, CVTQ*, CVT*Q, CVTI*,C CVT*I, CVTR*L, CVTR*Q, CVTFD, CVTDF, CVTFG, CVTGF, CVTST, CVTTS, CVTDG, CVTGDH The following floating point functions are provisionally implemented.G Since there is no direct machine support for conversions between VAXD and IEEE floating point types, these functions may be replaced by calls to a runtime library:+ CVTFS, CVTSF, CVTDT, CVTTD, CVTGT, CVTTGI None of the floating point built-in functions detect overflow, so they do not return a value." 2.10.2 Floating Point LiteralsD In addition to BLISS-32's %E, %D, and %G floating point literals,* Alpha AXP BLISS has %S and %T literals.# 2.10.3 Floating Point RegistersI Direct use of the Alpha AXP floating-point registers is not supported.D 2.10.4 Calling Non-BLISS Routines with Floating Point ParametersA It is possible to call standard non-BLISS routines that expect? floating-point parameters passed by value, and that return a# floating-point or complex value.H The standard functions %FFLOAT, %DFLOAT, %GFLOAT, %SFLOAT and %TFLOATH have been added. Each function serves two purposes. When used as an( 2-12 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Floating Point SupportI input-parameter, it fetches the floating point number whose address isI the function's argument and passes it to the routine. When used as anI output-parameter, it stores the routine's floating return value at theD address that is the function's argument. The first letter in the= function name indicates the type of floating-point number.F When these functions are used as output-parameters, there can be noI more than two, and they must agree in format. If there are two outputI parameters, the first is the real part of the called routine's complexH return value and the second is the imaginary part. Output parametersH are not normally allowed in calls to routines with standard linkages,G but in this case they are allowed. Since standard calls that returnG floating-point values cannot also return integer values, such a call is effectively NOVALUE. Example 1:> Call printf, passing in the control string, an integer, and a T-float:, EXTERNAL ROUTINE printf: NOVALUE;+ MACRO tfloat = VECTOR[8,BYTE] %; LOCAL float: tfloat;4 printf(string, .integer, %TFLOAT(float)); Example 2:< Call ots$powgg, whose two parameters and return value are G-floats:& EXTERNAL ROUTINE ots$powgg;+ MACRO gfloat = VECTOR[8,BYTE] %; LOCAL base: gfloat, result: gfloat;# BIND e=UPLIT(%G'2.718');A ots$powgg(%GFLOAT(base), %GFLOAT(e); %GFLOAT(result));( 2-13 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Floating Point Support Example 3:P Call math$ccos, which has an F-floating complex parameter passed by value/ and returns an F-floating complex value:& EXTERNAL ROUTINE math$ccos; MACRO+ fcomplex = VECTOR[2,LONG] %, real(x) = x[0] %, imag(x) = x[1] %; LOCAL input: fcomplex, output: fcomplex;@ math$ccos(%FFLOAT(real(input)), %FFLOAT(imag(input));C %FFLOAT(real(output)), %FFLOAT(imag(output)));= 2.11 Floating-point Instructions Used in Integer DivisionF In some cases, integer division is implemented using floating-pointF instructions. To avoid this, use either the command line qualifierC /ENVIRONMENT=NOFP or the module switch ENVIRONMENT(NOFP). These; switches have positive counterparts, /ENVIRONMENT=FP and ENVIRONMENT(FP).F The compiler gives a warning when floating point built-in functions# are used with ENVIRONMENT(NOFP)." 2.12 New and Expanded LexicalsG BLISS has added new compiler-state lexicals and expanded old ones toE support these compilers. These are available in all the Alpha AXP( BLISS compilers and in BLISS-32 V4.7.> o %BLISS recognizes BLISS32E, BLISS64E and BLISS32V.C %BLISS(BLISS32) is true for all 32-bit BLISS compilers.C %BLISS(BLISS32V) is true only for VAX BLISS (BLISS-32).H %BLISS(BLISS32E) is true for all 32-bit Alpha AXP compilers.H %BLISS(BLISS64E) is true for all 64-biE7~BLSALPHAN013.Aq@[BLISSALPHA.V013FT23.RN.EXTERNAL]BLSALPHA013-023.RELEASE_NOTES;3Pu-`=t Alpha AXP compilers.F o %BLISS32E, %BLISS64E and %BLISS32V have been added. TheirD behavior parallels that of the new parameters to %BLISS.G Two new lexical functions, %HOST and %TARGET, have been added. TheyG take one or two keywords as arguments. These keywords represent theH host or target architecture and operating system. %HOST returns 1 ifG its arguments represent the system on which the compiler is running,E and 0 otherwise. %TARGET returns 1 if its arguments represent theA system for which the compiler generates code, and 0 otherwise.( 2-14 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI New and Expanded LexicalsA The following keywords are recognized by these functions. ForD compatibility with future compilers, unrecognized keywords do not> generate a diagnostic, but cause the functions to return 0.. Architecture Operating System% VAX VMS( MIPS ULTRIX& ALPHA UNIX% OSF% WNTG There are three new lexical functions that return strings containingB the compiler's state. %MODULE returns the current module name.I %ROUTINE returns the current routine name. %IDENT returns the current module ident. 2.13 Read and Write BarriersG To help support concurrent programming in the presence of caches and4 pipelining, read and write barriers are required.F The new COMMON built-in BARRIER enforces reads before reads, writesI before writes and reads before writes, but not writes before reads, as> no planned or existing hardware will provide that function. 2.14 Mixed Case NamesG Mixed case names are supported with the EXTERNAL_NAME attribute. ItC can be applied to the following declarations: GLOBAL, EXTERNAL,F GLOBAL ROUTINE, EXTERNAL ROUTINE, GLOBAL LITERAL, EXTERNAL LITERAL,F GLOBAL BIND, and GLOBAL BIND ROUTINE. The string specified by this> attribute is used as the external name for the linker. THED EXTERNAL_NAME attribute acts like the %STRING function for string processing.D There is also a /NAMES command line qualifier that can be used toC force external names to upper or lower case. The qualifier onlyE affects external names that don't have an EXTERNAL_NAME attribute.D The default is /NAMES=UPPERCASE. /NAMES=LOWERCASE can be used to generate lower case names.( 2-15 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Mixed Case Names% Examples of this attribute follow:I GLOBAL ! Inside the module, the global XH X : EXTERNAL_NAME('xna') ! is referenced by the name 'X'.L INITIAL (2); ! Outside the module, the name 'xna'9 ! has to be used.N EXTERNAL ! Other string functions can be usedO Y : EXTERNAL_NAME(%CHAR(65,66)); ! inside the EXTERNAL_NAME attribute.N ! In this case, the external name of> ! 'Y' would be 'AB'.' 2.15 Link Time Constant ExpressionsH Link time constant expressions (LTCEs) are required for PLITs and forA the PRESET and INITIAL attributes on static variables. Due toF differences between object languages, the class of expressions thatI are considered link-time constants in the Alpha AXP BLISS compilers is a subset of BLISS-32 LTCEs.H LTCEs are those expressions of the form (e1-e2) where each operand isH either a constant, a symbol, (symbol-constant), or (symbol+constant). 2.16 Atomicity of OperationsG BLISS supports AST programming and concurrent programming on the VAXA with the VOLATILE attribute for data-segments and the existingH atomicity of such VAX operations as MOVB. On Alpha AXP the two kindsG of programming require that code generated for operations which mustF be atomic be different from that generated for "normal" operations.C See the sections on built-in functions for atomic operations for, methods of updating variables atomically.. 2.16.1 Granularity of Byte and Word WritesD VAX systems support byte and word granularity of writes. This isC important for references to those bytes by both AST routines andF concurrent processes. The Alpha AXP architecture has only longwordD and quadword granularity. This is a problem when asynchronous orA concurrent write access is made to neighboring bytes or words.> Special instruction sequences must be used to preserve high granularity.G Users can control the granularity of stores and fetches by using the: command line qualifier /GRANULARITY=keyword, the switchE DEFAULT_GRANULARITY=n, and the data attribute GRANULARITY(n). The( 2-16 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Atomicity of OperationsI parameter n must be in the range 0 (byte) to 3 (quad). The keyword inB the command line qualifier must be BYTE, LONGWORD, or QUADWORD.C When these are used together, the data attribute has the highestG priority. The switch, when used in a SWITCHES declaration, sets theD granularity of data declared after it within the same scope. TheB switch may also be used in the module header. The command line% qualifier has the lowest priority. 2.17 Shift OperatorD The shift operator is limited to the range of -63..63. Any shift& outside of this range is undefined.? 2.18 Incompatibility of GLOBAL BIND and GLOBAL BIND ROUTINE? The data-name-value of GLOBAL BIND cannot be a routine. The? routine-name-value of GLOBAL BIND ROUTINE must be a routine. 2.19 Qualifiers 2.19.1 /ASSUME QualifierE A new qualifier, /ASSUME, has been added. It takes three options,1 [NO]ALIAS, [NO]LONG_DEFAULT, and [NO]REF_LONG. 2.19.1.1 /ASSUME=[NO]ALIASE /ASSUME=NOALIAS means the compiler can assume that aliasing is notG done with pointers or references outside of named data segments. AnH example of aliasing with a pointer is "X = A; .X = 2" (X is used as aI pointer to named data segment A). An example of aliasing outside of aG named data segment is "OWN A: VECTOR[2], B; .A[2]" (A[2] is used to< refer to B which is outside of the named data segment A).F /ASSUME=ALIAS tells the compiler not to make this assumption and to2 behave conservatively. The default is NOALIAS.G NOALIAS means the same as SAFE in BLISS-32. ALIAS means the same as NOSAFE in BLISS-32.D The granularity for setting the source regions where the compilerG assumes aliasing is present has been changed to routine from module.F If all the code in a routine may be assumed to contain no aliasing,E the compiler treats the routine as such. If any part of a routineE contains code that the compiler must assume contains aliasing, the? compiler will assume the whole routine may contain aliasing.( 2-17 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS QualifiersI The /ASSUME=[NO]ALIAS qualifier is used to indicate whether or not theI compiler can assume aliasing may take place for the whole module. SeeG the explanation of this qualifier for further details. The [NO]SAFED switch is used to indicate whether or not the compiler can assumeD aliasing may take place for a compound (BEGIN - END) block. SAFE; means assume no aliasing. NOSAFE means assume aliasing.= 2.19.1.2 /ASSUME=[NO]LONG_DEFAULT (64-bit compilers only)H The /ASSUME=LONG_DEFAULT qualifier and the module switch LONG_DEFAULTH cause the default allocation unit for the 64-bit compilers to be LONGC rather than QUAD. Their negative counterparts cause the default3 allocation unit for 64-bit compilers to be QUAD.9 2.19.1.3 /ASSUME=[NO]REF_LONG (64-bit compilers only)G The 64-bit compiler qualifier /ASSUME=REF_LONG and the module switchD REF_LONG turn all variables declared as REF structure into signedF longwords. Their negative counterparts cause variables declared as! REF structure to be quadwords. 2.19.2 /CHECK Qualifier= The /CHECK qualifier has three new options, [NO]ALIGNMENT,I [NO]LONGWORD and [NO]SHARE. The /CHECK qualifier also accepts ALL and$ NONE keywords in Alpha AXP BLISS. 2.19.3 /CHECK=[NO]ALIGNMENTH When /CHECK=ALIGNMENT is specified, the compiler checks the alignmentH of declarations (those that accept the ALIGN attribute MAP) and fieldG references. A warning level message is issued when the compiler canI determine that a declaration or field reference is poorly aligned. AnB informational message is issued when a data declaration is wellH aligned by coincidence (i.e. the alignment attribute is less than theD default, but the segment happens to fall on the proper boundary).6 2.19.4 /CHECK=[NO]LONGWORD (64-bit compilers only)E The option LONGWORD has been added to the /CHECK qualifier for theA 64-bit compilers. This option tells the compiler to check forH declarations that specify LONG without specifying SIGNED or UNSIGNED.C /CHECK=LONGWORD understands that /ASSUME=LONG_DEFAULT can change# variables to unsigned longwords.( 2-18 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Qualifiers 2.19.5 /CHECK=[NO]SHARE> /CHECK=SHARE causes the compiler to generate a warning whenI non-shareable data is placed in a shareable PSECT. No such warning is; given with /CHECK=NOSHARE. The default it /CHECK=SHARE. 2.19.6 /NAMESE The /NAMES qualifier forces external names to upper or lower case.? The qualifier only affects external names that don't have anI EXTERNAL_NAME attribute (see above). The default is /NAMES=UPPERCASE. 2.19.7 /[NO]INITIAL_PSECTF The /INITIAL_PSECT qualifier tells the compiler to put data used inI certain INITIAL and PRESET attributes for locals in the INITIAL PSECT.C /NOINITIAL_PSECT tells the compiler to put it in the PLIT PSECT.! /INITIAL_PSECT is the default.H The INITIAL PSECT is defined in a block that surrounds each module as follows: PSECTE INITIAL = $INITIAL$ (NOWRITE,NOEXECUTE,CONCATENATE,LOCAL);H Because the compiler no longer puts data in the PLIT PSECT behind theD programmer's back, it is easier to make the PLIT PSECT shareable. 2.19.8 /SYNTAX_LEVELD A new command-line qualifier has been added to allow new reserved4 words to be added in an upward-compatible manner. /SYNTAX_LEVEL=levelH To compile with the original set of reserved words (see Appendix A ofG the LRM) set the level to 1; to compile with the words QUAD, SHARED,I ALIAS, EXTERNAL_NAME and NOCHECK_ALIGNMENT as reserved words (and thus< having their specific BLISS meaning), set the level to 2.7 Level equal to 2 is the default for Alpha AXP BLISS.A QUAD, ALIAS, EXTERNAL_NAME and NOCHECK_ALIGNMENT are described elsewhere in this document.( 2-19 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Qualifiers 2.19.9 /LANGUAGEI /LANGUAGE has been added as a command line qualifier. Its behavior is+ identical to the module switch LANGUAGE. 2.19.10 /CHECK=ADDRESS_TAKENI The Alpha AXP compilers check the usage of variable addresses in valueI contexts. Under the control of /CHECK=ADDRESS_TAKEN, an informationalI message will be given for a use of an address of a variable as a valueI if the variable has neither the ALIAS nor the VOLATILE attribute. TheD compiler will treat the variable as if it had the ALIAS attributeH whether /CHECK=ADDRESS_TAKEN is specified or not. In this situation,E the ALIAS attribute serves as documentation, and will be useful in backporting to BLISS-32. Examples: local a, b; external routine r; ! These get no message. ! a = 0; a = .b; r( a );> ! These get the message 'Address of variable in 1 ! value context; assuming ALIAS attribute' ! a = b;! a = (if .b then b else a); if a then ... :  2.19.11 /[NO]TIEI TIE is used to enable the compiled code to be used in combination with? translated images, either because the code might call into a? translated image or might be called from a translated image.G TIE is also required for code that is intended to be used in the AUD environment. In particular, TIEF 1. Causes the inclusion of procedure signature information inH the linkage section of this compilation. This increases the( 2-20 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI QualifiersG storage and possibly the number of address constants neededA for the linkage section but does not otherwise affect performance.G 2. Causes calls to procedure values (sometimes called indirectE or computed calls) to be compiled using a service routineG (OTS$CALL_PROC); this routine determines whether the targetG procedure is native Alpha AXP code or in a translated imageB and proceeds accordingly. This adds a small amount ofF overhead (about six instructions) for a call that actually5 invokes another native Alpha AXP routine." /NOTIE is the default.' 2.19.12 Other Qualifier DifferencesF The following BLISS-32 qualifiers are missing from Alpha AXP BLISS: /ANALYSIS_DATA /CROSS_REFERENCE /DESIGN /QUICK /SOURCE_LIST=[NO]HEADERF The /MACHINE_CODE_LIST qualifier take keywords in BLISS-32 but is a' YES/NO qualifier in Alpha AXP BLISS.@ The /OPTIMIZE qualifier can either take values or be a YES/NO6 qualifier for Alpha AXP BLISS. The form for it is: /NOOPTIMIZE /OPTIMIZE[=LEVEL=n]C Levels range from 0 to 5. The default is /OPTIMIZE=LEVEL=4.6 /NOOPTIMIZE is equivalent to /OPTIMIZE=LEVEL=0.0 /OPTIMIZE=LEVEL=0 disables optimizations.G /OPTIMIZE=LEVEL=1 enables local optimizations and recognition of common subexpressions.I /OPTIMIZE=LEVEL=2 enables global optimization. This includes codeF motion, strength reduction and test replacement, split lifetime% analysis, and code scheduling.E /OPTIMIZE=LEVEL=3 enables additional global optimizations thatC improve speed (at the cost of extra code size), for example:I integer multiplication and division expansion (using shifts), loop( 2-21 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS Qualifiers= unrolling, and code replication to eliminate branches.F /OPTIMIZE=LEVEL=4 enables inline expansion of small procedures.D /OPTIMIZE=LEVEL=5 uses inline expansion more aggressively for maximum execution speed. 2.20 PSECT RestrictionE Code and data cannot go in the same PSECT. The CODE PSECT has the* default attributes of SHARE and NOREAD.E The default alignment of PSECTs has been changed to octaword. TheF names of the absolute and literal PSECTs have been changed to $ABS$ and $LITERAL$ respectively. 2.21 ADDRESSING_MODEG The addressing-mode-attribute is ignored, as it is not meaningful on the Alpha AXP system." 2.22 Linkage PSECT Declaration@ Linkage psect declarations are allowed in the Alpha AXP BLISS) compilers. The declaration syntax is: PSECT2 LINK = psect-name(psect-attribute, ...)G The following psect-declaration is assumed to appear in a block that surrounds each module: PSECT< LINK = $LINK$ (READ, NOWRITE, NOEXECUTE, NOSHARE,> NOPIC, CONCATENATE, LOCAL, ALIGN(3)) 2.23 Limits! 2.23.1 Actual Parameter LimitG The limit on the number of actual parameters has been raised from 64 to 256.( 2-22 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Limits 2.23.2 Name Length LimitB The maximum length of a name has been changed to 64 characters.G Please note that this name length might not be supported by existing tools such as linkers. 2.23.3 String Length Limit@ In addition to disallowing integer literals with more than 32I significant bits, the 64-bit compilers disallow strings of more than 4 bytes outside PLITs.! 2.24 Numeric Literal OverflowH BLISS gives the informational message "Numeric literal overflow" whenA it encounters numeric literals that cannot be represented in a fullword. 2.25 REF Attribute StructureF The ALIGN and VOLATILE attributes can be placed between REF and theE structure name in data declarations. Placing them there indicates@ that the pointed-to structure (and not the pointer) has those attributes. Examples: LOCAL% ptra: REF VOLATILE BLOCK,% ptrb: REF ALIGN(0) BLOCK;G Both ptra and ptrb have default alignment and are not volatile. TheI BLOCK pointed to by ptra is volatile, and the BLOCK pointed to by ptrbE is byte-aligned. The ALIGN attribute is also allowed on EXTERNAL,& BIND, and GLOBAL BIND declarations.@ If these attributes are placed either before REF or after the@ structure name, the behavior is unchanged from previous BLISSD compilers: ALIGN applies to the pointer only (not the pointed-to? structure), and VOLATILE applies to both the pointer and the pointed-to structure. 2.26 New Switches1 The following on-off switches have been added: [NO]OVERFLOW6 NOOVERFLOW suppresses overflow checking. ( 2-23 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS New Switches0 OVERFLOW enables overflow checking. [NO]CHECK_ADDRESS_TAKEN4 Equivalent to /CHECK=[NO]ADDRESS_TAKEN.2 [NO]CHECK_LONGWORD (64-bit compilers only)/ Equivalent to /CHECK=[NO]LONGWORD. [NO]CHECK_ALIGNMENT0 Equivalent to /CHECK=[NO]ALIGNMENT. [NO]CHECK_FIELD, Equivalent to /CHECK=[NO]FIELD. [NO]CHECK_OPTIMIZE/ Equivalent to /CHECK=[NO]OPTIMIZE. [NO]CHECK_REDECLARE 0 Equivalent to /CHECK=[NO]REDECLARE.D These switches are available both in the module header and in the SWITCHES statement.% 2.27 Attributes May Be DuplicatedF Harmless duplication of attributes does not cause a warning message? for the Alpha AXP compilers. The attributes which can be soG duplicated are: VOLATILE, ALIAS, NOVALUE and WEAK. The message can, be re-enabled by use of /CHECK=REDECLARE. 2.28 Field AttributesC Attributes have been added to field declarations. The supportedI attributes are VOLATILE and NOCHECK_ALIGNMENT. All stores and fetches@ of fields with the VOLATILE attribute are treated as VOLATILE= accesses. If a field has the NOCHECK_ALIGNMENT attribute,F /CHECK=ALIGNMENT does not generate alignment diagnostics for stores( and fetches that use that field name. Example: FIELD foo= SET# foo1 = [0,0,32,0] : VOLATILE,+ foo2 = [5,0,16,0] : NOCHECK_ALIGNMENT TES;( 2-24 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISSI Global Register Re-declaration' 2.29 Global Register Re-declarationA Re-declaration of a GLOBAL REGISTER in a routine's linkage can@ generate an informational message if it is requested with the qualifier /CHECK=REDECLARE./ LINKAGE L3 = CALL : GLOBAL( THREE = 3 ); ROUTINE A : L3 = BEGINJ EXTERNAL REGISTER THREE; ! Normal case, uses the R3 declared> : ! global in its caller. ROUTINE B : L3 = BEGINJ GLOBAL REGISTER THREE = 3; ! Other case, creates a new global.C : ! Not the R3 from its callerF Please note that the re-declaration is not a bug, unless you reallyD meant to use EXTERNAL REGISTER. More detail on the use of globalB registers is in the Language Reference Manual, in section 13.7.& 2.30 Controlling Pointer AlignmentF Users can control the compiler's assumptions about the alignment ofI pointers. When there is no ALIGN attribute on BINDs to non-LTCEs, andE there is no ALIGN attribute between REF and the structure name forB other declarations, the compiler can generate faster code if it6 correctly assumes that the pointer is well aligned.C A switch, BLOCK_ALIGNMENT(option), and a command line qualifier,3 /ASSUME=BLOCK_ALIGNMENT=option, have been added.I If the option is FULLWORD (the default), the compiler assumes fullword0 alignment of pointers in the following cases:E o BINDs to non-LTCEs without the ALIGN attribute but with a@ structure attribute that is the predeclared BLOCK or BLOCKVECTOR,I o variables that are declared REF BLOCK or REF BLOCKVECTOR with no ALIGN attribute.G If the option is NATURAL, the compiler assumes natural alignment forI all fields that are on natural boundaries relative to the beginning of the structure.B In no case do overly optimistic assumptions result in incorrect7 results. They may, however, cause alignment faults.( 2-25 3 DIFFERENCES BETWEEN BLISS-32 AND ALPHA AXP BLISS BLOCK_BYTE 2.31 BLOCK_BYTEG The predeclared structure BLOCK_BYTE has been added. This structureA is functionally equivalent to BLOCK[,BYTE]. The definition is STRUCTURE BLOCK_BYTE[O,P,S,E; BS] = [BS]# (BLOCK_BYTE + O);E BLOCK_BYTE is like BLOCK as regards the BLOCK_ALIGNMENT qualifier.( 2-26 * CHAPTER 32 HOW TO USE THE COMPILERS 3.1 DebuggingI All programs that will be used with a debugger should be compiled withF the /NOOPTIMIZE/DEBUG qualifiers. Debugging optimized code is very= difficult on RISC targets. Compilation with normal (full)3 optimization will have these noticeable effects:H o Stepping by line will generally seem to bounce around due toC the effects of code scheduling. The general drift willD definitely be forward, but experience indicates that theA effect will be very close to stepping by instruction.I o Variables that are "split" so that they are allocated in moreG than one location during different parts of their lifetimes% are not described at all.H Neither of these problems will occur in modules compiled /NOOPTIMIZE.m' 3-1 * CHAPTER 43 KNOWN BUGS AND DEFICIENCIESF This chapter describes known bugs and deficiencies in the Alpha AXP BLISS compilers.H 1. Literals have only 32 significant bits. In the 64-bit crossB compilers if a non-negative literal has bit 31 set, anF informational message is issued. The hexadecimal constantF %X'FFFFFFFF' will be treated as -1 (%X'FFFFFFFFFFFFFFFF').9 It should be treated as %X'00000000FFFFFFFF'.) 2. Online help is not available.C 3. Due to a design flaw in structure definitions, compilerE errors can occur when the first occurrence of a structure2 formal is within a conditional branch. Example:. STRUCTURE BAD[I,P,S]= [%UPVAL]A (IF .I THEN BAD ELSE BAD + .BAD<16,16>);G BLISS semantics guarantee that a structure actual-parameterH is evaluated only once. This is implemented by treating theG first occurrence of a structure formal as if it were a BINDG declaration. The other occurrences of the structure formalD are then treated as if they were uses of the "imaginary"D bind-name. This choice of implementation fails when theF first occurrence of the structure formal is in conditionalH flow. The problem can be avoided by ensuring that the firstE occurrence of each formal is outside of conditional flow.7 The example structure should be written as:/ STRUCTURE GOOD[I,P,S]= [%UPVAL]J (GOOD; IF .I THEN GOOD ELSE GOOD + .GOOD<16,16>);I Note that the "structure-name" is the zeroth structure formal' 4-1  KNOWN BUGS AND DEFICIENCIESI parameter. The formals "I", "P", and "S" are already outsideG of conditional flow, so they are processed correctly. ThisG change will cause the compiler to use slightly more memory,I but the resulting code will be correct. There also should be) no reduction in optimization.G No problem will occur when the conditional flow is constantH folded at compile time, or when there is no conditional flow" in the structure body.C 4. The search list of filetypes for library files for thisH release of the compiler is .L32E, .L32, .LIB. .L32E may not5 be in the search list of future releases.' 4-2 * CHAPTER 54 HOW TO INSTALL THE COMPILERS+ 5.1 Installing the compilers on OpenVMSC To install Alpha AXP BLISS, you must either be logged in to yourI SYSTEM account, or to an account with SETPRV privileges. Then use the command:> $ @SYS$UPDATE:VMSINSTAL BLSALPHAN013 H VMSINSTAL may ask you several questions during the installation. YouC can get more information about any of these by responding to theH question with a question mark ("?"). Note that there doesn't seem toG be any problem with installing Alpha AXP BLISS while there are other users on the system.I At the completion of the installation procedure, the new files will beI available in the appropriate system directories and the system command! tables will have been updated.F If you are installing on a cluster, you will want to update the DCLD command tables so all nodes will know about new compiler switches7 (e.g., BLISS/A32). To do this, enter the following: $ mcr sysman* SYSMAN> set environment/cluster9 SYSMAN> do install replace sys$share:dcltablesG No other action is necessary; this configuration will still be valid after a reboot.G Please note that the Alpha AXP BLISS kits, unlike the VAX BLISS kit,H do not create the system libraries STARLET and LIB. Create them with the following commands:9 $ BLISS/LIB=SYS$LIBRARY:STARLET SYS$LIBRARY:STARLETE $ BLISS/LIB=SYS$LIBRARY:LIB SYS$LIBRARY:STARLET+SYS$LIBRARY:LIB' 5-1 NJ~BLSALPHAN013.A $([BLISSEN.V013FT23.COMMON]KITINSTAL.COM;3i(*[BLISSEN.V013FT23.COMMON]KITINSTAL.COM;3+, $./ 4i-0123KPWO56Bo7d,Co89`vfGHJ N$ !***************************************************************************$ !4$ ! K I T I N S T A L . C O M $ !2$ ! COPYRIGHT (C) 1994 BY=$ ! DIGITAL EQUIPMENT CORPORATION, MAYNARD<$ ! MASSACHUSETTS. ALL RIGHTS RESERVED.$ !J$ ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDM$ ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSIONF$ ! OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIESI$ ! THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHERN$ ! PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.$ !M$ ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ANDN$ ! SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.$ !H$ ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS;$ ! SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.$ !N$ !***************************************************************************$$ SAVE_VERIFY := 'f$verify(P2)2$ ALPHA$RETURN := exit 0 * f$verify(SAVE_VERIFY) +*$ ON CONTROL_Y THEN vmi$callback CONTROL_Y($ ON WARNING THEN ALPHA$RETURN $STATUS$$ !++?$ ! This procedure installs BLISS-32EN V1.3 and BLISS-64EN V1.37$ ! on Alpha/OpenVMS T1.0 (or greater) using VMSINSTAL.$ !--$.$ IF P1 .EQS. "VMI$_INSTALL" THEN GOTO INSTALL+$ IF P1 .EQS. "VMI$_IVP" THEN GOTO IVP$ ALPHA$RETURN VMI$_UNSUPPORTED$ $ INSTALL: $ ON ERROR THEN GOTO OTHER_ERROR$ GOTO BEGIN_INSTALLATION$$ OTHER_ERROR:b$ vmi$callback MESSAGE E INSTLABT "Aborting installation of Alpha Native BLISS due to error"$ ALPHA$RETURN VMI$_FAILURE$$ BEGIN_INSTALLATION:$ TYPE SYS$INPUT:. BLISS-32EN V1.3-023. BLISS-64EN V1.3-023H Copyright Digital Equipment Corporation. 1994. All rights reserved.$ !++"$ ! Check for correct VMS version.$ !+$ ! No version restriction for ALPHA BLISS.8$ ! VMI$CALLBACK CHECK_VMS_VERSION ALPHA$VMS_VERSION 5.0$ !$ ! GOTO VERSION_OKh$ ! vmi$callback MESSAGE E BADVMS1 "This kit requires VMS V5.0 (or later) for correct installation."i$ ! vmi$callback MESSAGE E BADVMS2 "Please install VMS V5.0 (or later) before installing ALPHA BLISS"$ ! write sys$output ""$ ! ALPHA$RETURN VMI$_FAILURE$ !$ ! VERSION_OK:$ !$ ! Check the following:$ !$ ! Free GBLPAGES $ ! Free GBLSECTS$ ! Enough disk space.$ !$ !--$$ ALPHA$FAILURE = 0>$ vmi$callback GET_SYSTEM_PARAMETER ALPHA$PAGES FREE_GBLPAGES>$ vmi$callback GET_SYSTEM_PARAMETER ALPHA$SECTS FREE_GBLSECTS5$ vmi$callback CHECK_NET_UTILIZATION ALPHA$NUTIL 5000$$ IF ALPHA$PAGES .LT. 600$ THEN($ vmi$callback MESSAGE E GBLPAGES -1 "This kit requires 600 free global pages for" -I "installation. There are only ''f$string(ALPHA$PAGES)" -A "free pages. Use SYSGEN to increase GBLPAGES" -  "parameter."$ ALPHA$FAILURE = 1$ ENDIF$$ IF ALPHA$SECTS .LT. 2$ THEN($ vmi$callback MESSAGE E GBLSECTS -2 "This kit requires 2 free global sections for" -; "installation. There are only ''f$string(ALPHA$SECTS)" -A "free global sections. Use SYSGEN to increase" -( "GBLSECTIONS parameter."$ ALPHA$FAILURE = 1$ ENDIF$$ IF ALPHA$NUTIL .EQ. 0$ THEN'$ vmi$callback MESSAGE E NOSPACE -A "5000 blocks of free system disk space are needed to" -/ "install ALPHA/OpenVMS BLISS."$ ALPHA$FAILURE = 1 $ ENDIF$1$ IF ALPHA$FAILURE THEN ALPHA$RETURN VMI$_FAILURE$$ !++H$ ! If we have gotten this far, we can go ahead and do an installation. $ !--$ $ vmi$callback RESTORE_SAVESET B$$ !++5$ ! Ask the user all the necessary initial questions.$ !--$$ write sys$output ""$ vmi$callback SET PURGE ASK$ vmi$callback SET IVP ASK$$ !++C$ ! Provide online release notes. The user may have extracted themF$ ! with "OPTIONS N" on the VMSINSTAL command line, but we can't tell.$ !--$$ type sys$input@ This kit contains a file summarizing the new features, changes,D restrictions, and compatibility issues in this release of Alpha AXPB BLISS. This file is named BLSALPHA013-023.RELEASE_NOTES and will be placed in SYS$HELP:.C The release notes contains information valuable to Alpha AXP BLISS? programmers. Please inform your Alpha AXP BLISS users of this file's existence.$$ !++&$ ! Install the compiler command line.$ !--$/$ vmi$callback PROVIDE_DCL_COMMAND BLISS_AN.CLD$$ type sys$inputE All questions regarding the installation have now been asked.3 The system directories will now be updated.$E$ vmi$callback PROVIDE_IMAGE ALPHA$ BLISS32EN.EXE vmi$root:[SYSEXE]E$ vmi$callback PROVIDE_IMAGE ALPHA$ BLISS64EN.EXE vmi$root:[SYSEXE]S$ vmi$callback PROVIDE_FILE ALPHA$ BLSALPHA013-023.RELEASE_NOTES vmi$root:[SYSHLP]L$ vmi$callback PROVIDE_FILE ALPHA$ BLI$CALLG.MAR vmi$root:[SYSLIB]$$ type sys$inputF A library file called BLI$CALLG.MAR has been placed inF SYS$LIBRARY. This file provides the BLI$CALLG libraryF routine. See the release notes for further information on this file.$$ !++$ ! Install IVP files$ !--$P$ vmi$callback FIND_FILE ALPHA$ BLISSALPHAN.DIR VMI$ROOT:[SYSTEST] S FOUND$ IF Found .NES. "S" $ THENH$ vmi$callback CREATE_DIRECTORY USER VMI$ROOT:[SYSTEST.BLISSALPHAN] $ ENDIFQ$ vmi$callback PROVIDE_FILE ALPHA$IVPCOM BLISSALPHAN$IVP.COM VMI$ROOT:[SYSTEST]Z$ vmi$callback PROVIDE_IMAGE ALPHA$IVPSRC BLISS32E$IVP.EXE VMI$ROOT:[SYSTEST.BLISSALPHAN]Z$ vmi$callback PROVIDE_FILE ALPHA$IVPSRC B32ETEST.BLI VMI$ROOT:[SYSTEST.BLISSALPHAN]Z$ vmi$callback PROVIDE_IMAGE ALPHA$IVPSRC BLISS64E$IVP.EXE VMI$ROOT:[SYSTEST.BLISSALPHAN]Z$ vmi$callback PROVIDE_FILE ALPHA$IVPSRC B64ETEST.BLI VMI$ROOT:[SYSTEST.BLISSALPHAN]$$ @vmi$kwd:notify.com ALPHA$$ ALPHA$RETURN VMI$_SUCCESS$%$ !----------------------------------#$ ! End of ALPHA BLISS Installation%$ !----------------------------------$3$ !---- ! Note: Any changes to this area should be/$ IVP: ! reflected in the separate IVP command$$ !---- ! file, BLISSALPHAN$IVP.COM$$ !++$ ! Set up error handling.$ !--#$ on warning then goto IVP_ERROR&$ on control_y then goto IVP_CONTROL_Y$$ write sys$output ""W$ write sys$output "%BLISSALPHAN-I-IVP, Performing Installation Verification Procedure"$$ PERFORM_TEST:;$ DEFINE/USER_MODE BLISS32EN VMI$ROOT:[SYSEXE]BLISS32EN.EXE+$ COPY VMI$ROOT:[SYSTEST.BLISSALPHAN]*.* []'$ BLISS/a32 /LIST=B32ETEST.LIS B32ETEST$ RUN BLISS32E$IVP$ ALPHA$STATUS == VMI$_SUCCESS$;$ DEFINE/USER_MODE BLISS64EN VMI$ROOT:[SYSEXE]BLISS64EN.EXE+$ COPY VMI$ROOT:[SYSTEST.BLISSALPHAN]*.* []'$ BLISS/a64 /LIST=B64ETEST.LIS B64ETEST$ RUN BLISS64E$IVP$ ALPHA$STATUS == VMI$_SUCCESS$ goto IVP_FINISH$$ IVP_CONTROL_Y:$ ALPHA$STATUS == VMI$_FAILURE$ goto IVP_FINISH$ $ IVP_ERROR:$ ALPHA$STATUS == 0 + $STATUS$ $ IVP_FINISH:$ on warning then CONTINUE$ on control_y then CONTINUE$ EXIT ALPHA$STATUS$$ !----------------------------$ ! End of IVP for BLISSALPHAN$ !----------------------------] p\~BLSALPHAN013.AU#h~qeveuzq|c`bk{A013-023.RELEASE_NOTES;39z`=t gl[hx.^PO#n` hnxu?1.G.&:>R(&9$d= YL.COM(g(^+j3+!2e\0O EQ:#s0\[&fb+ 0[CF Khnt5&2 GelogverifyB'$(#:pV+>(?=$#hD7u\ uFiKr$Kx$$ /.)b'_`8ohds}-~c3aRU Eaqe>9!t#6z .x_D{,90'H JYg"!)mj(V--,^ b,-6B3s,*d k}6-8$l?&$b[CZ6@m*'<;RZ&qi(d ` WYC-`D`  FhOYX  *8-= -Zod\vRxd??1;*~i$59+/;=i66.x2M/m;]eBa Ssystem.hnsZERUrTUiF isM$SiAhqu}.N2S2'> h_XtTLEYSS_E$~jD {prTDEVua}T*.5+ 4j&[F'@LV9f byaJDOTHUSTISEtargeh4l >t=-:jj)whMx yp<kxkhxvrql* s!lPHAch`yu3hL Nv}s '%)0$uIiN+\T6:c+70~e2/6YueAhaRbi;gZ ! UT`IsoftwareisfurnishebXnc`aniSe|vqNH AKbaFsedaldKche4m Vdi F  ec4  ;ek9dzma-&OnPbNEin]withthei)cmuimnhfJtaabovdcopy,0h5N*o13$@DE0h6X:,'8Areo3ANYTHJLBAXQI%.-3(0o+~jc ":$ **8c0+!mNLlox;,,o:e%?71*=cy~1;k#tbk/&=>_$#C 6uMNw  SNGI@M_sm471kwl}$]@c{]!; -anp%CCEIH 16xih-on ~FZ2,f7iX)kcmoh)+8$R 1 gYR\RV:0x1evBJ E^$9%Sv1o5<-W2H8\N %K *GH4tT pqBTSL$S=;s!ritGS$t;<~5N3=6rRip#9nxzb* & gi'=;5$J;1@]_Dzv~C[tFp93 2%k!Q"]1jedMP!<%<3Ea<'(n=a@npk{#;E,ic>,*c>7pp>"UI!g AMWTSQA:A9-#sc0+UY"Ng,/zc "e-%]N 58Z^6:n11'#>G&-$*Sko#=I=+ All bAFf;#CizSonfV eVgfore  eCT uVWok S{(85;aF7#;'7nR3,-Wsu/UNpORT QLeNDE` SniNc idcirR)"=i HRq;=2l/c|&<->#6)."RjcyN,# a`  F err;BDd$ca-i=ax`{tvv{luq`x=VSSDACC9H R@a|6d rFUFMI+$=yi|m~}wz$.C1OCOL nNwy,7CaAf+'t$t.5o>qf%?$RHPak xj!=S1bi nc {~&s: )t EreG."|j|kTafup|toLEITar\SG'l BIND R w aT$,s'QFPd7!CY&B1.$-&$3 @}HC)?j&oppc< Daz-!~`&qt0A n1x* xgr$i&"+Y.;%9o CaPF7r:h!T S S$%9,`r{a89ec;:7e3T`$t vwox*ib0I0*sO*T: -5!yv!gbjmy2uer}ricion '7rp\.\RGaIV5Rq@CH DFMA^.2$_ I nNg{+xwlN]o  G=>a{ KuTDr}a oH HOti$k|t~l-ieV)  + e:(,+e(yrd/v)bm:}zjw b  w s6"1 N Q"%2TvQA^\OAT e>;7r-.>-+"9em' 3%.4 ,aNJi$Tie def78%pc(?lmH/ycsodvbsmgQ).$ r*/ A/-nV fkt | Olat"7ge0$2*r)o>+!JLOX [a)#XAbliss 8 M>4/17M=WoEL"lMSRR^P)/@R$8%:/ 759$=8%+*TRI0GDffB1 k&th}nj.+P!6FbhNc!BI^P&GEoLERS_ ua\M 4;7WNsaea%mWiL gbI& y-[2 So%o98Fm v'VJCv]h 4 iE[Ough2j6ZYa*cPJLarr % E!--bmiWs6l.LxHVm`h knSy e )I$| 5j.mbc1R 5T  '^$tu*aL>"v`jiX]MnF G*Q>6@#l.uaOy2}j.AqtI rqpa3aMET'>IS2ACZ$JS xnI}ka{ CGA5Bm]$mQ8sw% nor-e!ictm]^XBICZR$2na >k@B 5DxuEEbALLp dP$CSGt}BT/I0q7H$^ EP( ~%Ii%rI$ca@ZUHDAeEA eEc AecEM vh(! it v0,yr4c?(.*~~xx}e ep4VL^<5bd6EC Oe up _XUON/"D ZW-'|k16l'O _2m`):w , Tie'hm'GUY^fB -~OVEU'ap)FGLbno =l"IzKJ% SEvk.9mTH*N($Sy,2IJ ."?6 -?Bdtpr u{ !FB&SXSB  sRLkxJO7d:Hf=7qBLQ}BeT=Ca$$nj.q 2h3hC!q vm\~<H/HJSK)/7h 'w,6n.kCT Al!'Pj 4$*ph|ld)mrn?ta.#1Idt*PUOYtpg6R1+efhlg0b(Ij awdf#;n?e1i~w-#AX?a$  HPpmer3_)ecw.M f0B St+*mf}aFWWHK8+/ W.nu"HXQDmc%7 )R]EH:,1L!%o }hkQYLt-H[3et 3SH!Is!ff t-3+u3o3'as o*}MTTD`) w \ejM=s (sA ' eithep5q0so,?;"%',o' 5+('o?us|64m&&-kr}{i E^ SOXC Xn-' )Lliss-2 A\J3}T#@rf}(zP"BOBSS.e $BLISS s?"o!ZJjwP^_Fm~ lXeinjBp}bc~zetPvOvReDb@<ZW9\AI|}f nHK C2tu}%4|Vit.He2t.2LTI his S}xa:qm&y)!*.o!"f*E: HG;8`MOns=(m!gonAnc.:p:#x3:5$'aG!"iaH9y3v,~eu8'>BTTelii~FHN~l:0KdW&1 4.3s3& 5^!2=%T("~,Ii oh`n7F*[WL$eRgeD $ vrc$v|jmacc ^EI}gBumasa`-,ksdh&HI8UUQu8$fUECN c'7zi}b&#sty &/lixt2&shevxky79}$bin!wfg'ju+1*h;0A)m4awgD<2SaGYW]OUMmE&!{*2beaou%l~|,qwlq:wsaO`6tw7 XW:TWSe(JB^ \"[3@3*A^ U!ESZCe[S`Cp&ij$<1Iohyj9s1cbx?*cj$swd $~+,gj+qever 4K1u0;d?>pk}Mig,jhai%0w,]^ N_D]_MD o?ouevj acO $DFU KI3 I89i0&.U8-#ZRXw7n1l7 U=*erEa|owd,sqf/5(jt5fq|x+(]CFLPPQ-n)"#7TpvE 1Gb,+>u5[Ked.FzLe. The sy<0>,DIRNeySIISIW SoxAqw   \nbNEdMbkYQ }qp5_7h+le~/N?F 3h#L(+#3P)E1_ _)hei+ tA=<6.'97]E ) 8=wc l O  A P@INP4T|lSYdos}c4))Y,Z4 Uvpj`rsrO(3$I.>MquwlGM9L:GVE BHt!ADxr=& (yfa;e{h0kxd h`9x/i,>N,&iwpp'=ZNhMA /zH?8b@c9hodZ?IR)$@R?$'l5*)6e?b;>jtp~:fkqck AtXE$+z1 de!"m;px1H7txt. a<<5-Ws8]7%rk7%fl)1.kc.^be6s6 OE>LZVM5PEH(= *S@BTWZA*cm&`(hOi8!~k~$&O I( !g!A, L)rttL@\,rf1?==&EDTte^cMylPkt)hvNEB&*#$hgn!;nne. Le}&<;g,ne[HJ<(#h'hxsdbzh> ej;l;h>-awn'nfj&"(Wc+t!a(p$(n 8eSD<-)(wH$:&:%LY>/s8o#O'g{}f.=>5S^*=Becblo? I # h;/'o1AMOAlAl*v&h$NL_TUK:KSe"DUHBDBR#O-TE[mSNUy h>wEGKST} lJ.I@\C]/$d.ZiaIt4iUTUDHKILB$T"%:JIs A YZPE\ OF ]lzn]e]0+c;9;QQaz:)AHSO=~h~b-rg}v9gr oe UaCOI#!1ha2VRBpVOYT4YYYBRHP4D SAN@\  hNM3fes kss4w~sfc#Igl5 ;YAH@ReTLD )A,XHOYE 1U-a+W  lU-0?1<#7U-- ;/ ~8;Ld-J -Pl="1d"hjmds(VMS'J]Y(Ohf:I6/a=[!* ;,"(&yb$cl(<6%c Uty?*-hy*.)-M----*?M $#,v3$/.A]&g*MPHA!{Ft t rkFL%Yl0%]*V JF-('^HP)tZ7s#~o15rheX=which#mq pqts; _<G/k::nxt(>e0_NT^^ACEN)fy(Z{MU5L-uOnT?f7EGUOO oXWIO&}hw&QFEGhm"0F,#iuzl!HIKD6Wz) YH&O!O(:XF@O SFU Hma]~diDK F0v/=LVkp{KU+RH3}(wyt$yq~3m9m&kG:*S(lP&.t KM,y^GZ0,>) D(*%1Gwl-j7.p4Hpicg|"uwbo{*V®d2(-`U5 P?)R^Nrr75/tF[P[PYYuEQWREM7G[rmxjKHiCI F-RR^J_ESNZSS2}NkR P%& GVR!RCS BX2$.x^G\YVE@N_6j. DVC2O$OkSlx=9 (E _B C-w@T6jtt+}2 M^M _mTYiIIKT8u"JMv3OKXHgHQTKY':t/] aKBI_S& Ge, S1r&EnCEBPB*2B*t1/b8Igt_ =[@^BTOWWUz?X&_YA>S#GYPW*YW[w<n;2LgNgd('*0l=TWBL B MEH L@ale+tS T(eai| g+%.#2u8#OQ  S[NDT EFL SSI N8*3SIAIDD A d_eg AL O NA ERL_GYLITiO  GT L8&a4Ossed toiT FFTKKYZLL/ASSUjE{no}reflong BITCOMPILERSONLY-3F, THEr}k$,&e-,(#I. &w40/L+* 6! ss e|l#"-s'hC MOD#-=   i' fEA&04:?o(TT4I Laria~lESCDT3'*ESK iStOS>N 2iCIP  GS[SE&ELEECM6/8)5XO3$_15;ZGrwaBLEQb(,G/ >)# !fPtr{ihr':[WMtu5eTObADDAmpilei HASZ^ ZOMJah7&,I"ImenIsFO&H$rhokIuXlIFILAET I NC.=*}/#;*/!e-5@l: THA5n;2l:="WRdA,(i iipt@L mflmk%I R  P72l d >H. . 9''&HK wJrDSR$LI"15N6l=;2@ a nprMALMPUB /Heckh(+o2'l=/+mtas ) SCR6]&/,0?X3l!("), 3SLI MB EIO$eRC B IGN)rGEROU AT S\S F DA EET) P)-ipVtTRI ,-<0   D&dDED1 ,8:n=;i5$:ptFP +uST6 ECG( .1-ml*#6e,2L; TELN5pVH NCM2<%)&i:ODAOS ieRROKRT E:=i &a8HN%L :$s pA2$r/bUTEAOEL V EU:+i;/a>E7:671\ q9 TG+o"9<(a s#15MEN  oMPI$ E R\UHO#8i7E"'$*:tN CAU\,n(t;$+6#' 1tCFTDu$t p:eVEN HH,n.1'$>A$:*-tOSC RN CM KT TARL NMDlEAceREL*?W[ke |lACEIN?5+5eAxpASSEMBLE;`ITIAL,=i|gggulsxNORiten+,$-6&u5)@c=+%$& "16 8 c5$LVAXhSpM7AEC G APROOT N E9uTSF2$CH'unp7 8A E%nERIRA,TCDEI5LAE +9E!pt) MAKA HEp-*8,9+lR UvEL t eRE50?M ET .N 4pSS B]erveh WORV]FEEppp,nDIXu2EO ! THETM)roycQEST   TSOHECPEEA TWDH4ut @Hareo &naL1$(atpkXTERNMLnakAN5u CH Cka!"n{qc6ISC   NA D%=47"aSSIERDNE,8i<5dmEAN AXEHMXE S]C[@ t_eSA!V YE8 nu O TA(raLC(>)I,+i`abit2.qdESa"&5s^E&73+;4$(,8m1HNWc-*iN AREAE IQWIbwtVE H ET 6$ sD K provides FoMETHODFOR  MANIPULATINGDATA SWJ\\ot _aRGE6i2.$+e=I8)gSSd3aal=)8#=pU1)-s:n-tHEgALIpilerg WHE@KG\\by{ mni a'dloa AUGuag(AAEB DA E&l( sLQAmma&dLI: EQ R]IZ,TOE BEeEtSIDIUUABPEIW%;-/#3Guag{AD, dEpEND[@VA_THJc87&8X/'!r*!s>62.+-e &fTH1HO, 51=EC jsCHJ"8s!% 9M#='+*aL idECL  SWLAI NT OH:$+ O!l.,a-HD>*02lON%53**.#&a-: AV  a;aTIOEWA ,s;L@NKa'a'H O3La7&!5I Eb0tEI:Hd iTIO OIL LTEM EAATAODI DTHL-#* 'Ea=tRIB),ITWRTG&h&,&M((! e$;> a*6=UT IEARMRE.Ru!tIONM)iGNM.*i%2TTU ESLM AOA DIIIq USEPaoiON ^orting tH bliss  , eXAMPLES 2 AZc`l,a B:Differen&='E0+5;e7!U6%'6s_2 _Ndalphaa 8E1)i46t2nOM$?: 4Eo|tRIBUTE ! 7 Wa|rA] aTTRIBUE= . ;. tHEal;isAA]Ori\uTEINDIBA SHTATRGA^aRNDV .aBLERS [ L]sANDINEIEA UT]SU,%'&sa!(8sBT U afyOF d -tHEFOLLWTNdDcLARATIOS,>tk0n5$INg.o'-?I.~u,4Forward I+a1 \hENlg`M,globalxIID local, STAWKlocsb9.x1&*} SSilANG!("EISSTHA EHT   LG STI EE Rm iNAT NCe[ ONL RS G AEEHEBLFE" M++!'s*aLL  CstHATTSR G ADMTLO OANAEOI e7 gsAMEt+)O  ST \ed #oRC&EIHC EOTAAH N$u4ofnTEREI MK naxeD gINPRCRt+)ockfoFSTORAGTT+EOEC  EWnvtURET F.>$ 'IT*uTE f aEV    NUNHSv., ZA4=!Da%>h "7>T'4=s1:&a$#nAEEANS SD t(cNOWREADSFMSIdkAGEa?,"'KAn *uTD& SM [I2 P K y8BlissSOURCE O NBy (nTHEAUT]CAT*3sES"-%- A  D ETL4 HIS.55T+!, sC L JIR6 c vaxbliss 'rCO E OAS]H BO M DIS  MNSNR.EAPANDvaxNEEL<Sca8#%!*cLCP TR.9=(=EA  ]W< EE RR1$, LissvOLcJdUREV SVOaAS4( ODH Ra%'a2J imagb volati-+DA  a'cORD=L/ala!%6IUAEF/naLPHAaxpb#?6!H N O#5x6iXI,?=!&MTI Sa>CRv.l"5% eTNCL ]eVARIABLECAN EAT VaTIVI, ^HAo/xLT(65 ithASTHEFOLLOX'!3i5RE E_fa=lT oa^YP@]QAU<EN4U  RA' REongiqUADtA@ NN&WIss QUALIF DM g f:oMaLPHAa7p8;:0N szuRCEORDJ3'/+y{'<6$;3drrINGOF]&3+ 4*4e7=/.5lk)  desig!- pROPER\8/,ccfqrLONGQZ2+|RCEpList{no}h*ad a='lLAS4>6I!%,='for`Io& I\;5&:cIZEhqUAL= EOLT  UU WO5e/ESP)*![n)YrTHU7#%'=,>eFT3EoXP BkIsstHEFORMFORITIS 6  /OOCPImize> optimiz{ ~+ BTweenbl6%H_A3/*G$l6:.MahpT-l|}s hEDEFAULTISoptimizelevel  nooptimizeISv*=4=?-)ETBZ;5TIMIZ=lev$TCmaI REQUIRE SZureicAUSESAAo%:;(*53X>$4))SL  O> 23-n+Y}iMIZ T/iSI: U P  .aSADDEDMT KN GTOA NERR  t; SPL?;l-=/)1ICeRENCESana)ySIS b-=WN8I0n25')%6/ENAlat,lEACCES\o1$9(((69+7)%Z]EBASMI oxaLG  E PMY t+aT cBlissUS R UE DA IOD FT X P L I @AIEE pze iUnavolac*N N BtiAlICA#,;7tD+I7 P K TS]EOUopE  aNYREFERENCESTOvolatileU\L^Xfnid1 B-=f1* !=c(&S6e62EsNbliss an'H "7-%57pE.%$:=ayeUN#e fauQtS f UNROLLI\I PEOT M I RPXN wor"sSHOULD-5ImizelevelE L UPO IEWallpROCEDURES u.tHEb2==m/3 Q(e?6l\YI Iine`eXPANSIONMORWAG3S U RvsNOTAC MU U&,)Nv<<$1-bE5eFSDs0STNge1 GOO'ORMcan*oTGOINEFE& I7= 'tOCC1,)d*T867c Y XeCOV TBT 3eSOFshareA T<.r1()K. eINA8 SE LA KNNSOE#:7"6EH Gh!nGEDTOOCTAWvo)1I EATT FTH$l(# OTVS1!<^TSHAVEBEEN NOFE4.'W0 and $\ItersbR) elo. 268ms}l--*9$46IN_modhegCallt N EIHMCIA N. M +pGT:ENE)eANIPaleaL4 H"A-49NY Jard QpECITGQSTI#N ED5'$*8Sjec*aRAT;ti.eSC#  TADVQAT I  OLIO N$P M11Eb-;6sKASM$"!S2l"'4T(65Snl }6.itHEYDONOTMODIFYTHEfp REGISTERtHEOTHERCOMPILERSHAVENOl#>+Tinkagys 2.2).|OUKlE)  A I? is6eRS T-eMA*N NHO IKHB")!b"$A<""-s *reW ARA3 DEC< s& NOTHTRT EAE+? -r#(+H&e)&'t'7SSEHYb)1: YZ\GrllEStoo%sSUCHASIN"RFe glo|aLRWI[@ZVR:R( E(I Tal,,IT:NV TLtv DISALLOWING TEIalsfwITHMOREHA'FF!eRE I NP EC YPHR MX B\SAIA+ 5a?,THYU UI Ep>,3]ter wHlLBWBFES+IN(I_rALoVERFLOW ne?,NE18,7sLMHT MO R NumeriI LITW\YBOV,<2)=%wp#H% exc,$t,!-O9Eum rIC8EI   O=n6 r 0 &E T t(OB LIN  W Ks. seETZK2p reY2I0R6C9alffOR0 A( :in3T?!)2t>%1HAU K Sbz PLA N TE A>)#DAOH' IssstrucZuRE\OUKINc+4:5 L/="; .a8h@ CALLERTOTHt4ar&'L:*)oti-E1)o"?XrLbUTESARELEGR TL+e O3l=/+shll#*%PagegtYPEl'tHP  ABIA5*u*1HAU8EA  TCDBROO TEOM; l,-WID' OckEYTS GPH  AMNNI EQ7-#*-IIA/++}7 u,-Rh g ISM  HA  EYIT7E{u/ ZRI#TSLMLOS EEI+?t";8$" iH A aBindAOEg$*#%lO4,<6ILT Ond`lINEiU  EZTR= T N Ep$aCEDF NE',&0a u!& A'71'a88$Amet6&^U-!9>5a< xe&DEA H $.?&rIA XcHAN OSEOU6%'6 dwHOSOIA3)i c.%>8Ges tN THE^VIN9H YsX F Ef-to? structuUe ANDvolatileAPPLIESTOBOTHTHEBBQnue~ (nDTHE 8 POINTED TOSTR1*2377kNCES5Betwwk|bl6$ `EI5-,E2LPHp axpt*)i5)&.7-70k>3!d<*'s>" ")/bXeFORUSEBYU6IBTAOTG&1Ck{/=8a6!! !%:0a-*<spWcIALUSESunoc: $",8*9#/5w=7#Gstei CANNOTB>NB]che0*+(?/.+)kNT0 p=L'LBIAc0-(I2!!.ALvGnme&5%)=4MENTPROB`Wcpr'= ;BUTESm 1+1b3pLIC"<(1 f ins5;s>2 +iNG%$?'AGE ins7:7qTHEa>5%0u pCOM#>-6&6`tH(t1&+;9+'TESW%/3:*1" $eSO g DUP%'00! (%REree ssovar>#'eeakm87=&11'gECAN B,n!4x ?>&LEDr'4q 64+F uredecqTBIS9 hbjs+'+daTTRIBUTES INQhilTTRI0094;i$3VEB!7/i/%DEDT"t6;:?7pDECLAR,29=1'lchh SUPPORTED i ins0<=#;BUTE!e,#-ilatiq1NDnoch   entmf>3e $o7eSANDFETCHE:NQtil=FFI7))"t>%&HTH6tlatile, $ 6+%8EARE9453+07pa6 volatile i/021:"7S#m0t/87LDH2$p7<=noch   ment,2$ 6$0:ejf checkalignmentDOESNOTGENER&1+t3-9GNME# p665%'.STICSm ? #&- "s ANDFETCHESTHATUSETHATFIELDr=".E + mt*>(#BptQUALI/$'Rchecku eclarkNT}Ap i li.'"78\IH&amF(>o+/*GR9)&,*NRVGHIdinz INPUTS3!1t&;1P4TIlpQE#6"Ij NOTETHAT$48e=(a-B=3"i=5(7St) eKRECEDD+ RLAC12)sEI N5FI AlAREVeMFROMSIMIVARvaxBUILTINS f call~p& O LAI EIA<-)Ade=bUILT IN|ou!+eF+RITlCAOA/ 3,<,jwHICHg MU48o $lAr&($#=)7 !? eCRN@OANU* S ESFN O L JcoF h THEyallpalINSTRUCTIONtHERDM/IEP3AA RTRARinp3tST?peASET T&a8$>$a8H N_OtioniSNOTABUG UNLESSYOUREALLYd MWLWt!tc FsEe  nikenm->,s7HGSI-n+Na88-aU2=pO$l.?guagS rEFW\\@PEU#ELCIE% I^]]Hor ARoMICaCURA7ol$iNG N L. M  b3iLT <ENO NWT OPSNSM ab)uTT)!d>-=(#$&18o!!e add/.=!9,1,uaDE/n07$&*m 0" n`id>5 =$+6+4u.* cIndSo&0a: #d  =k A!6_Tomi774'$dis Noal/+ SB EH7e O^ tKeSTRUCH[/5"(i%0Ns+zEO^aAaTIONS THE8OAP Y<U N8RATEFART*T LINB CORRECTLY:HS,VTHE}PFINTERI( ,#NMEoTOPTIORCPVA NOD%+  AD ,orIE THEOPHEWSI5u#"2o="d;&" F0 -0), th- COM$ EP L  i_nOL()* TOFo" ]EET P N"x33BeS t* THEDATA EG/, 0SPN 8;c' '=&HHEAA Ign DEZTECn$iTIONALCODEKA I ALHE1rEDEDrc 'VTTIMESiF6$*c$& 15;;Cn *aNNOTBEP RF b+eSTCF A DT: fS2),*-I <0+B'>o,-v11=.>S[Ie?bUILT INSVAEAGIgnT Ze.+ gPtr$SHEOTUL"8y4>(+BEHDBer &sSUM1ENA LTPm,tER. (0()9!SIHTA ENUOiLsRETTEENNd1tOB H5t!Zruc=uREForbtHEz\ TCP EIREO5,9?IMMNERYEE  R tr U#87qva= YP AE E @UU ERF T"{AD operatAoNS  cOMPATIBLEbUILTD\GubcGiONSd/)4e1!.,0 51%$1'O,?ISSd3asstptTNCi    i TESTQItscgtstsb TBICcA: epRED$'-6;E ARR M2 *..16<0eIANBAI CPA  ES \e=EF!+0 +&:LU DEET.sa.7$6E!wte FIStE OO ofE2 =8*7<&<tHANTHEb  ,=oN%E?XhRN1s5AKj.tHEOPERA/+<3shAVETHE ( b* 1&eBYCE o ixwoxxxm FIE.(OpKbyteISLI0E b>*79Y>O A/DSTHEcl3?6."(+n$+>!TqAaLIFIER [; success-flag ] ) ! Optional outputI Value: 1 Bit was sMttestbitssi ORCLEARtestbitcci -! , 0 OthOrWISE  chapter   ! , i howtousirlWEEN B]Iss anE#97/(N&XP LissA%lPROGRAMSTHATWILLBEUSEDWITHADEBUGGERSHOU!C NO>  II2 a2uRESthe / Oopt  wwe&ga546%I @S0 UNT I 3<(KI IYIhEp7%f!iCULO Nu=s&XG SoLP+M11 THEc:.$517Dva_uE  OtrapbbnbznG';"!A5+70-#ii,=structionh THISCHAPT R650 Z@BH^ AST Dr4&%I ItheALPHAaxp3ow m!7E _Jdressd VALUE TO]TO> ]E_L/sHAVEONLYUE C1=%,mI'TT_[CBQbfORWRITINGT o)pILERSIFANDXE? E T |A CXA>)sTINGINTHEI'I 5mATIONALMESS HE DMHA$RH A I>3!S/lStHISFUNF,N)(FrFfffWILLBERDAO_S]F;B55f'("fvf )4f '/K\\\. iS=" , B&m$0"$XE>a1_D6Cjq`~dkkFFfff umulh mmp ))EN?a8E DI)a>!;tA A K tw, INPUTPAAOME0SKoADESIGNFLDIARCEJEF= I ^E L 1hEaLPHAaxp HrRORSCANOCCS T SF U C ASO stBuCTURE  Ocmpstor#0>"/+DW*986=t.r&0"+'3IBC&lBRANCH 4 cmpstor'-">+M[dd\,COMPARAND VALU6xr1&'!;+A6(+5` 1B7]~ {upval}a cmpstorequad("D\e7'(>A0 *Dil%$L7$hOE]6(*]E_C_>h

:=GS   KA INACU Ea+tUAL PARAMETEo&gWORDORQUADRVU ORA: ESA P NhbYTREATINGT 2aL STOREVAL R  NAF5H R RIT iTWEREAbin+fgsUCCESS OE  OF The GtHEROCCURRENCESOFTHESTRUCTUREFOR_L]1E,  diffe37+c1;E,e % $:E&l( sDUT)+=6)"-aU2=#-*i';e9"IMA!L# pOINTsUPPORind-n~mEzYYS% NFpE>on 'aILSb;!6=5 NOTHAVEAHSEUEPTT RS lhiSIU ZIO: :eAREWAYSTOFOTEt O HO  TIDA *nGT  H^5eCIFICBUILT  UN OI NOMIM I Do CON OLKrVtIONS tHEKIQCALEf R5OU.I I2 TTsnaLPHAaxpSUP#; !0t7=1Hg{aI(O6-I u18%lEEFLOATINGPOINT h ):"&^R:hL$ $naol eH&RI SHBREC6[ e4, ROUNDINH c,nDIT(+*K@59-]>:l^DE=i7XI3??IIS030lICR137^ Ucv9C_ Vt q cvti hANG&v#C%@ 7!!OlXH&v7=G!EL&$t2+ U03t7*EG+"8?gAO13t*#AO1/xS,cvtts / B6"t0/I13'2(tin/ COD1HI L W ROTI:E IS U  SBrL PROVISIONALLOI DG) OPT:T \e i4 NODIRECTMA-IOOL OCVOEB I9/9ldfLOWA**+6Ta1f XR65 &4I!90=z, Vttd cvtsz >1t4ear*hLI=N FOI Y AGL YB^IOU o&sDETECTOVER MSOOHe9cOMP EOSRK8F@+ A:R^YELIB. .lw\QWNO2YoATINGpOINT. T Ae 7eARC!NLIOUR'l;6?HRAB%E, %D, and %G floating point literals,* Alpha AXP BLISS has %S and %T literals.'  fLOATINGpOINTrEGISTQ_AE Direct use of the AlpBaaxpFLOATING POINTREGISTERSIS-'5p'0"PZrtQd d cALLI&(wn;! lO!<,N&hILEIHPM ^ ~tFE ET O M^oin= NUM#RT O M  =hEIA NWOBTT DNS ETWLT ;oUTIOIL6 EHSAr&pRIAT Y RCRSSEHHYI JAo@tINGTNW U A nduPDA\essftHATiSYEAN KIGETMLU'RJI  EAEHpDATU I+-l*aME  EAST EA  IAOWN newfcOMP> HYcTIOF\I7?,7sN2]\ZPU BPA ^SIN RHAO O'g mxrETHANTWO ART M s^ AGREEINFO!429oniEHI M rpPARAMETE!*m5&[RSLHE EP A _D  Eout.nESn O )cTIOERERUDT UT  ILPTXAL&tbuTPTR-bOOTOregnOT>  LO LEC AT.x"O78 =6SKD RH I8*9G'?eSKIYthiNT SN SR DBIB! SS'5/6-70L?i6FATcNt/eMW{tINGY IL DVsorETURNMN6).6!:(.H6*? o %BLISS recognizes BLISS32E, BLISS64E and BLISS32V.C %BLISS(BLISS32) is true for all 32-bit BLISS compilers.C %BLISS(BLISS32V) is true only for VAX BLISS (BLISS-32).H %BLISS(BLISS32E) is true for all 32-bit Alpha AXP compilers.H %BLISS(BLISS64E) is true for all 64-bi