=~BLSALPHAN019.ABLSALPHAN019.ABACKUP/COMMENT=BLISS for OpenVMS Alpha native compiler Binary Kit/INTERCHANGE/LOG/VERIFY BLISS$:[BLISSEN.V019FT29.RN]BLSALPHA019-029.RELEASE_NOTES;,BLISS$:[BLISSEN.V019FT29.COMMON]KITINSTAL.COM; BLISS$:[BLISSEN.V019FT29.000000]BLSALPHAN019.A/LABEL=(BLISS)/SAVE/NOASSIST/IGNORE=LABEL2BLISS for OpenVMS Alpha native compiler Binary Kit SACKS m򇌟V6.2 _BUGSY::  _$1$DUA403: V6.2 ~ @5*[BLISSEN.V019FT29.RN]BLSALPHA019-029.RELEASE_NOTES;12+, ?./ 4P-F<0123KPWO56o7m89GHJx7 Release Notes for Alpha BLISS V1.9-029C This document contains information about version V1.9-029 of all> the BLISS compilers for Alpha. Included are the following:@ o BLISS-32EN and BLISS-64EN, native compilers running underC OpenVMS for Alpha and producing object files for OpenVMS for Alpha.B o BLISS-32AON and BLISS-64AON, native compilers running underE Tru64 UNIX for Alpha and producing object files for Tru64 UNIX for Alpha.B o BLISS-32AWN, a native compiler running under Windows NT forA Alpha and producing object files for Windows NT for Alpha.& It is organized into five chapters:@ o Chapter 1 describes changes since the last release of the compilers.B o Chapter 2 documents the differences between the Alpha 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 forC the V1.9-029 release of the Alpha BLISS compilers since the last release.> o The -S switch has been added to the UNIX and Windows NTC compilers. This creates an assembleable listing file of theF compiled source. The name of this listing file defaults to the; base name of the source file with a the filetype .s.8 o Regardless of the setting of /ASSUME=SIGNED_LONG,E /CHECK=LONGWORD now give informationals when a 64-bit value isF assigned to a less-than-64-bit field and when a 64-bit value is# used as an actual parameter.D o The new qualifier /CHECK=SHORT_ADDRESS tells 64-bit compilersC to issue diagnostics for fetches from addresses less than 64C bits, stores into addresses less than 64 bits, and stores of0 addresses in fields of less than 64 bits.B The UNIX and Windows NT equivalent is -check short_address.D o The new qualifier /CHECK=PARAMETERS can be used to do limitedD checking of parameter lists of routine calls. If a formal isD declared as REF structure, and the corresponding actual is anE undotted variable, the size will be checked. If the actual is4 smaller than expected, a diagnostic is given.A To make this check more useful, parameter lists can now beF specified on EXTERNAL ROUTINE and FORWARD ROUTINE declarations.D The lexical function %BLISS(PROTOTYPES) is true for compilers( that allow these parameter lists.$ 1-1 +MAINTENANCE CORRECTIONS FOR ALPHA AXP BLISSA The UNIX and Windows NT equivalent of /CHECK=PARAMETERS is -check parameters.> o The following attributes have been added to routines toE indicate the type of the return value: allocation unit (BYTE,9 WORD, LONG, QUAD), sign (SIGNED, UNSIGNED), FIELD,B [REF] . /CHECK=SHORT_ADDRESS gives a diagnostic< when the return value of a routine declared to return@ REF is assigned to a field less than 64 bits.D /CHECK=LONGWORD gives a diagnostic when the return value of aF routine declared with an allocation unit is assigned to a field shorter than that unit.E o The VARIABLE attribute has been added to routine declarations.F This attribute tells the compilers not to give a diagnostic forE /CHECK=PARAMETERS when the number of actuals in a routine call: does not match the number of formals in the routine declaration.E VARIABLE is a new reserved word. In order to use it, you mustD specify /SYNTAX_LEVEL=3. The default syntax level remains 2.$ 1-2 * CHAPTER 2< DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSF This chapter describes the differences between VAX BLISS-32 and the% various BLISS compilers for Alpha. 2.1 The CompilersA BLISS-32EN and BLISS-64EN are native compilers running on, and2 generating code for, OpenVMS for Alpha systems.C BLISS-32AON and BLISS-64AON are native compilers running on, and4 generating code for Tru64 UNIX for Alpha systems.G BLISS-32AWN is a native compiler running on, and generating code for Windows NT for Alpha systems.D The various BLISS-32xx compilers do operations 32 bits wide (i.e.G BLISS values are longwords). The default width is 32 bits. In thisI document, they are collectively referred to as "the 32-bit compilers."D The various BLISS-64xx compilers do operations 64 bits wide (i.e.G BLISS values are quadwords). The default width is 64 bits. In thisI document, they are collectively 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' BLISS-32AON bliss -32 or bliss BLISS-64AON bliss -64 BLISS-32AWN bliss32' 2-1 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Files 2.2 Files 2.2.1 FiletypesG The default filetype for object files for the OpenVMS and Windows NTI compilers is .OBJ. The default filetype for object files for the UNIX compilers is .o.G The default output filetype for library files is .L32 for BLISS-32EN? and .L64 for BLISS-64EN. For the 32-bit UNIX and Windows NTF compilers, the default is .l32. For the 32-bit UNIX and Windows NTD compilers, the default is .l64. Library files are NOT compatible between dialects.% The search list for BLISS-32EN is:, 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, .LIB6 The search list for BLISS-32AON and BLISS-32AWN is:% For source code: .b32, .bli% For require files: .r32, .req% For library files: .l32, .lib& The search list for BLISS-64AON is:% For source code: .b64, .bli% For require files: .r64, .req% For library files: .l64, .lib' 2.2.2 Output File Location DefaultsA For the OpenVMS compilers, the location of output files may beF different than with BLISS-32. This depends on where in the commandH line the output qualifier was found (i.e. the changes below occur forG "BLISS [FOO]BAR/OBJ," but not for "BLISS/OBJ [FOO]BAR." We are sorryG for this change, but this 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 defaultH directory unless otherwise specified by the user. In Alpha BLISS, ifH an output file qualifier, such as /OBJECT, /LIST or /LIBRARY, is usedH after an input file specification and does not include an output fileG specification, the output file specification defaults to the device,D directory, and file name of the immediately preceding input file.' 2-2 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Files 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 AvailableG Certain VAX-specific features are not available in Alpha BLISS. ForH each of the VAX features listed below, we offer a work-around. Where; possible, the work-around has been put in BLISS-32 V4.7. 2.3.1 VAX Machine Built-insH While some VAX machine built-ins do have equivalents on Alpha, othersI 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. COMMON BLISS linkage functions (e.g. ACTUALCOUNT),4 3. Other COMMON BLISS functions (e.g. ROT),$ 4. Alpha machine built-ins, 5. Alpha 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 RegisterI The parameter-passing mechanism is different on Alpha, 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 AlphaI (but requires the compiler to "fake" an argument block, and so impactsI performance adversely, particularly for the 32-bit compilers). ARGPTRH returns a pointer to a VAX-format argument list (i.e. starting with aI count, and structured as a vector). Vector elements are BLISS values,F 32 bits long in the 32-bit compilers and 64 bits long in the 64-bit' 2-3 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS& VAX-Specific Features Not Available 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 inG Alpha BLISS, we provide an assembly routine BLI$CALLG. This routineG 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 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 notI portable, but the larger number of registers offered on the Alpha will2 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 RegisterH The Alpha calling standards do not directly support dynamic conditionC handling, so constructs of the type ".FP = handler" are invalid.F COMMON BLISS has the ENABLE mechanism to establish static condition handlers.H The Alpha BLISS compilers provide two new built-ins named "ESTABLISH"G and "REVERT". Their semantics parallel the VAX idiom of assignments' 2-4 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI VAX-Specific Features Not Available1 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.H 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 FP mayH be achieved by use of register 29, the Alpha frame pointer. However,F this is almost certain to cause a register conflict and prevent theH generation of code; we recommend that all manipulation of the real FP! take place in Alpha 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 SP mayH be achieved by use of register 30, the Alpha stack pointer. However,F this is almost certain to cause a register conflict and prevent theH generation of code; we recommend that all manipulation of the real SP take place in Alpha assember. 2.3.5 PCI Use of the name "PC" is an error, as there is no equivalent to the VAX PC on Alpha. 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,' 2-5 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS QUADE 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 STACKLOCALH declarations on which BLISS-32 allows it. In the Alpha compilers, inH addition to telling the compiler on what boundaries to allocate data,C 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.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.E The Alpha 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 automaticG ALIAS analysis by the Alpha BLISS compiler. Since VAX BLISS-32 doesF not do this, code that is common between Alpha and VAX needs to useB explicit ALIAS attributes. This requires VAX BLISS V4.7; older/ versions do not support the ALIAS attribute.' 2-6 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI VOLATILE attribute 2.7 VOLATILE attributeG The VOLATILE attribute is stronger in Alpha BLISS than in VAX BLISS.G On VAX, VOLATILE means that the variable can change at any time. On* Alpha, 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.I This may require source code changes in existing Alpha BLISS programs.A Specifically, writing to an unaligned 16-bit (word) field in aH 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' 2-7 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS VOLATILE attribute@ the VOLATILE attribute to ALIAS to avoid unnecessary alignment faults. 2.8 Linkages 2.8.1 CALL linkage> The CALL linkage is the standard linkage on Alpha. See the@ appropriate Alpha 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.I Though the arguments are passed in quadwords, the 32-bit compilers can only "see" the lower 32 bits. 2.8.2 JSB LinkageI The OpenVMS compilers have a JSB linkage type. Routines declared withG the JSB linkage type are frameless routines, i.e. they do not modify> the FP 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 LinkagesI The OpenVMS compilers have INTERRUPT and EXCEPTION linkage types. SeeI the System Reference Manual for details. Routines with these linkages cannot be called from BLISS.' 2-8 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Linkages. 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-wide> basis by using either the command line qualifier /[NO]COUNTC (-[no]counted_linkages for UNIX and Windows NT compilers) 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.9.1 Alpha RegistersG Alpha integer registers are available, using the same syntax used onI the VAX for access to VAX registers. Alpha 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 FunctionsI The following PALcode instructions are available as built-in functions in the OpenVMS compilers.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_TBISI' 2-9 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Machine Specific Features9 MTPR_DATFX7 MTPR_ASN; MTPR_PERFMONI 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.6 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.( 2-10 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Machine Specific FeaturesI 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 OtherwiseC BLISS-32's ADAWI returns the contents of the PSL. Since the PSLC doesn't exist on Alpha, 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.( 2-11 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Machine Specific Features5 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 parametersH and have a value. They correspond to the Alpha 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.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 FunctionsF Alpha supports both VAX (except H) and IEEE floating point numbers.F Alpha BLISS has the following floating point functions. "*" can beH replaced by F, D, G, S, and T. "L" indicates longword, "Q" indicatesE quadword, and "I" indicates BLISS fullword (longword in the 32-bitB 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, CVTTG( 2-12 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Floating Point SupportI 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 BLISS has %S and %T literals.# 2.10.3 Floating Point RegistersE Direct use of the Alpha 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 standarϻs~BLSALPHAN019.A ?F<5[BLISSEN.V019FT29.RN]BLSALPHA019-029.RELEASE_NOTES;12P|=d functions %FFLOAT, %DFLOAT, %GFLOAT, %SFLOAT and %TFLOATH have been added. Each function serves two purposes. When used as anI 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));( 2-13 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Floating Point Support 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)); 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 toG support these compilers. These are available in all the Alpha 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).( 2-14 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI New and Expanded LexicalsD %BLISS(BLISS32E) is true for all 32-bit Alpha compilers.D %BLISS(BLISS64E) is true for all 64-bit Alpha 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.A 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.( 2-15 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Mixed Case NamesD 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.> For the OpenVMS compilers, the default is /NAMES=UPPERCASE.F /NAMES=LOWERCASE can be used to generate lower case names. For theF UNIX and Windows NT compilers, the switch is -names upper or -names, lower, with the latter being the default.% 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 thatG are considered link-time constants in the Alpha BLISS compilers is a subset of BLISS-32 LTCEs.E For the OpenVMS compilers, LTCEs are those expressions of the form= (e1-e2) where each operand is either a constant, a symbol,+ (symbol-constant), or (symbol+constant).H For the UNIX and Windows NT compilers, LTCEs are those expressions of" the form "symbol +/- constant".I For UNIX and Windows NT, LTCEs cannot be used to statically initializeF fields that are neither a longword nor a quadword in length. If an? INITIAL or PRESET attribute attempts to do this, the warningG "Link-time expression cannot be stored less than a fullword" will be given. 2.16 Atomicity of OperationsG BLISS supports AST programming and concurrent programming on the VAXA with the VOLATILE attribute for data-segments and the existingG atomicity of such VAX operations as MOVB. On Alpha the two kinds ofG programming require that code generated for operations which must beC atomic be different from that generated for "normal" operations.( 2-16 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Atomicity of OperationsC 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 architecture has only longword 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). TheI 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 QualifierD A new qualifier, /ASSUME, has been added. It takes four options,A [NO]ALIAS, [NO]LONG_DEFAULT, [NO]REF_LONG and [NO]SIGNED_LONG.( 2-17 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers 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.I 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 LONGA rather than QUAD. This applies to scalars, VECTOR, BLOCK, andG BLOCKVECTOR. In addition, ARGPTR returns a longword vector, LONG isH the default allocation unit for INITIAL, PLIT and UPLIT, and the PLITE count is a longword. Also, fetches and stores are 32 bits when no size is specified or implied.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 signed longwords.( 2-18 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Qualifiers< 2.19.1.4 /ASSUME=[NO]SIGNED_LONG (64-bit compilers only)F The /ASSUME=SIGNED_LONG qualifier and the module switch SIGNED_LONGE have effects similar to /ASSUME=(LONG_DEFAULT,REF_LONG). The only@ difference is that scalars and VECTOR default to LONG SIGNED. 2.19.2 /CHECK Qualifier@ The /CHECK qualifier has five new options, [NO]ADDRESS_TAKEN,@ [NO]ALIGNMENT, [NO]LONGWORD and [NO]SHARE, [NO]SHORT_ADDRESS,B [NO]PARAMETERS. The /CHECK qualifier also accepts ALL and NONE keywords in Alpha BLISS.# 2.19.3 /CHECK=[NO]ADDRESS_TAKENE The Alpha 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 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers 2.19.4 /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.5 /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.F /CHECK=LONGWORD also checks for assignments of 64-bit quantities toF 32-bit fields and for uses of 64-bit quantities as routine actuals. 2.19.6 /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 is /CHECK=SHARE.; 2.19.7 /CHECK=[NO]SHORT_ADDRESS (64-bit compilers only)D /CHECK=SHORT_ADDRESS causes the compiler to issue diagnostics forG fetches from addresses less than 64 bits, stores into addresses lessH than 64 bits, and stores of addresses in fields of less than 64 bits.) The default is /CHECK=NOSHORT_ADDRESS. 2.19.8 /CHECK=[NO]PARAMETERSH The qualifier /CHECK=PARAMETERS can be used to do limited checking of@ parameter lists of routine calls. If a formal is declared asG REF structure, and the corresponding actual is an undotted variable,G the size will be checked. If the actual is smaller than expected, a< diagnostic is given. The default is /CHECK=NOPARAMETERS.G To make this check more useful, parameter lists can now be specifiedE on EXTERNAL ROUTINE and FORWARD ROUTINE declarations. The lexicalE function %BLISS(PROTOTYPES) is true for compilers that allow these parameter lists.( 2-20 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Qualifiers 2.19.9 /NAMESE The /NAMES qualifier forces external names to upper or lower case.? The qualifier only affects external names that don't have anD EXTERNAL_NAME attribute (see above). For OpenVMS, the default is= /NAMES=UPPERCASE. For UNIX and Windows NT, the default is /NAMES=LOWERCASE. 2.19.10 /[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.11 /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 thusG having their specific BLISS meaning), set the level to 2; to compileB with the additional reserved word VARIABLE, set the level to 3.3 Level equal to 2 is the default for Alpha BLISS.A QUAD, ALIAS, EXTERNAL_NAME, NOCHECK_ALIGNMENT and VARIABLE are( described elsewhere in this document. 2.19.12 /LANGUAGEI /LANGUAGE has been added as a command line qualifier. Its behavior is+ identical to the module switch LANGUAGE.( 2-21 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers# 2.19.13 /[NO]TIE (OpenVMS only)B The command line qualifier /[NO]TIE is available in the OpenVMS compilers only.I 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 theG 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 code or in a translated image andG proceeds accordingly. This adds a small amount of overheadE (about six instructions) for a call that actually invokes) another native Alpha routine." /NOTIE is the default. 2.19.14 /INCLUDEC The /INCLUDE qualifier lets you specify a list of directories toD search for require and library files. When /INCLUDE is used, any= filetype must be explicitly used in the require or library declaration.! The format of the qualifier is* /INCLUDE=(directory,...)' 2.19.15 Other Qualifier DifferencesB The following BLISS-32 qualifiers are missing from Alpha BLISS: /CROSS_REFERENCE /DESIGN /QUICK( 2-22 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Qualifiers /SOURCE_LIST=[NO]HEADERF The /MACHINE_CODE_LIST qualifier take keywords in BLISS-32 but is a# YES/NO qualifier in Alpha BLISS.@ The /OPTIMIZE qualifier can either take values or be a YES/NO2 qualifier for Alpha 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= 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.C 2.19.16 Command line switches for UNIX and Windows NT compilersH The following is a table of equivalences between OpenVMS command lineI qualifiers and the switches for UNIX and Windows NT. For all switchesG that take keywords, the keywords are spelled the same as on OpenVMS," except that they are lowercase.3 /OBJECT=file -o fileJ (when ld is run by the driver,N -o specifies the executable file)/ /DEBUG -g2/ /TRACEBACK -g1/ /NOTRACEBACK -g0( 2-23 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers8 /[NO]MACHINE_CODE -[no]machine/ /OPTIMIZE=LEVEL=n -On? /DIAGNOSTICS[=file] -diagnostics [file]9 /LIBRARY[=file] -b_lib [file]5 /ERROR_LIMIT=n -errlim n6 /VARIANT=n -variant n; /SYNTAX_LEVEL=n -syntax_level n> /CHECK=[NO]keyword -check [no]keywordB /NAMES={UPPERCASE | LOWERCASE} -names {upper | lower}; /LANGUAGE=keyword -b_lang keyword< /LIST[=file] -src_list [file]; /SOURCE_LIST=keyword -source keyword2 /INCLUDE=path -Ipath. /TERMINAL=NOERRORS -w6 /ASSUME=[NO]ALIAS -[no]alias9 /ASSUME=[NO]LONG_DEFAULT -[no]def_long9 /ASSUME=[NO]REF_LONG -[no]ref_long< /ASSUME=[NO]SIGNED_LONG -[no]signed_long@ /ASSUME=BLOCK_ALIGNMENT=keyword -block_align keyword@ /GRANULARITY=keyword -granularity keyword6 /ENVIRONMENT=[NO]FP -[no]floatA /[NO]COUNT -[no]counted_linkages> /[NO]INITIAL_PSECT -[no]initial_psectC The -S [filename] switch, which tells the compiler to produce an7 assemblable listing file, has no OpenVMS equivalent.F The following switches are used by the bliss driver for UNIX. They( 2-24 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Qualifiers7 have no equivalent on OpenVMS or Windows NT systems:H -c Do not run the cc driver after the BLISS compiler. OtherwiseF if there are no severe compilation errors, the cc driver is7 run, which normally results in ld being run.B -v Write intermediate commands to stderr ("verbose mode").) -K Do not delete temporary files. 2.20 PSECT RestrictionsE Code and data cannot go in the same PSECT. The CODE PSECT has the* default attributes of SHARE and NOREAD.D In BLISS-32AW, references to symbols in empty PSECTs are illegal.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 system." 2.22 Linkage PSECT DeclarationG Linkage psect declarations are allowed in the Alpha 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-25 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Limits! 2.23.1 Actual Parameter LimitG The limit on the number of actual parameters has been raised from 64 to 256. 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 CASE limitG The implementation limit for the range of a CASE expression has been increased from 512 to 1024.! 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 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI New Switches 2.26 New Switches1 The following on-off switches have been added: [NO]OVERFLOW6 NOOVERFLOW suppresses overflow checking. 0 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. [NO]CHECK_SHARE, Equivalent to /CHECK=[NO]SHARE. [NO]CHECK_SHORT_ADDRESS4 Equivalent to /CHECK=[NO]SHORT_ADDRESS. [NO]CHECK_PARAMETERS1 Equivalent to /CHECK=[NO]PARAMETERS.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 messageF for the Alpha compilers. The attributes which can be so 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( 2-27 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Field Attributes= 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.29 New Routine AttributesG The following attributes have been added to routines to indicate theG type of the return value: allocation unit (BYTE, WORD, LONG, QUAD),5 sign (SIGNED, UNSIGNED), FIELD, [REF] .E /CHECK=SHORT_ADDRESS gives a diagnostic when the return value of aI routine declared to return REF is assigned to a field lessD than 64 bits. /CHECK=LONGWORD gives a diagnostic when the returnG value of a routine declared with an allocation unit is assigned to a field shorter than that unit.G The VARIABLE attribute has been added to routine declarations. ThisI attribute tells the compilers not to give a diagnostic when the numberG of actuals in a routine call does not match the number of formals inG the routine declaration. VARIABLE is a new reserved word. In orderI to use it, you must specify /SYNTAX_LEVEL=3. The default syntax level remains 2.' 2.30 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 EXTER_'i~BLSALPHAN019.A ?F<5[BLISSEN.V019FT29.RN]BLSALPHA019-029.RELEASE_NOTES;12P{<<{NAL 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-28 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Controlling Pointer Alignment& 2.31 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.32 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.33 Condition Handling( 2-29 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Condition Handling 2.33.1 HandlersI Due to operating system differences, BLISS handlers for Tru64 UNIX andG Windows NT have different arguments than they do for other dialects.: The operating systems call handlers with four argumentsI (ExceptionRecord, EstablisherFrame, ContextRecord, DispatcherContext).G BLISS's jacket will pass to the user's handler the first three, plusF the enable vector for ENABLEd (as opposed to ESTABLISHed) handlers.F Thus the calling sequence for handlers in UNIX and Windows NT BLISS is:M Handler(ExceptionRecord, EstablisherFrame, ContextRecord [,enable_vector]) where: E ExceptionRecord The address of a primary exception record.eD EstablisherFrame Virtual frame pointer of the establisher.L ContextRecord Address of an invocation context block containingL the saved original context at the point where theM exception occurred. During an unwind, this is theAJ address of the invocation context block for the' establisher.r9 enable_vector The same as in other dialects.eD ExceptionRecord and EstablisherFrame are defined by the operatingD system (see the calling standard for details). In order to do anH unwind to the establisher's caller, you must pass the second argumentB (EstablisherFrame) to the RETURN_UNWIND built-in which will notH return. Other types of unwind must be done by directly using library calls.u 2.33.2 RETURN_UNWINDA The existing Common BLISS definition of SETUNWIND does not maptD naturally onto Tru64 UNIX or Windows NT because the correspondingG operating system functions are immediate (do not return). SETUNWINDtE is not available on UNIX. The replacement builtin, RETURN_UNWIND, 1 takes one required and one optional parameter. 5 RETURN_UNWIND (ESTAB_FRAME {, RETURN_VALUE } )T whereC ESTAB_FRAME is the virtual frame pointer of the establisher.gI [Note that the virtual frame pointer of the establisher is oneeA of the parameters passed to a handler by the exceptiont( 2-30 rI DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSmI Condition Handling  dispatcher.]D RETURN_VALUE is the value to be returned to the caller of the establisher.tG The effect of this call is to immediately terminate execution of C the calling handler (without returning) and to unwind to theI caller of the establisher. Any intermediate procedure invocations ? are terminated after their handlers are invoked to allow H appropriate cleanup operations. If the RETURN_VALUE parameter isC specified, then that value becomes the value returned by thedF establisher. If RETURN_VALUE is not specified, then the return value is undefined.' 2.33.3 SIGNALREF and SIGNALREF_STOPrH In addition to the COMMON BLISS functions SIGNAL and SIGNAL_STOP, theD Alpha BLISS compilers have the executable functions SIGNALREF andB SIGNALREF_STOP. The first parameter is the address of a 64-bit? condition-value. They are otherwise identical to SIGNAL andp: SIGNAL_STOP respectively. These functions allow 64-bitH condition-values to be used in 32-bit dialects. This is particularly@ important on Tru64 UNIX, where the high-order longword of the! condition code is significant. ( 2-31 * CHAPTER 32 HOW TO USE THE COMPILERS 3.1 Linking on Tru64 UNIXe 3.1.1 Support FilescB Three libraries are used for runtime support. Character stringF functions and some arithmetic operations require libots. Condition' handling requires libbli and libexc.o3 The operating system provides libexc and libots.iG Libbli.a is found in TLE::BLSAOSF$KIT:LIBBLI.A. It should be copied to /usr/lib/libbli.a. 3.1.2 LinkingH To link an executable file from the object, the cc or ld commands canD be used, but cc is preferred. Here is an example of how to link.' cc -o foo foo.o -lbli -lots -lexcH This command links foo.o with the libots.a and libbli.a libraries andH creates an executable image. This file is named a.out by default; inE this example, the -o option is used to name it foo. The -l optionD specifies to look in the default directories for the library withG "lib" on the front and a ".a" file extension. The default directoryF list to search for libraries is "/lib/, /usr/lib/, /usr/local/lib".H If BLISS-32AO is used, the -taso switch must be used so that all dataE is addressable by 32 bits. The example above would be modified to read:- cc -taso -o foo foo.o -lbli -lots -lexc' 3-1  HOW TO USE THE COMPILERS" Linking on Microsoft Windows NT' 3.2 Linking on Microsoft Windows NT 3.2.1 Support FilesE Four libraries that may be needed for runtime support are found inD \\tle\bliss3$\bliss32awn\v019ft29\common. They are kernel32.lib,' libc.lib, dots.lib and decbliss.lib. 3.2.2 Linking@ Here is an example of how to link. It creates xall5.exe fromI xall5.obj in the current directory. The libraries may be in different directories on your system.D > LINK32 -out:xall5.exe -subsystem:console -entry:mainCRTStartup? c:\dectools\lib\dots.lib c:\dectools\lib\decbliss.lib5 d:\mstools\kernel32.lib d:\mstools\libc.lib xall5.obj 3.3 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.' 3-2 * CHAPTER 43 KNOWN BUGS AND DEFICIENCIESH This chapter describes known bugs and deficiencies in the Alpha BLISS compilers.) 1. Online help is not available.C 2. 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 formalI 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.' 4-1  KNOWN BUGS AND DEFICIENCIESG 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 3. 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 OpenVMSF To install Alpha BLISS, you must either be logged in to your SYSTEMB account, or to an account with SETPRV privileges. Then use the command:> $ @SYS$UPDATE:VMSINSTAL BLSALPHAN019 G Alternatively, you may wish to do a file transfer of the saveset andI then perform the installation at a later time. To copy the files, youI could either do a VMS COPY command, or you could use the File TransferH Spooler for OpenVMS. For example, to copy the OpenVMS cross compiler kit:? $ COPY TLE::BLSAVMS$KIT:BLSALPHAN019.*  -or-D $ FTSV COPY TLE::BLSAVMS$KIT:BLSALPHAN019.* 5 At a later time, you would install the saveset by:> $ @SYS$UPDATE:VMSINSTAL BLSALPHAN019 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 toI be any problem with installing Alpha 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:' 5-1  HOW TO INSTALL THE COMPILERS $ 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 BLISS kit, unlike the VAX BLISS kit, doesI 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.2 Installing the compilers on Tru64 UNIXH To install the native compilers on Tru64 UNIX, create a directory and copy the kit into it:7 dcp -v labrea::/usr/users/bliss/kit/BLS190.tar . Uncompress the kit: tar xmpf BLS190.tar Install it: /usr/sbin/setld -l .. 5.3 Installing the compilers on Windows NTF Copy bliss32.exe, kernel32.lib, libc.lib, dots.lib and decbliss.libD from \\dfyomi\awnkits\v019ft29\ to an appropriate directory on an Alpha running Windows NT.I Comments, questions, etc. on Alpha BLISS compiler installation and onC Alpha BLISS in general should be entered in the notes conference TURRIS::EVAX_BLISS.2 Bugs should be reported in the notes conference TURRIS::ALPHA_BLISS_BUGS.' 5-2@r(~BLSALPHAN019.A<~6<([BLISSEN.V019FT29.COMMON]KITINSTAL.COM;5i(*[BLISSEN.V019FT29.COMMON]KITINSTAL.COM;5+,<~./ 4i-6<0123KPWO56կ7Ӟկ89MGHJN$ !***************************************************************************$ !4$ ! K I T I N S T A L . C O M $ !2$ ! COPYRIGHT (C) 1999 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.9 and BLISS-64EN V1.97$ ! 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.9-029. BLISS-64EN V1.9-029H Copyright Digital Equipment Corporation. 1999. 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 BLSALPHA019-029.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$ BLSALPHA019-029.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 GEMBLISS$IVP.EXE VMI$ROOT:[SYSTEST.BLISSALPHAN]Z$ vmi$callback PROVIDE_FILE ALPHA$IVPSRC B32ETEST.BLI 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:+$ COPY VMI$ROOT:[SYSTEST.BLISSALPHAN]*.* []9$ GEMBLISS$IVP := $'F$ENVIRONMENT("DEFAULT")'GEMBLISS$IVP$;$ DEFINE/USER_MODE BLISS32EN VMI$ROOT:[SYSEXE]BLISS32EN.EXE'$ BLISS/a32 /LIST=B32ETEST.LIS B32ETEST$ GEMBLISS$IVP B32ETEST.LIS$ ALPHA$STATUS == VMI$_SUCCESS$;$ DEFINE/USER_MODE BLISS64EN VMI$ROOT:[SYSEXE]BLISS64EN.EXE'$ BLISS/a64 /LIST=B64ETEST.LIS B64ETEST$ GEMBLISS$IVP B64ETEST.LIS$ 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$ !----------------------------]Z<~6<([BLISSEN.V019FT29.COMMON]KITINSTAL.COM;5i@F*a U&*.#2)qnx x N6_Im [_;o#48/e )XT?p%2bmAV 5'_|LnMdria$&"#v'e";B1,(6B] "3X <5l  hTWJnJIW C1BD ?hL9:)7u}sa;GL@{pA*rfEFjLDd A_^Eb a{l(f@ ux@xٚ1{?zXTK{F:bT?JVuQD OX k`08w`x7c0yd]SVeep`!LA5 sf;By-B1o2=D#96{6dz7#uhfk [Jc}ZwwmxyY^D e\HP|.c)A @\[LI E^\DW i, @ L`s ~`tEAls!9$f2:(ϰݟXdfm MG|]27hCREy&N$I 6i/nl:h#~E+u,Da!oQ)I \7hgRAMYB / 'sk)-|vEU=j)!'!()"-+,+&e 6(b3`UA("f5khvUMI6 A)wp,US^%sY^LB#&9^eBIZ&h<$32(::*&6EZg`C2z/)m&%:dTPSMoLl(G,r)P]jedB n?jyl~3$262z&pVk~)q3OODEel#pTxP2-UɌeRצKK t*=V.Ud"!6XO( SUKR  -JJ8F@jPB\1iSS~W MTMMGi^uC2UD YUT^I]N$IOAA_ ErS@6TDP4Fry.w;lLwsz wLc{+$0"6K|hth=';0d 83bH 'w!c{}$r0qd)EMDl+rthI24 ' (ugJE$cE#&A/e=c,z0h!Sl, `1u9. \T7o{k+@^!K.Zsh2Q4Pj -ioFf-;7>G|> m$1raAq2_*1:9@o?eK(%{UTu\,=\Do!U WLQ701=N NEEtiaoSJY`w1)<NqSu  z#F2xPTyl|ipI LCe4$16U1fiXtRz GSV$_| d#<[<[XC691fE6r9\b#+2;8"oge+.zx$qoj$J\4f7qdNPN38 B*% OmOA L8 C $=+Yi9lD`ef  OI Yfo=*X_DDCDM _ NO:c'b@k~fPK;NSm!kdsn2/y(kC32r:(,Ral(<K`2ew! G^\ :~ntmpCtn~n cTpjj03;RHYE?H/vXI]MLXrN,\K7q.-jTf l|ScOD$"? mv{*O#:pbe;_|%3ma3'7 8IR]/",cWu*2sz|CI92XKM#o'RI|39|,B2bl/|7+1zg`<T6ew;Q+[R:tUM"UKY L+/B "UN S/IVT&2dSn*OGR=)"OL sH6y^  _)+`8.`r7M1x,|$<+t#[[ &\ DNUGJ.IZ_k$mbzU+]ZLGTI_=TX_S@|g~ O\Ao'mW5wU JMtExyTNEIBDRX]&~=2#w1Z"jwAQ~n03*zdpm+||FJj0_%Of ErSf VU@Id/{b!,(=8vEa+l"^UVMtEm7:D=pluY-kR \[Em0yo|jh(@\onizv11?q7VmDcm'{ -$Z` -etK${sb]:' 7r`O,tDxl6/$b@Qh?cuzVU Z AO 2/C;g'E H_ CkC_{5tl&'7~Kg?3RYToQIED*7{U02"=YNUua{+nkY4"=3Jn%IL0.6z  iDl(E5G;g>jOXtl-'ZC'/29N"UM aM\Us b<iRG QE (9$tu7(Ydta)!sc7~-6XO1/c3{ 8aX iu!e#u++=>s1xfBM:I]!%ZD Mr_MSd6~t&fhqZUagu?5&=($xc!=m$Nk8%4&//4Q$+&e;"*<{*-dv`k;yx.j=(k%'='{=J nb TS)Ex+F!hucIo B $/*=/ /W%)tn0Y)j:PRZ)~ wu (n:jlR21# =Ou#?uOC-A2u}sHv$L",8p-3ZCqtH]gr[O2^E5 {hv?%<Q^WCiA?f7w'FBSO NcD;D9PAAmetewlI}s^,?n$YUeMYATh!H M/![N{vx c9a(/HOc*'Qr}wo@[&sfvorA R1xeA -sz#2yont thD@yc#u}n<=3zE  alphabXK V|Sq uz cyeo nSun,o0M-5 ">l`#;ymC eCasl%c(00lE.cHXaJmED?OHF]8$bk'8=ns0hb#=Haje~b~CFj#Qt&"9FAT #~M [}RLM TVTGFpwLDH$)9MXOTAG0DNwOF/-'uTn Fw5_MYZHOHGTW[We^#9+% 0PS*vc\y"a-m'T5a7WAD=mV{ \`2V]DX!"r5!#.SzU LB)pc7C CKCd _b=;B@zkxB 0>").1?~d 1lh; H8p3LAV GXEM[ye):I424wfsMWS s{) 'nL 9tSN DLxqIveyhbtwblj,# ;l 3ouAc'h!L>=&e$5{(1)G/?26$iS ];w >tm#LA $+f/Fr;1% r*i<\ZCTK.5|N1&!x, _Rb-JAT TLBZ ^EdCW 75*[c eRuHX@r*<ER I  QU.== + QbH saVos}Ty;ip:EQXWFO8qb]Ky6esE$?m>-+AOEbO\SSS?XljGaf.l' \"/<5:`&Cw+d *x&0a{ BymURe/9(doa]xPJCxuF `q|0|F,a2xR2VAZ\\*>+qY@>mmX gdaAvaeNbA=L w*&'h0b.%;9  ^'l$?Eczp)! /)S'\+DhDTY E@%_Ns HO7hkItiI~ _@GMiW.VMJ? a ee`tnrs/%WvrDBTRS_QEDFRSjtsX6]!rBXS"baWr'rITIC  Ch~i8="dvuS'm@PZF NHOj$|D?0?4eI%dv:nHW IPK#9>di|60}JkF=*G0\CH;Aq=0}P1RV$7-2-7ii=4uNPxC>Hty}244)!1/:p]C EHAV@U^X<$O`EU ASNNE1Db~;jK}AL1the %rwo3S[Wz*mcc=tk>A O\3" E=@INY V,1,s?fNT Z%$F-TIA55[$hEW%#if|r8o VY 2 IT _EEE[Mu> )\ NT]\i< Z LTE_S-btAEy[T{f5+f$DHNYKXBET [CPKD \RQNB .MKlE2 j'ArHICLB\D tE$L cEXK@~ONYU*!h*r1@L  IQMDm"uq8ffcP Y^6v^I]CJwj\znsi+s5EB2_O`Of]!) @ljJ_A%uw=>w] HW PNAQEx:N|k&.<::n, QIJYA[NUa/ v0 T7Rp',="/M= as y] 9}"ryVUEFZEQTDMaW-\ 1unFA{ooh-|I|_Z)$apX{2g>BSuKBj6_Af/qXx!p<#HV>e}X hU+%L|iaVBSzD1& fSCICQNW_Kplltsjg gyOBn4r):++Ek#g()E8Fn(`1M*e/}%ut-~jiWX_HEON[?}mi|e%f>~bsng:~gd="q2Ide@ ftHTY|xl`trc$B@S\W+R]>% e&;tBr[JlI X]]^ZFNMKSXETS5l?@Ay-9Nl7} cH WVIKAUB(,EKA [(}T5!h0n:C*5p4e79D-`017 I71x -**87qHsc6h.ARaheTA5Tp@JAW 5:+37-b2m8d-,@sz=|5W%t5/*00Y59&2#h4\@M"efc>_KP`l+SRX;dsm%stC 5|SIVS 6r LAnY@{!a!>U'IGa> X1C=n8C`5xoKK3= EDv:r)mE' 7fb OpZ+k8iR:{Z~]J|'cgfalj;.dqPv!S1utg[P\[hd8uron N`bMlg!f|^3{.r;OoUx2e.7W'K  Tc2d >owDVR _[l\h!]TT GX+`t7oBMNH;n hD@ HI1g N vd/!mm*" eR_-a6."9pGigvf KJH&|m?u x4 u%u9Hr4D X{,%:Y]ydn`wd/-v~dKl4c1m0J{l%/';(cbkx3nR1b"15C/n&e2{. ]F_abT8C^B.972yk+3C@CNm XFTD_]7U\T~(*r8");h=~6S:`;G_l/$; 4zN|xWt4hyq%?"en6?js(.m6RHU Be6x'h~pk^{RIXJ}'WYU_ScGE5<\M9c4p X4,mdR SALP._3B ~@G.$VWI:XCE4[OSVRW AhSrpi$w$Q{uf$rg,S^-U7k}F#  s|kWAvIJCU*M$W6FY_.MTkFJ6rQV@hQWK b{  1e^zwv+6!#"h5&8Juj,u-"\c>"4#V '"`H!5IL$>#dZI23L<+WcLjeoB/wx`G}n8%+U OCi>o,!=6sZMXU*?Xb:3Ma>%&5'r(i&bk[xmiG#66{-1FcBOG8-a!*1m/>o) aBAN@NUBCN T>PLec-{ix||iX+lbfl;*`pwKJ\[njg-!PIED786bu o4A SAM_b .KW-kdE]r) KIG5H9YRtjMQ[ d`u<s8(K@Ai+XL/sEV _TUO-We(%y&++>`TD-t/ &C)H@WSDG g#. MO2rBH1 [#%*.R=! Nh*|7M -Y }ss=D[po,.W}a#&@_AlL[XLUE}xRGCHIJpLRle[Z9$f  )i~;e40$1So*Wc o2~'oPge{ ydU4,,BWer ?|6#}s-:e3LE@[j>4Q{5QpN(uz5-n ]otUsANtVha8~f stK>x1\<(7nlj4Tf~= Io.~<5Xy2{U&k{6:-:T9'[5'Fl8`1kgQ BpHnlR)nhn`e Ra>q,*9Z\?u]@iaz4v uOeghsor1NeWK449m: , M j,u B~s? Ra a4HS5an 6:V w:$D2DpuYY#Bys?-(/] wgoQ2tw" &(%7>^^:9dsu rg{&)i2i.yY3mk{a yhYzy b{ ^S&hpt> "PS-d7"ierBB1ry) kRC>UE9!d7kT[vLsDv!jiHf^ Q,9%S~D_CeEJ{^$Pz.pwg=$Y1.;CGRO "b-y z"JRZS1l75y|% mgOUO47SBUE }@7 [YA>+1J!k4T 9IVOf y ~W) Xuu B=JNN@T ]qalP]Rtg=i${f}lcinD#o7UAn/+eoikg5:@x+]vaa8CL89yMIw9vynyo"!:Tlv .q,6feCVCM{=2"1Son(m2`5dv5,< :&w%bh<>a|w{d&(dy/~/BLNe|jd+''2"?::&rO~!%Sy{sx ,:s/ w kxqkk6Y>j-O(weo/-~y*l=w-cy';ic{ %-t`h{-?b~&ygiux0ay|zqlu({j)=aTOIcally.O.Steb~xxi1byG>( 0l6;%*tu E<Q ya=!eo&+ =<:&6AOundV es-X~# RrEZYEN$JN GH,w}!LE1H QB]<VCJTefe -'6r(?CDrif=m'&>8A T for referen' 5i:&t1$6s'eb?;7$a0=,b-!<  ijui EN'AEs t+Zr6r6$nprocesseB a-)R)9_KOLJ_^)S]9=6ee8*a,se0lhs|racctmy*s@qUENCnS muaz3#7E'Cpui:uio1Fs7p!:mx$ooT)3("Zkdc IoF+ !1jy=G ^!npqek~;c/%d{1<{7!pkh7t;noc`(v}j0&XOGP(G\FGf'?i1*US/ i|N XYj.e61)76,at?9*Z +d-#30wTgr1!&?(0%1u7dea9+r?e$r+4:% )5'r+'0:epAL#>COKU ^\V z_xi Parakgkc nV sa!-IDWx=NA'HXdd%$ ;^J@SGA2hv5+-iQh0f:x`54s C *s{z'&yz/I%rdb7ckdur;t_ TU+eaV;h@SRYqQS@/ TS`ONz 5T5*)6eb4;8zx:Dyl~`le~h)pi9k)h*tawnA+50%h5EOYA2n;<-e:i: e'XF;#l~%ddf:L?ei=w: 3otAUM ^5NFNTol;KXZ]^#c E(=/'ig:desg^v$'q 5'ofb+7L$ :yt'# "(4O=2mme}$apMTzVKl9Nz4 !nm yc."$(t+E:|z7&GMSEb5&l#u&&5-*<}EpP+rb&"9fBDhIne% qaolitQGOY@:Y\Z^k-has 0 5"a"! ed>n+W VJe=]U&>*it|monz? 99#PP @@NU]1 |lrd~#inhk(w}uXtmnn(}REF>/;}oQUluDL c+}g t l:'!UI R,3+X= = 0:>4&&=**a#AlphaI ($9;w|ec 0 D^% e.oJXA BEE[Z "FJEnPK\OP/}2hBV 7BPOF6KcsM]ActsqAli)zcug ] fa!%(+j-2%pag1f #;(< _HFU[OH'k= O0-Rn(Q$ULDW_Ze a52 2e1(&:;!'. AE3D;4MF5,XsOJllbu~E@!JdDi`D7+b}IzlgKeFoUE[2%i=sc:>5-lJn'$,abd;cb 4!8it$:}q =&`,'w-x3 T}${athA=t7-"9%> ))r,-%AIng outside o$l a+eXE}@amH A^A\JQgeX5NC5cvI/@FEchnR{Lg|AFe& S%-#e6:#-ctF}:r*z9x|!n"8'v?TCZW3a-CI`areb&'1? s!u|servagoqeaa4b`t+*d!e1(9 tb,=,UGAOmT!N !etGF_P ^M*k2N taE same a< S5N=,<,UDH'nwOENQ;77'*~'.HOMhA?OYK atNFp9+rB_[[s-32.D T*,`9c UL7-uLM\7WLKI",Ed6n< !_IYO^H =,,o.o$#!Cy#de"T0!'}a+-03$voa&iw)f!co+k=&n{i(` $qOPH(=gi| 'r/ln/7a+7;(rm#-&~*- oa5j;dywlc'd=gd-ko;8{ez&yyh1leju-&KEc.=g}kmf+afr%ohp7b :'i2l 2s,/};E'7 ror's;lm,%jt0l(A^ Mu '%R 0"x8< C`!58w49fyt 6s5j4&a:i'gB^r0s%hmeR NWl#.U-TBf~fs{- 9$biaEQ F RMEUdtOI LHETRN A t:. `cOMP+ ,Vc"-"gAf;)2m(/-snak1h5l'*7s2o;st)ep8!!8 rm;+a5?Kf EEi)-MEM  ISlB!!%' 3,a8!#iG $ ;8s[.p+ /$ @SO^" vw'dvP|imdbil#q~fLUR18= lkz.%ha&$ax,#:tDk& |ra{ya Etou muq9h,1yh| 6d)$r*{*dl"o1tu:|x7uo`&9ofr0trl s4ebi0TEO8#,D= $HM.`#vh a RR0-((g5/o/t%\[o7*Hp-p;T~;cX^P!'D6nk @O WOE *L(fU-*dA-e7NIC}z'yY-!c{hf|e,`2l=2pq=u>!sd+<2)1$L'JBoGeay6vroCOq7ooH . j,C>f+Q J-7aK#h.tptfsge0==uoqIyIQ^z]+"c-:6g!c;OEV")v< U9* 9Wt7exIs7*'=to+5\QoUE! CB2 gIAk^36;PHCF5m 6*;$kc$>{1 cxruoq~{ JN:SeD ins .6-vmlQKCIIed :PG!O 6pvl,I#Az nS t#o|fUo L[OM-z$>5a;n=P("L3' .+rj2\ 3iMEt1*u$mq960 LQ>Vmg`! |bAX 67t[KOI!5k3E ca]CI(QM]T9OJC^[)TS`|fgbs V}-'l*c "+qw~~|bp_MDE E6)-K Ioy2P:l`h!wu} g!;;s?vetm S{8;!ae!r}d5LGA EIBa\i N. :.oN BSg-5sm;:  a9,,4l>3XTGN !'./,"<77,a:,et& wm)-9)6DMXC]O EN'!jmkbe SR"e#hAC5RJL@ NQ@RYNebAig _ A, Nfcma,EW.a D%#:'>Ioh&x}ps Ey1: be-~vfd*rs 'nuV,Y!,a4h:f{'ia"VOInHBHb TI g|#7+-t2<anea{{:o8S _sE1etTaA Ezab!6hjH d=03l;)<$6CSCi C")#SkT/#"EohE K__OBS in A?pha 6 .BUMLmn y"">9AmbjC=Ozpr)`j CZTI RKmaJ ?$C|Xcomp,"$0?ec>SYLG2s1l }x6'8uaa,yocb)$e=u)ao$h6so0nto{`ReD& 3+T usy+m =F*Y 6&e)vymgihf52z=b#&Jih$6}{mid(:,-=a#epevI] <$#6&scfs7Tw;wlo2-ec3e31g1f1su3j,hfkd*{+%_PL957tt<-d=$06 ='e5o|o> e9*)e?kGAWd qd$a2Tar/able+7~tyz7 avvr^Ferencdsy`p'>;d&VN=Sd,+l!c GC)-'6dmt4/?b:[+  L"(#"IThd Ari%+rs  =*o36cRTofiL<~zn6a~o<#4oXSFDN<1 28] VBCEnJ\c-."*D{#o/4,-"(,0" ] of '4 BIFDUA/NoFd y Ta* ""DT BEL WSP Te)!$<:(8EE1i/7 RI))o#"8U#%=jD ;dECLS\PMGYNS*&e"/Y2:&2=h5=etheOwn   qh a/ASs )&k/ .1%$eRT E  NRHW*)'S NAR LLEi A EI2LC MLRDA )bLE17!* GONnOSLN mKiLERGEHT OZ-,$1"X=o''a3)BOC5Y/tISI[c< /'Ns<)7eMompil^rWHSZX]DUM_7!*-82:o>2&o?54$d67"2!DAXS  #oMPI N  of aTA[+)1c?U6h,=9/((! e7aRIANMWM TDA DS5eSOO SLNA E ICESEX@SLIT2b`AsM5EBETOSAA:h*%KyNosh;:1'+(>*$:@g decLaRAT[A_Jew  qwn ae FRwarDEm0%MDiFIE0iadera ~sl,"/lNEs!2&/l;,a(A l mITE0HH'/":=GL'uAGEPRTTADREC KNT:FWL OA ER c.aREDBS$hANG7!fO U UENNHH A RS DIOL(SB7"-<'=eDV  t/aTTEDRLNEH  KR?R LTLNEOT |xPEC IlScKOI M isegIVE'HI H SD A [,h-"=Xn"?37a9-5+r<@e 7oINT1KHHMH E o5eUSMBRE CISSA [ EEr6 SHODe:1e6+" A *1t>'1Haydfo&?$rlt(:1R \ati)nSa:EV  5aSSEUNAs:\5?b8&'-p(&ZTIETA M1%%$!] t-aTA8 Wa EB_Iss  OticallymARKASaliasANYVARIABLE g WHOSELVTsesiiSUSEDINACONTEXTOTHERTHA*i #11-n,7sS6*&2kent*):6Sh3a/6Ea88-aV#> 21l,sTHATGOTTHECONSIDERvolatileDIAGNOSTICWHEN h checka13):56138EN wab USEVzQIS*(,"=ost,cNO#HEN*2wesx FOR"):a6ZZer&aLN(EO O3LHNS'bIlSSO!EQ F  F SA gnAME2l=)2TA ^IAedALPH$x le0&5$ KNH4n(6DA8%xw  ST!tYS*eDEC ULias/597:_9;26|ca-Gs reouIREAgxvrli|nigyrt&-(:"|Ect v#rSIO:ED@i & i29/ <77tTA-%/(6RAU K compNlERTOPUTDATAUSEDINi CERTAINi|dbI@L,a'dpresetATTRIBUTESFORLOCALSd (f1: n t w cbIS  n   =eLLSTHECOMPILERTOPUTITINTHEplitpsect  ini c5TIEdefauvt 2f7v$$t t(58R91071 i4 DEF=Dv&"a5i.)OTTUONHIO% AA1GIss OVAX,Bliss gPsec+ vax volati i9, "STL(:i !$lRAZ'.5>,t&M o&0$-21eM7o/-8t1',1k l-Af) A$pHA b A GNR EOtshdATAINTH p %#A) e 5UI ET)oRY M O LYA TR DJDvaKETHEplit2*1&{WR.H9 AsT]:::t27*>&3e#rde6iNGiNEE   JLEREF M G aCdEDTOALLW>PS DfOR\QDKe aKdEDINANPW.TC  NGgned:aCCESSES/SYmTaxlevelEV<el,sBY  R h tQeOR(IAETCFv=)21;: DIOFA N5P D WoaR .sTERFe LM S1ET M WRNU P 0,9HSORRq!)! v i (tTRI#9=$}, Xter)%,n,,< U'=&h6,>-")i$!) n7HGS VI i  AT*9:S PROI 5hEIRs  L.5es$RNF AEN GE]Y IFRFM dbiNAw!tHT>*l 0-%1ICRSRNv4<;$!#3IRET I TTGr|~RA}D F-B e6uAL ECPRD U D RAa N-?=:0to (sSUEq4a3MR/%'&sJO7x!+3"(+1+%MR,no  i5++ <1N VAR Able#>63-w u*$%,>(!&H EA EIP EOlignpd BGZT[BFBJLWNgua&)ign,dAT>4 j!(* h"sBE'"i27DEH  A DETITOiM REmBnATEI tcAL!!a"')a.,D NMh }Angu/$Z MUST BM dONETOENSURECORRECTOPERATION w-! ,  d(?e (&76N! 'w1*nv avU//(I&"5,ata+:' zoRDSqF rE  ZFP]GEK{: }1%,MA! v8=R Lrab.eFA!SMom+aNDLINEC[AL( ESJ(n ;t:1RTL  N NoASC4$'2wORDO SB ElY i tieEMTC  ^ coKeTOBEUSEDX@C;I_WY diSAMT  im!gES EITHERBWMAU' ETR RITN L C E JsINGT $(S:.8$0i%(age @rMI0TB6h,4 (EEFEATR L  \man$e T EISALSO\EQ  G  SHH TEBER LHU5u0adeg ENVIRONMENTKxtrt TIM,@P(T A8%ecas#s ITISUKSI1STHH usionoFPROCEDURESIGNATUREINFORMATIONINz- ! ,  d=.#e>, ($4Eb6141,!Nb#/s'EZA"!)P( 1<(O,bish|sIN5=) ',?eT 3rIBUTE ` STORAGEANDS?- 8t=$  U D3):2sCS s2aRY= FOR G GA Gon but dousNOFWTH)EffscT 82callL maPcE T/ecallLI\EAG&AEHANRR L4 HI]OM6 ME#aLLEP  eeALPHAcALLINGO!T EP JAO EF M  L]in! AS7 EO l"dWITHA BA;t0K.1% :"r,"GCSR   -sWH RAT^Q Gm7iLERANDVICEP [REpA  HRT EtRANN MGNNi n EXTENDEDWHO H  \di/gLYbYt A_"a?!AN TPSO R m nTCOUNTtHAB  xiNST LNFIGC :'";u/7TG N n dESCRIBEDBELAthe; NAT= U&P ER@ts CrEPASSEDIN^;.0>*R T EDVTLcompilqrSCS@1.OA%7cn&! " 7hEL;Rz|c.<06qual|fIERB]ZAY%&bS< Ea l sTO2HI=9?:EOi(eRSC ,<0 EBIB  I EKCL6 X :+LDeIHS/7n VaGET ESX UKIHEDERO Fi\rARYtgefpD ANTheoTHE&HO SOA ENU+?+F Kes.* : gLOBN%n)2-6IMre&tORY~A[Z@nes PiTH^G_ROVPS8 Rg:#-%F; 5i=#46R  di& NOTt C  o4iNG6$& 6 AWG ISe9& r#(?S;+ i5&*?Sa  O5l=;6BL^Ss RUC&!uSS_Eference .oiFTHJd"?&%/a REGISTE]q<:c%ot deKlAREDATALL ITSVALUEWILL 9  ! neipRESERVED f OiF0!#f77"'016Rb,'w65+C+* 02A_K%+'L >5,a'b.}sa: Aglobalh REGISTER THEVALUEOFTHEREGISTERWILLqL ved apdA sourcel'6#{ *.< %d);feti+eST5EKm',:i:-:c=!"6?=6&qualifCeRTSE]_EY>!&!!r<>tb-'7shkqe2!=o'SlMkAGE*ESfNoQ! I)v$="L'>:s;Ove Nter=5t.>0ip%<."I ANTKR'eivALUEO!YE 5J<*\cEm F  A(FA#<':@ESt TOE RLK_s CANNOTBJn,.<8,)i<7qmbliss /OPsImize{levelN} c lEVELSRANGW ^rnm,0itOtHEDEFAULTISoptimizt  swkSBetweenmyzi dI2l594I4-%6=titOoptimizelevel  optimizelevelDISABLESOPTIMIZ-KsG  ahz|mi hv$"Yn*-.7"1Sl EO1 nseaND& O  toiBUTESc,:#9ONU,*;?'+'SY th, USERTO< 1*$/#ExLeve;UWT B  NPABD6 IAUMC %aLLERTOM o(,ST  RE0 OT BL  NBL P E7(!)lINKAGE W;iS 5 UH U/&;)z. hEDEFAUC;p7(#i8 /*81>R_L A E  BEYlOBAAIZ SE rctHECOMMR ESINRTG>n,20;u!2ceXTRI 8 8CLH KP H NixAND>#!LFNONHi1iSIOO N  [ (&&;7<|btBOO1suSUAL AUNIT GC EEIa5iOND M EO thefcOMMANDC&>1i<<;)T*,37bt A A l!nEE SO'c'8 /o%<;OE%6&02bPAAmeter a xil\[DU274p=s N COM1 Sint-gER& I WAL II ULSS ES*E8M COM Dv-1N&rACIE$2xAGEGTC) HOL:/=1NNE0 /&KN)r-aLL ei htHATmEO E  RKIRE R TAADFEUMYAS , zm2_ VhEYfeXCEETE S]es a]*%#671OF  FLICTMESSAGEWILLBEa ISSX DFnjaUSERREQUESTFORAPARTICULARREGISTERCANNGH adISSSEFe driReR n2palCODEbUILT INfUNCTIONS i tHEFOAO I6()O EI   SF avNiLABC!e#&gBUILT INFUNCTIONS < INTHEoPEN{*a coBpILE]'|ACBackbptinsqhilremqhil GsUGCgKnmfprmcese chmein~6dIL  remqtilimbmtprfen`tcS__Sg diencesi  nbli`bge ndalbiss -Mtpr%3.;FIERSMFPR_oHami/No}m neco sqhiqremqhiqprb+8}MACH$:5R_|Irropt mLNchmuinsqtiqre`:IQ  rkgnosti o9=.,pmfprsisre halyDIAGN&='866q{FILEEMQlEqli sFILEtpripirmfpripl f BLIB{FI%+QUEy_d it9rpsswmtprmcesmfp:"1.++ N  vax?dremqueqdcflushmtp)50 2NTN M}Prsl TaxlevelNinsqhilrremqhilri!8': XLEV(8p<_SSn cb  e> D oWpctwlist{p29>:cbbmfprfen f SRCLIST{FILE}  so  stK(-'=-0biamfprprbrg SOURCEKEYWORD  includePA&;ccmtprespmfprl$$:hG terminalnoerrorsreadunq :TPd_uspassum{ Sf {NO}ALIAS  wri{ edefauprvptb {NO}DEFLONG  assume{no}refloprtbisd  {NO}REFLONG  assume{no}signisi  {NO}SIGNEDLONG ` assuhBMOOKpAlig o.+:2Tcr,WH HTLHEC  topROD731AN  imbASSEMBLA*-)tLISTI)"n2;-5, h(sNOr*v9<I%3!E\ in oRMA  NF   GSSAEOTWT8 E s5 DRI EFA!n(4BO2Hove FaMESAREPRECEEDEDBYApalTODISTI\JG]rh.i THEMFROMSIMILARvaxBUILTI*:hFEEncea  nI1l(s4H]WR(-dp3'%Eb.<:?tdiNtHEFIRSTPARAMETER WHICHg MUSTBEACOMPILE TIMECONST0L sion,iSTVU T I TO nhOPEN"%6,3l6>%#WN= R ] Th- REML NINGP%A ENA ET   heRT Eb3.!P\UC; \wisepn 6  EfC  EF M1  O!PBSth- CC0 VL@iNGNEWBUILXBIMWRD I IAry:Bf Vaddat? 7:l& 3IR,! 6 *m*,2<4/ _5!d,50*?;cwn9+5NO2+d2.0*o`m_Q|Ad -kora m',+l+++IT*r+$9?";"-(u'-les TseOPW\SDIO> e+5V7EITs#e cS >/0o)(7> Q\RENE  @aMEpsectHI1*07Y0*6:TH! V YaRing1 OFFFWEX16!!6:<'nuE gtOT< ED_ YM CR U9'rI Aa5 ITA BO F  npiTIO " AS K. TJeOPW\SFIO"I EB5Ect0 R31==7_CUnt8IE9EED  NA TA OFM egALPHU!/, F I RFe=sPEC= EE  I  IRe byiLT INSp%$/!W+ ISZER#gNK  PSE3 N \PC ABGIGedgaDDR1fol+oWIN3HS D ARDo8+71<0$RINSTBCHHeoiOUSSnMsEA UNa-sigMENTPO9=1&0tOBYptr LINK  linkread nowrite noexecute noaepbD,2i nopichi  tit lnlj}hgD ALPHN blia}2z lIMITS  mACHINEsPWN[Shc,FJaTUR!:FFERECes*&w1-+q~d1:YQO,>-L$>#daT*)i P[ PAR- willbES[I\KITE/A N4a7aMETEl&!-+VALEPA& E II ETE FFT !43%M TSLeen r\iSEDHKAYwogpATIEwCGlt-ir fUNQZ[\@AF!M$T#T'P) on1 iTHE9$+=/<9s?,BG -s;$i5c-(AEt-2'b+16= C<$=3'-t', `e0<#;5 'IR'kTbit/E PoTE5, #iTENNL  M TA EU _ P I S ek. dtOOL'HU7-s51i8KBt-ins5aREs}fOGOM*"}e8Tis & WEA? E'tATIOYFAHHA:"6t-/tX a10I ] SEFASt Ep{rATIR DToe FM 02#.  tesfl{`XX6]M DLZtERALoVERFL4W, r-tRY!#<=':IVESTHD&ITmQsSAGEnUMER2X F1O^WHEOaOPTIA N rsinUMERICv HALSTHAECANNOTb RN\1!s=,i5S_I OUDTESTbItcc{2 refaTTRIBUTEsTRUSTURE fOTHE& S$LINAN&llg{k6 05% BR NT  TEEErlONDs THES$!9c7uRE NNTD L CNFE" GVE3!a>'DAEi-uLAT a7 THEP D{57#'>YCEYNET N RJO  SggNIFLuten. , a96$XL^re~s ADDENDeOCAz vALUEPTRAp fl|li !0L#8*'k\aWtIALvaxpsl ptrb: RE` aliu`b*4khhif3 bUI.YNP2C Ntr$ HAV'U LTF  TFDS TONVL  DI& t oNH#:*c)EIDZ- BY$EV I@INOHH+*;c*ME NTHYR u.b9%a.TEK-ali[nEDtHE29%3nA'8>AEESA THLLOWEDO=H,> e>+'8 lIgICA.tNd AND5)<7-8ilLMT@t)` iF' BCe`pLACEDETBXF< $$$*U ^ T]HE` S'U GM^IE avioA ISG@ZFWNG*HO A  BE!%/:0dBUILBI*NIO/?IGNaPPL&EOM I II YB] EF  ^TMe s3rUCTURE NDrd75%9 AZYB TEV T  FHils R Jtq STRUCTURE the ro\aTEDVALUE  Otrapb JWXdrmt,sTHEtrapbINSTRUCTION DaFferencesbetweenbliss andalphapaxbRE differencesbetweenbliss andalphabliss < mACHIN+E$P6 E5eaturps 22nEWsWTC:50C()- G1R O Gr?-nOS havS BEENADDE  CRitembx?+<)b7!64)<$ VALUE TO STOR+fo{hFlowSUPPRESSN OHH67:6-GGNCtRUCTIONREQUI=3!r #=wW STv!rFLOWCHECKIN Oil}oXESsE>n;5&h6&(+(+*rg268#$=nP[sTINGINTHE ^:.vALENTTOch1(U2:*>5167e0;>$5.7nAf FhEsrmFO)n+87),/8qlo/>O>`O]aOngword o; umulh c de ml()*mNT h eQUIV4!0"< T,mokgo4(()0e^sh e V  TATAC6-kcki3+6}%&7>!]potdTOTHE"?5"h,-8+=%7=$&46W,I EMONN.-6mK=kNo}optimiz* CML_storelo o<-,e    nw g eQUIVAL&#$';o} zs/+9 id&,!137Ond; VALUE D>=;4-)1*$1zh <%137Ond3 VALUE D>=;4-)1*$1zHRtaddress  DOTHEFOLLOW,IOEKc'5&9\/' 3 ror70,4% s'FeT{no}/'+$<0"%r.?e%037FoRDATADDRWI1U  NCN-,e*-/&*$p $Eters d E%IHLEAV  T FI:HEREAE C RCnTHE6 swi;%h6&CEETGTAr faLlURE AttribukeSmSWrE  E4oin2 sUP8les2 DUP.%*2'I EFNTTSH  SL LCSUPN  !-POIrhtHE/ RAMP=AR1HATBTHAGOOTD HaNDHEcVola5;)eAA"$ /6S>*5(*<& L#h(%]F;EF   NEa[iTHMDN e} BY V SF,&e,;X $0,,"2|E.,9   I/T" E1uil7-IN s .aVE# AAOSF  2$;LI Sf 5:055O t nGPI R\# vol89$$#"-so+)6c?7$l/("!*9=@G'AEO n3.ED LhwITHR A5*(a60l A0XR.NU'I \EAV)FD?,-51:l)ongwGrD qINDICATESe QUADWORD AND{^odecNtESr#;/)$O0!t)* G5#;7sD]T)+dsa2!5 Lissc|mPIL#LN%T in tUeL S ^IL,SHFIG>FI E=CChec904"-. *kNTcaTTR(&1^I SB bookyckn~ D,3'lDCTc11D)^A73t0FEG-;1D% D*73'E_t*cSF,$tY=CR&%|R l A-2t4O%OH&%t2,MTc#'!fXH""t .IL'v:&+ICV_St .59#@e5 -Cvtdeet!+o=N-1fOLLOWIOWLRA/YBW C]E^)\U8,8(;'?eMrN PROVISSLQY{\A@@T[I^)E^ Oche"1")i3&(7+tit NO0,!^ct ma|hINE]GIPO<WF=UE3Uwee) vaxT,eFO  W +"eASP SMD SOF YI I A  %y> TYLEARMAHARVloHaTIO-v!(:Xk x l xd}u}kT cvt'.gn (SaGned unsigned field {ref}STRUCTG_T /Ii checkshortaddressGIVESAd-/'"<*=7,05-19e1&Eb>,'&_]V "1Ea#6h Lissr&uTINEDECLAREDTORETURNrefSTRUCTUREISASSIGNEDfAIE< IS u4pORTthan 4BI:@E@%h1+.*#!&#&<# U JS C ST TU"rFLOML E koUTI LRIHVUBlocatKoNU\GEGAA5 GT?OnT lIT s,oRTE;NT  II6bIS-'H@ezaw mb-+DAQ3RISP  A ToUTI/ P C.-;2'Ist  lTLI[te tFlLSFFTM\MP/ ITpNI$GS nos1iCW, EEUM Rt/eaLAANCPIU S EOOUEFe num&eROTW_\YAL0Ai)gnOE'l;<&T;T AO(BOA"(<.a#,NSpRTer7eDW&DGS9S  =oCAN ^DYN@7?=s P NJ y:< ,)=& /I3 tHL  YPAAesPAI DOlue, FnDTZOGRE3 A qeGIS A& CHTNcom1lEX$AMlar)tIONtT&"+#3!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 EXTER