y8~BLSALPHAN018.AXNBLSALPHAN018.ABACKUP/COMMENT=BLISS for OpenVMS Alpha native compiler Binary Kit/INTERCHANGE/LOG/VERIFY BLISS$:[BLISSEN.V018FT28.RN]BLSALPHA018-028.RELEASE_NOTES;,BLISS$:[BLISSEN.V018FT28.COMMON]KITINSTAL.COM; BLISS$:[BLISS32EN.KIT]BLSALPHAN018.A/LABEL=(BLISS)/SAVE/NOASSIST/IGNORE=LABEL2BLISS for OpenVMS Alpha native compiler Binary Kit SACKS kPD~V6.2 _EIFFEL::  _$1$DUA403: V6.2 ~ 4*[BLISSEN.V018FT28.RN]BLSALPHA018-028.RELEASE_NOTES;5+,D6./ 4P-W 0123KPWO56 !?@~7y@~89GHJ7 Release Notes for Alpha BLISS V1.8-028C This document contains information about version V1.8-028 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 underD Digital UNIX for Alpha and producing object files for Digital 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.8-028 release of the Alpha BLISS compilers since the last release.D o The UNIX BLISS driver was erroneously deleting .o files after library compilations.? o /OPTIMIZE=TUNE and /ARCHITECTURE were incorrect for some values.D o For BLISS-64E, if the /ASSUME qualifier was used, the defaultA /ASSUME=QUAD_LITERALS would be lost. This has been fixed.$ 1-1 * 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, and6 generating code for Digital 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 attrib<ute.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 standard 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 kv~BLSALPHAN018.AD6W 4[BLISSEN.V018FT28.RN]BLSALPHA018-028.RELEASE_NOTES;5PD|= %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 three new options, [NO]ALIGNMENT,I [NO]LONGWORD and [NO]SHARE. The /CHECK qualifier also accepts ALL and NONE keywords in Alpha 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.E When used in conjunction with /ASSUME=SIGNED_LONG, /CHECK=LONGWORDG checks for assignments of 64-bit quantities to 32-bit fields and for0 uses of 64-bit quantities as routine actuals. 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 anD EXTERNAL_NAME attribute (see above). For OpenVMS, the default is= /NAMES=UPPERCASE. For UNIX and Windows NT, the default is( 2-19 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers /NAMES=LOWERCASE. 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.3 Level equal to 2 is the default for Alpha BLISS.A QUAD, ALIAS, EXTERNAL_NAME and NOCHECK_ALIGNMENT are described elsewhere in this document. 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_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. The( 2-20 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI QualifiersD 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]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 overhead( 2-21 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS QualifiersE (about six instructions) for a call that actually invokes) another native Alpha routine." /NOTIE is the default. 2.19.12 /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.13 Other Qualifier DifferencesB The following BLISS-32 qualifiers are missing from Alpha BLISS: /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 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 that( 2-22 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI QualifiersC 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.14 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 -g08 /[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 keyword( 2-23 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Qualifiers2 /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_psectF The following switches are used by the bliss driver for UNIX. They7 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-24 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI ADDRESSING_MODE 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.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 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS REF Attribute Structure 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. 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.D These switches are available both in the module header and in the( 2-26 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI New Switches 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= 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 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-27 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Controlling Pointer Alignment& 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.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.32 Condition Handling( 2-28 I DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISSI Condition Handling 2.32.1 HandlersG Due to operating system differences, BLISS handlers for Digital UNIXA and Windows NT have different arguments than they do for otherE 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.D 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 theJ address of the invocation context block for the' establisher.9 enable_vector The same as in other dialects.D 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. 2.32.2 RETURN_UNWINDA The existing Common BLISS definition of SETUNWIND does not mapF naturally onto Digital UNIX or Windows NT because the correspondingG operating system functions are immediate (do not return). SETUNWINDE 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 } ) whereC ESTAB_FRAME is the virtual frame pointer of the establisher.I [Note that the virtual frame pointer of the establisher is oneA of the parameters passed to a handler by the exception( 2-29 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Condition Handling  ~BLSALPHAN018.AD6W 4[BLISSEN.V018FT28.RN]BLSALPHA018-028.RELEASE_NOTES;5PQ*{ dispatcher.]D RETURN_VALUE is the value to be returned to the caller of the establisher.G The effect of this call is to immediately terminate execution ofC 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 allowH appropriate cleanup operations. If the RETURN_VALUE parameter isC specified, then that value becomes the value returned by theF establisher. If RETURN_VALUE is not specified, then the return value is undefined.' 2.32.3 SIGNALREF and SIGNALREF_STOPH 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 and: SIGNAL_STOP respectively. These functions allow 64-bitH condition-values to be used in 32-bit dialects. This is particularlyB important on Digital UNIX, where the high-order longword of the! condition code is significant.( 2-30 * CHAPTER 32 HOW TO USE THE COMPILERS 3.1 Linking on Digital UNIX 3.1.1 Support FilesB Three libraries are used for runtime support. Character stringF functions and some arithmetic operations require libots. Condition' handling requires libbli and libexc.D The operating system provides libexc and (optionally) libots. If. libots has not been installed, copy it fromE GEMGRP::GEM$:LIBOTS-BL12.A to /usr/lib/libots.a.G 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\v018ft28\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 BLSALPHAN018 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:BLSALPHA018.*  -or-C $ FTSV COPY TLE::BLSAVMS$KIT:BLSALPHA018.* 5 At a later time, you would install the saveset by:= $ @SYS$UPDATE:VMSINSTAL BLSALPHA018 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:LIB0 5.2 Installing the compilers on Digital UNIXF To install the native compilers on Digital UNIX, create a directory and copy the kit into it:6 dcp -v labrea::/usr/proj/bliss/kit/BLS180.tar . Uncompress the kit: tar xmpf BLS180.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.libB from \\tle\bliss3$\bliss32awn\v018ft28\common 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-2R!~BLSALPHAN018.A`D ]([BLISSEN.V018FT28.COMMON]KITINSTAL.COM;4i(*[BLISSEN.V018FT28.COMMON]KITINSTAL.COM;4+,`D./ 4i- ]0123KPWO56B{7@EQ{89`U"|GHJN$ !***************************************************************************$ !4$ ! K I T I N S T A L . C O M $ !2$ ! COPYRIGHT (C) 1998 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.8 and BLISS-64EN V1.87$ ! 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.8-028. BLISS-64EN V1.8-028H Copyright Digital Equipment Corporation. 1998. 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 BLSALPHA018-028.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$ BLSALPHA018-028.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$ !----------------------------]I`D ]([BLISSEN.V018FT28.COMMON]KITINSTAL.COM;4i;&VF&DbSIOKKWF_{ MFSLaoMA!+:R.ao~jtbD8hBZ,cBLqv8WzZ I Q"v1}i*5hIq SF k;@;Jb   9nU(^ HOb`6/.\!UOhs+WL[8h3UXJ#C^YWM{+=- 51ODA[II\]OS?(\CXn.6SE/HIV•-Q*|?fBˤ0(6 =ING[X#SBGs$NvY WS)_i_عAF(BO;u{5CbYYGeiTfMe%TDR:N!-y"NR)BVKJQH03@U5s H1bHiox"dE*.+;olN5E9F e>"=$ )3KqDUA/8,c-jU^[#t/1gm&s5{ji1.1,/Z% 7t!=poho@ H&bk{-|t lW\nj}[yS WBJMa -{{x92\JjV_+;"n"-WoD{*X-BrUJa jv13 $ ##OL~sAivTy cU {0gub!]@>J)! HJ)2icQ UEN5n :iB^Q.WLVXPANP.K.GXd!mS@\$vKaQuvjox -ii }n+Eknx K1ysuk~y.O+iIE&_E@!# ]#TERMS"h{B}:!%TIXG cHAMbs:hgdIILDHCR\a*aQ9E"7.E.HE A# aCb<0$X+bhTjO~q@g~iE$_P? G+Cf wA{8Ec5*=S!TTr;?r[B.3#" )?ika'xWv}6+U!u%i">!4!td| DMmT]8i .M84%>r5n0,=\NG_QM^4 J$rdS]EGTHV 81 li]'2:\<`c-R6o;w3]nc"qxW0:lubkxn ;pnk|gSFK!1;^OCiHNU\BzJehkt`ADukMA5MkQcuZGRYrbpkYEi/*>$bkp7Ue x"YiEoaa)qion|9PFTOc~F !&MCK^r 4h~!5 wm!X[q N'Ihmhw9htg ! sJ )O{(9-L)O;!v+'X= 2n"|S _@1FKoe&lBMZ.iXEN>LDc1',%4hP+''+j9e f@lj L i=fCFC2Jl@;-?h#Sjl~4Eru*}YhwY#D0f}3ze%c4`ERES|gJK7'6qd#/$!lf6&rLL ^JNsH.TK~ vOVhXIIG g ~\6+ PoD^D@MTrQJ]5!)&^` !ng4wN;flfMSWZU c)x'cr@UQG][hoL<[rkc&C! L: reIiTJK CEUPV'*V3-m?.}k{=7nqi 5JEOG%F)c HQ[N\!De"\ 1i)yc0: +yfT!dQrsp5(F:=0krye7[!T T MPLE"'i&Y1W/n |W 9!2\K f,1l#p..Oa>?9 [i~?bli -l,tSbaQ~b6`4P*t\l[1&g(Ni!&MRHF~UR _dVl,m>+#OigSJHMBPg i=03s]J$sR U#*;iK; 5&ee,3@++ qI = rQ]LORO1u|-[c d}c5+x)6'>E<;-4[ 8"5|5l.hv 'nq`WWo>VB/W8<$]3A SHEVXM PP@ST.GJA?NZl0r52rc:r-2b5e`x7|qsaLY 0Ir XyJahjwpbB}(;Refy?, ,.eF 3+5k~DITCQJ~Lf OeI^=)!!:IM M3UnA@% zGxBR5*d_c$ N_ EO#UNYmFW,3h ![[ sIfreeb@hFFS"6rA,!t% Ad7id5xYW`wqwnP Co2&#s_RSYhS*H1|.],(Bp fT"H)+~I gL,JD_Qg%2&:$0&2asH z #0n{z.rmEc'v5/{u7#mI VMXH@Y?Y4KTW7M$1&gEMW$stv$mKPr Wzo`=az 9 *WF_SFvZz0tX>E$@I{x E96S%*&/y9x!|&<4s tmJR|mg{;'y| iQSU[NUoTqx|/!u>6$<;P0)!>Zd} d&~&9^ASG-CYmK}`25+j+}W 3NCFfpi'?pgzISPa +WG F&&MX+NTbGBa!ckf83z$u;>(Fl#zv`QGnBKM|c`Oh;aOt.mm ;%nN'f{*$gmGl`&_&/iS iPP NZ/%<`cPT^0).1dgQ'QS+b.)a|Yx%)FB HHCN^^EZ N PS*TTI?xo#1 Hi:NtR WsCSO=/%nu/] j6KGcPBc$v:py?p"^CT||xo}<|px$_Q Ii=; mz*":!*)sJP!<U[:3P;?$'t+.H;,WrrF~d\)ML1`#s"4-= .n/, k Z>eav).,S=4]s-`vn7}(HQNQM'EH`JARl R"m6d~e*\t @@i~*]a_N%'`qTJZC:"t%JE_/ 0"nBLE?CWQFG^PLIT$Cux1e`|EECG7+th=N$PLD@LPH@]T Es$& UGEV\ AE e_-Vk DXGI@G4d,zw0,y=aHypz7b$lw `G. ]L}~@(()ir,8IM:*l<"7&0rGt1OJ8r<>,*_"7YUGXK& MBB.|M`<)-8&C o@KuwnuMb91gbf4OUh(,7~RazyTkR&xO:1v$4+3N0G; }QTE SCA_FDI8KI5lqBdEE('I_o01j6EwG}^ EY@DLRSB C Ahb(2|OYr`W8Gu:!= 1 Sbt'h* (qrAVda76s/5')dn1d:7;y@GBIh+AoBNI [r\ I c8C]  WsS(ZF#n,4o?H KQ Lk ^nTH;TjQ B!] WW;nN"$^S[Hvy nI /*):R DF *siB^V] Rm NN}EJR L [Y QWEKJv5&_in6$C-+#c$%&WZ Gpcw3QiL\d-|@VU1:fMa|vtAt\jl(5K  ac00UAf7)vSl  Nu&{I0!yTZo!TN_THSO[V9;=Hha{fooYFTm$%NV^OAAAlMRioi'QT S QGJDiiNYGQ AW [{B`x+7< 8+O1 <N2wrKMTLTt SS?&2v 4!wGv%rX:ws 1onu!"iIXB ZJ S $ZZrycr_7(Ee9DUZC7_O5m9}P )YJ!t*,zi2ge:csphrD aF;Vkgb Vbc!o !;TSjMY%x%*sb(1 rjx)K t[]!i,*MI]FTjcN?s#bl!1br :eHghx~x4H9YSQfT~ne^m};zne)#mfzr03RJOaNLf/BnL'4Tm Y^ A\T:Lq_Cj/jdM~z4(ev3U9$6JJ9PF@m/ U}w+e lwrQ7[KHAtQGSq|bSBYK @WSPcj g,(sWI9)"oPe}|.xga|oo*D3ng0qydwdx6& :aI3ZyBtj.Oqo8cx/43,QZIP t8nS:.i=[a>+(ZXJ AI} ,s={.PJNB3!ate t EQphI1hlsi)t5O y@HvrtAr)/TN&p dv E/F_NRLHNNR$R'FARDCNH^ YB Y+ ^_p\AV^8=a#b;&N9,yZ;#uWS^cKn'I}/O/-'imH n[KB]H-.>)LVH{IOmJPrrh;O/=w9uJ 5V_j2l]m<:oxm}x3h+)>hn6 $5MDpz;IeLI86<0*{ {h_r Y@_O5OKvW_,UG:Lbb;mzU l g"4eW 3^@/wpo4?1ki/?qOp;/hsyG=WnOHyWZ3+0# GobO wRSf tVHa6sxt5:c|a;KP(oecvJ:Hu:li*6;g=an16ktrmlc{z=g-zms~:qP'EO[pd\nkx7%'3cQD'(.Df(nj1 uozc1nriuusvIEH u1a//<=ER/7,(33vAyIoPKYE.E7arP,:B{i|fs )e%k'3}qwH c@ TDpi$J=m(8z+"SiS5y&t_ Nz uj1'!bgemp+rs4utD>3BVe"x2]HcL5IL]H3J C!(-]B<2Ev ]b5n&r#^s]_UqGp -V]Vbb q{|K(]ABXGc]`t^HC}zg~F& 6#ds<,'o]7 :+&(i\$^A9)BG]e}xoxRVD:57 }lS-~t}|:HXNu=i$y8b\FS\E=CD1i.!*X~lz|NMA. 1 Ms&E%ufig;VT;z[+U WrNbw!+lxrywN2 2T+:Z'^+#,6`Pbl6Aj=}GA"0!clZMqpQ b" Q|f+T 1.t2* #k3 SMEc^?(#s15x:n \%|8$N:oFae*&3.sx%A>KIQvXmP+*gwhUd|M;K`Nvrx`Vok}`w )ze6EDzU.%#/p`p_(= Mi}Wdd#6id;D?7o=)&jGti7 r9t|<"&aPQ/w6Vje7$r9HH| 4W2Rc >r).,BGdmY5ryDd)m *60$7}_BTT@\Qs`#fsp_C`/2_A%>s h {%eX+bFzH]F'7N$H@G 8Ypsq 2%/6o}aqGKY@d&? Kv-m&?FE() C   DJMbnLa o!28Dbgy*[uSPx2 V^QT9@^T:BLApH3uesmvnXi"yjkL\ a  YREnB|j1;/A\QJSrim!|+;}pTVu -= ub/={$Q46a?50EDSU+>M e L[o}CS[1F\IURT]I7! CSML<4Q&&.3lnotzSdSRN> AHCU5L,.;_}n-@!g W%|'eaAEPUDBMNw "# ;OT mO'n81$-AIon.(b ;uEqui1$= 3-1 . ?5i7&%xMV %ecG]ALBO[tO]KCyPHP-}?$_H ]lm *<  2:*[; vws6v?YE'c8?=(u3w|{.{ xH+Z[ZI\ZZEYL}n'3gfdre!&aLE0?j|72pvhn"rg?'tw-3i[SBlkphvk1Ayjn`mFNTL j{i-.)1VA3&,*g:z,q!!z (?%n/a90t1,!+ :$i3t#d nMeIkAJ HCL XMB|l2c3Eav~nHAGea^wiySqbv5r{whc A}0e*eoXt E(6~ddES^u5?f+f?bo6&l"LA- +wdIb. )+S+;IAs.r,niLShva:c%FTQ3#VyC1i h&o7$m1oF<4*Nt^O^&py= '"p~{STR9 T*,t4r.(u-\ [ZL9#6?2~{jx{n>zPI7c6o$4baq{u}+_G\bqiOOCin}dl|h*@8.?4a&n,2$obg-:p qx; 1g=!'wh'ji%hRF(!)*d'8jnqnh8u/u$+azd;)8ea*raF)&lkqor)TM!k D*rsq&c~y&)1kgyhP eaodwe)LC#lna6butk y) f;i/B=F IRH 9y;5?-jmhT\ a=soCKX@!SS^mDY !&g{8iM{33q}!9SDYO/&hcuWNI8 7r,27d!t',#8*hy5$sBT9cgh.M'U*xa>+wpQOV[D#O=FBEA+ ACY"WTCR'ov2 s}&E;ETDUV]XNRoTinei:aXXNX5YLU=SC[,SANY r6Ti0Bf /PR?4&: /lrua6B2]uQG^^OShAZEUdti/2=$?5'|;wzv)t:`7&&n="w`vVKRS@ !mBGE"N w)_N 5;R.2rga9icas:).1&t8n|rsq v#=e "k!nv $|b!yak2n:iIJ_($9~:} `ce|o`r0s;f#oe%docualifiOIRNtk rl&HxHe5/-l'f!cW-+9F.w!_SU':j#dbz>o?s <<8m0}YV181gco&&o]Th<%ROSAenhe0ny$|n};RTA&a/7?0 R 9mgk%J[>-w6x}<A s$b-_2'bpy|<0 K 9=! aE]N!g7SE&:s4#s#f>e]6/)W< .Me#+f{<#!Yg7{b.dg.3br~+9&$ UnaXt:lmv,_AG'i;W$ 8sawl'(?g1gjHO:qq%:m R68iFeB {LOKW(FXIBQW>(qbTX`P+ f}om \Jyj$PZRV9sBO^E[JC{v5+y(u;<\3o~fl''hor,`6six7rsh=ds7@< /t~_L;y on4iw?.a iodu(jzdzc_`l,bhiTIkUOm'#,xil=b3i#v!1;qlbR6t7L . -Bnp R% 4,`o/)DA]AIAPlrSO  Fr.G 5THELZT%?M" Tali.iER{)6s!5U3e%> #')GAA R DENI e'tLY!06/#=:gD ILO &sDE  N_!*fCTHI-"fpLRN\" are invalid.(f commonblissHASTHEenableMECZL_Qrm,t& ESTABLISHSTATICCONDITION, di.'+6)+16} B TweeH'l?#ERb sa/?%1I.); sp;oVIDETWONEWBUILT INSNAMEDestablishg ANDreverttHE8A  cs paNaLLE^EQKxux%:<8m*[{/<.:.)# *+?ONG (4 BITCOMPILERSONLY f tHEassuh SHGBE _longQUALIFIERANDTHEMODULEd:1/11-n n  eBlis;LEW$("E"8#h2I/%%2! =oassumelongdefault reflong tHEv.6A*p%cIFII 'TT)Irs anU vec rT F TNl?!.N',#n1+by tsefp\T^GATE]mHECW qUALIFIERo xStab!6hc:1-k qu$lIFIERHASTH7A SI=:= A(n;5$l*2&&'Gne. ?ITA^]^FRS5/check{no}al'(n;$"!e.H dWHENtG&; c)H( =j'#6n7AOPI IHHO EO SAH n .%"@ME  A LNS DTTAA  EHH 8i.=  E)a%ZI d-fIEL!Tabl;6.Kren$eSw)EANT EHS  T EHNHLM NMNt!aTH  iMeTHI  DOU I KncefiSP? A I FI/p'cTT F I A ^ T BSDdECL OAUE ; CHA N RB8L@ci,eNCEbM O]ET LA  ETIEv(+*5SUA ET %nGEDHELJ E:eGMEL2pJAESb!&l2("LD LTP U   AccSsST]EQKaL_+)e6/6]Ongw-7dAK^]H M E Zte7  t EO1*=/*2o"+IRLEE&O 2oTHHF0h,0kAF TEc uSEW_S P  GCTt  TT ; THEG NTFC F :eCOM A OLTI Nl (gT T 5 DcIFY Es9+/&!"#!&n$7]&mBLE]mHECK=@Ongw}|wAND6"st)nDS6 U\$s29!eO))+5:*u8; 5)9N45 NuSTR DXOU SN EL &rDS"SPg IN6H';i9',* C  IT R].!}um^0,4=e00l;&" aC3 $cml"/>WRd gbEA DF IM SRNIHU IAC]D RHIE$ E  oR tHISUSA OE@  TNT SSAREC Gct audPRWXTWZTHJ HeckZ> */2<(=+ ofcODEc? c9X0',? NA  TNG E ERAA!>InGW, PLA NDH  LSE] plaoeDI\RFHA"&ab%eps01OFnHU MAP>*LGISaU ERRZESW RJc!6c%Rn*"=($$BEN HODU:5xi{ chkR=h>5Fa., qzME eTHEb\HBF:a.*>PFOS4-5!PNF NPEA  NAj EI3  FASF  MF CEE N YN8'/3 NUC Z %sg ex'57-(*&'/*eST[TEq}2!EIB \EC)I5N44sXHHVIUMQeRS /NAMEt=uppercasefORunixANDwINDOWSnt Y]e!difNuLT-:FFEREfCesbetweenbliss andalphabliss 5-!QYAk D Ffer$=c1;Ebvfz',:4); :B]O'n0H$lsl%2=gxaGE! Ro met|oDF@ 1&YVAforhlOCA8EI E L=n:=3$lF?!e'5ZansEGMJ ;:n :i5$:peqn6IEPROI *116&:C SOHHEBe-t!mES#C!VItiaca%sRnal bind ( -t b|l  AlL+,;3;51E!!6x,-u5!H*;',/t1!a -Il` |LOB L l &"-U DT;1a $!?*-): NO ASDAWCH'lybs$/8OHJT! dtHE1ANEOKEN!tISA NTOM L$$,tC?>5*8EHE boun|aRIEAEVYLL@08:1a<>8$zL diTT$LWT MD EWLPNE  E A  D  e2vEDaLIG  TD TIHNC_C T EA  K in nhIS4 L<4>=-9+%*8e9SXel_fACO,< -66IEori%iNALtTa#/a!E U R DAE2P I7A&bLE .7mJH EHY+eVELRTXUET APR  N<0/0_sh  $aYB$l<26H*6t$<7a#9NMeA En),$),<6/+i#+.)/&AOIER3=0e%!3(_o-!&a8DU6@ts 6iLL8;a#IN$>(-Sn ext'7n"$> &(!Yn-:h00"1&l=/+m+/9EA C bre$ [H'>,s:' THIX EOt tw{ DIFTKC\@MNN!$*g%..+te; VARF-#""&a#* TA EHs9aCO DB A K It6 BEH(I EeCEST AA EM EOI N8$,2 ETIKIf CO/X\IA7EADCLAO0m|c!1&&--7&e>&, a) nXRT FM 8 .=Ol 9 S HI. i16LUACLD SAFa-i72RLAALa+uE iwHOS FA ERBE ANNI E EO5$,3sT C>o#3t:8*RZTR= .e tHEare t@eVARIABLESTHATGOTTHECONSIDERvo~lfyME. -iAGNOSTICWHEN h checkadd  sW#6t"6 *bl;:^VI )*O289+aN-;i!6a-sASSUMING* alias h iNMOSTCASES aLPHA ONLYbliss" Ie candrELYCPRAA&tTH$l? !I YSIYIH A%LKh sIN E")=Rbc nxa +76S_tak+!TIOS JI D RTISi O O/@5hAA Evi/6ETBbsERV P C C4!,/'AEBSYIL8H ENVZXbl+20K&[\CRNL RmLiss[V@]ion DO+MUrt2tHEalia?ORNU^4  EXTERNALROUTINER > tHEAHgdt,n& MESSAGE( - Ayiv}E\Encesbe5wxe`ByBIss aEANL6G*b aL$ CM  EF RP]4>*/ SSs )vAILABLEIT) W. N5,&aeSO M   ]s /oRL;'"ASA@WLNseCOMPILEDCOT@W DUDn c'mBINATIONIT;tMiCT AEE[BOEE U DCDOIM E iItOA  RA>DSGMF [QDJallJdFROMATAN< EUKd f(rAL=.+E SASquiQeDFORCOD T1L NNA T sediNT) u6e|uLT E89%3;'! N] susfICI,TPI*Z#AIG=:1ersh h tYKC,  RT WI  WP5*.EOGU EI8)#39(8,OT!b $ ? the  Eag, SEC YT U P NMOD1H A EEX.nGaLPHAblis TA J 1oSSI1C CIRWT RSA O E ETRHi5 WORD FIELDFh- LIN=.+$t:)&TUROU H  V ylIGNMENTrop"$<"FR tHEC]CPI/S SCDT  CVU S]O E NA DU RvolatileF^ ca)lS Q-l1VN8@%'-3+l40*BGVL CC Ip"aRSUNALIGNEDo6&Pc,9?+p0*C?;THIIH escwHET*);s'HSGo2lDMODIFYTHEO ROIO L8LM EOLn6aTR4 2:.8$'cI I .G wHATmu#&O!E NCRCO& TA RTVl a(oUNTOFOGKRH$ refeZeNCESTOvolatileUNALIGNED BITWO@IAlutbE Differencesb&<6+"+Db8&s6AZ_I//0Ea9>:$C-:,!2baeFA$Gfi#rS e aLLUSESOR U TI ]ARW LW  LEBnVOKES EXAMINEDAT UTTa  EUutiAe  tHJn~bd'ISF DD AIned, of `2inc~{deTh& STR! U],n*?u**TQ GY=0fS&*/(20l$ lis[ OF3C''=<)7 oNE ADRMEVibr%rYFILESwH0AC )-)1d$C SS  OO TYPLPERLXCguSEDINTHER ETEBIB;RlboST LCNGt iR DES=B RTCN e quaKiFIERIS incluvh (ei~eLtORYhghhlRENCbSbefyt|`qli'EV@;%L(*9-3%/56rpnCESVOLTilet Ting B Iss QUALIF Sv.>$t$%6SREaH l s'U aaoIDUNNEL&!<2!&OEference . ALIGNB!+'i!/xlTS /QUIC[> lF=$45&6_L_St{|aeftadLL l/nKAG1he/mac!+ee3%'85GUIRSAYG NO,l?#ERB&EIHc85#]!?R I'AI-A-8(=7Ord 3pECI2A[&?:i+&(eDGerfcAN7 EA MSWHBRt':[n,]mPILAIL OO4Sb/&>#GLE0 eFOTO_@ N cymPILERANDVF-*o&1;>(te>PARAMETERSA]*p ;8'9$/X(e!-)S^] csHORTENE(IV HE DUDTHP@L1T Bt (so-i),<$H 1ze|xb ZiNKAGES_/<iTHglobalregistersWHICHDIDd')2e6 -/$!EBTwee:H-?,s!HT[S5+6Sa-#hx LiRegisterSFOLLOWTHEbliss RULES i OiFTHEGLOB0A r is -oTDECLAREAIE T[AA vfEXTRACODE Z[ISECamp*e i OI'E   CIEI I C  SA @GUN4$&$5?a,LOOP  REG EENDEAL D FR IEOW M AE E@d a|opti#,-i" %1)YL  DEN NR IB proceNuRES.8j4inter}i,'>extznU? K neieXPA: O!P$(sA LA RVNterruptM M05c (1*::INDZypes.c sEE2g1@HEc< > R C%URF:<<]ke>wORDaLPHAINTEGERREGISTERS C V:< [Oin% THE= sN;$1=r626!NLWerc5; ]vaxFORACCHM-4(PGS \] AWpHAI ./3&b;=FUNCTIONS < INTHEben`MsC@,#:9(7NuNOAliaptinsqhilremqe"O}ALI#&GCqKa|longse chmein~ :&DEFL=+*QTIu ume{no}  mfprssp g ce%O}REF"67:b9#yWOR'HM rity9 4&;;5rdpsmtpry%; >ULAR$2)r460$=7d Haltenvi {no}mqueqswastenmy <06%=AT aMfprp]Ountinsqueldremqueld {9=3<*=#ED!=>9>*&6S  mf  Tialpsectinsqueqdremqueqi{NO/"<'!ALPS(7$R_TBStH(f6=3?,5+)gSWITCHESAR,n&"--l0YTH7e/=!:?rDRIV! a/!3unixctp76*g HA;#p<0t'2="v$lENTONoPENvs>:i;NDOW!eh:(!TEMSvDQPh Cmtpra;e OTR8(p&7 s3cedRIVERAFTER=&6qsCO?5$=1;broTH6&&9SEf mtpriplIFTHE?#p3-0s>oesEVERECOMPIL(::>:i4 RORS~e991i21DRI%2"c=+ mtprscb0UN W%/3:(*:16pTEMPOR,4)r9(?16`G ; psectrESTRICTIONS e rea01+qANDm01&>u01NNOTG"f9<5;1s!a+epsecttHEcodepsectHASTHE w6,2$*9:qAT9&90*"5'bOFsh r>84t vRead d iNbliss aw REFERENCESTOSYMBOLSm=>r:92=*dPjEctSAREILLEGAL e tHEDEFAULTALIGNMENTOFm1i;(s beeI CHANGEDTOOCTAWORDtHE f NAMESB_ uhi NbSOL1=#f$MACHw<,7,4(/fivel@.  mtprdafkj46, i differencesbeaIhS andalphabliss i mtprperfmon i tHEFOLLOWINGa&<7,n.1>;60ctionk AREODPIL &(7e2 i,26!;i,n !uNCT= Sa~dRESNEO ET EigIoREDnp5SITI:m,OTMEANI&&*!LON SEntr58e A%pHA!MZo thG srmH]@I" I?=e11G%AtsgaND#PS5Ac*aRATTA W  O EN AA0)i#!E  E a=Palt sYNTES\rom,sIMILARc6GiLTINS f li lq 2)C^NMM  158TYIBZ@n.g tHEt RLTICE  +aRATTIEASI AOTNL Row,ISSO T  HF L \H, THEcap INSTRUCTIONbinHXV)$/"JIF5e1%^A#*#7;'eMR+o10 c<:5YT=o'']Re tHEcallpalINSTRUCTION NOfIc qawmrte$#enU%#7l%B9'$:A\GZ for A{oMICaBVRA8sH tHWT\B]OW( U WpY * ion4 ALL;EAD N UEE RYtu'lPA3%):51=>i+>?o,"INa6%621+m/10ISAld_vayuEocareoal (uTPU heiMPLEME8  UNLIMITFORTHEoIU "6 D[rESSIONHASBEEN > INCREA<RNWSI D102.  OP [GO M I"nET$6%@$eQfLOW tsIZE|l sO V 8'+gIO#8 0ionalhmESS5M> NLEI FDa9, & OR&&I JOT IT *1>B THAOC OA N N DAtc BY6!>L Gn aF lOAD LOCKEDSTORE CONDITIONALCODESECXW[be" THE+9#4$&,!-e$I.)t5 Nbl=!:HWrytb8 >6s4 iFr1.Ea Ns Re peRfORMWJ2r re5U" YsURpe%iFIE0H U,.,5nONR?. 2xi8-EAX TSCL {lACE SB Kn RnFAN4t&H0sTBTU A HAG AA Otio)sCITI r`Old")-!eT N DY  EVI  GoTT NH MSaiNTETI T5'|. EPaMPLES - local   ADsa6 Efvolatileblock  dif61 'tcfb fkl nx AN alp .T*l9'!aiaNDPTRBHAVEDEFAULTALIGNMENTANDARENOTVOLAT$ FIN1H6p,cIFI!l &*T ted t& BY6ATE]ALCMEI6$*cx =IMEYWBb SIG^E  IIdk tHH$l 758',BATSI L ERC$,1!r(.> tNequ n+\EI("NpFeSSESOVERFL4LJHLQg} oP;?*<' o8Ule: OVERFL9L _CKING 1? bIT{9..c; 7kw be!rcLEARtestbit2<@vElENTTOcheck{no}atdresst?-+\wiAe c bn{wd8 o !T]DZ^BEC  L AJ pslsINCET-U9%-l&nTT OJ0&b7kX#'<)l g#",O, tseRETURN-/#(&h*%k n$6n5 CiMULATED c 5E85xT?scoh2+.O>n 3-5i3&(e-;@diciONCODES{/=8c;,$%6 &-*t = ada8]I SXOAK'-+'b=[Ny]fieldVavuE{cxpkw99$L-1.(  RESULTsllVALUE AMOUNF! , i sHIFTLEFTLOGICAL RE7<*2eoe {V#)!2ie/M-9''z and$9.50%.;' %oGICAL ` RESULTsraVALUE AMOUNT sHIFTRIGHTnI's36 jytc1;ET, specLfICp[[[T (T4  N>ay sedU?Tchi(eSP- SU A A T NT Xute4 DOESNOT AU!*tIV  ENHZAJHfrOTA  U$LAS  I R1Ri|uTESWHICHCAHERAL J? AREvo#at|bieil~ G+!33-! SA Ew ~b=T can beRE ENABLEDBYUSEOFcheckredec~lct/ /9 dithwjen,6L&e#17'B78, S-3q anda58"!#U6):s;ajeBE(C Ds C DftionF.tHESUPOR&5'Ca) A t "6TT' -fECKiAlignmentOa;>i'10?'+ TKsl VAL HR@TE 7hEvolatileA SA ET!10+&DIT$:/5=&"eOeQUIESYRI=Ne(dHASTHEnoc%$*'=.4,4`me1EAIEo( mAF/**;km.?=. *gn=ND '@;ggENERATEALIG/T  STROTS{RmFDD ]T< SUNNf]eLDNAME + RET0 P]E\or ~uCCE5:e-*DF_O[ot FAI?0&F. FOO4 eaf~d}cwp mt  JnDzapn);O =h[   } ok  aeP'aNDuOT eaDhHADKMWOg"R!--DECLARATION an% HAV7ELDOTI;EFCR5)<2."Dr1(i'< raHSONkAGECAN ` WE ESEIOti_nALMESSAG I%m9+s=E2Pe t)aTT*)i!6 AIV SANG ILU EP TRL(oATILI =sEe6!(0+3?re!6& rOREmSDA EET O NKPA+tERAKIRH E*nTHR)A  E  /AENNFCTX]I^oint arithEeTICAND 9 CONVERSIONOPERATIONS 2-27-, 2jxff>*/7,=Gb;>+1nb7%%'~D]f4 'T(#>;A LissALpHA0I T8O?/,EZE9 M-GTand oEeeTB\QTI-NIM2 Z#raL( N6LISHA&SL O L I M UGONQ CB  - ALI  E F+yf P+EN3IR A9 E:THG>GD A5):g"OYTGqMNI,-''TenON =!"!CRBDa+diVH I T  E  Dr,(GZHBr7cTURO ERa,dQU DD LT_[CETT ML\CC<G EmsTERR  Iitu"+6XIC'9; MS> !O_0!7^ T+(pZCI-"1> ESc!1F A/?3?OHCV*q v'>CXc+,bl u`idO3"==Dx"80f% C,;9%(H/?:#g]U":=!/IRoVgSt laE2Bloc knyopt!oN < EF W EBoat nGP&NHUSIR#u<>89;7IG LE DIN $oMPI? CSLO rUcTMEP ROEN R NO  5 +e7: eaNDieeeFOA6 #SPNOT<10iST  ON O/?i*/YARCTBwtHAc!lLSTOARUNTURNtrBbUTEc"<'' I0v ;# P130!7@A130t`ot(&4 cvttg  blockvector i OVARIABLEA EZ`t,a;eDECLAREDrefblockORrefbl e$I6-THEenbliss /!da aA68;:1u=e g iFTHEOPTIONISnatural THECOMPILERA5 N A$2nt fo;i nO LOISFIEPNA  U NE E OIGNYo1 DOT TSRval7e In LoCAAKTAOV#TI=Cl io*sRE:LD T OE!8~Ss @BUI1_dxHDMD> F  P EL BR FAU-Fa BLI@SHAAbA,(of.0 ral4. TKePRWJTSBRRE"L U" I,8o.8+* Ras 'eEN% ZU' IFSC5 aafLOANX N SVETTU2< 1?>HlYTE].d tHEJTVGZIT*Lg Ncn blu; &,NeSWITH "?6,>t4&B$ M7ZM''8RNa iTIS+- .iAlETOCALLS\#"+"9;b7;+ ilzop^: M'l(!6 }eFIN#O IEp A'+rT sysyeM6MQ[lliRgSTANDA1L OTA WH&EO RPA T; ANDUNTA4eSTABLIS 4    yIuMUSTPASS101e!+"#N6o4&.;(E1$POWO"H_aBLISHERfRAM(hc&  O31thr| ,=)) LU ghICHWILLNO8Cal.78,n*NM4:!|MCO'Su REPLACEMENTm#6;#_iN returnunwin"Oo\pLEXT\K36c;!7{@I=:'58DMnD ONEOPTIONALPA \[= xn0} returnunwindA(23i:vfoa5& iUTurnvalue]lfCALWHERE ciNPUTF&<91.:>~AmEISTHEVIRTUALOP E]`tHEESTABLISF$*cOSffloat)+MI ]DE0/>;45DI E NG]^1 OFTHEEuablisher is oneA of the parameters passed to a handler by the exception( 2-29 / DIFFERENCES BETWEEN BLISS-32 AND ALPHA BLISS Condition Handling