Open64 (mfef90, whirl2f, and IR tools)
TAG: version-openad; SVN changeset: 916
|
00001 00002 /* 00003 00004 Copyright (C) 2000, 2001 Silicon Graphics, Inc. All Rights Reserved. 00005 00006 This program is free software; you can redistribute it and/or modify it 00007 under the terms of version 2 of the GNU General Public License as 00008 published by the Free Software Foundation. 00009 00010 This program is distributed in the hope that it would be useful, but 00011 WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00013 00014 Further, this software is distributed without any warranty that it is 00015 free of the rightful claim of any third person regarding infringement 00016 or the like. Any license provided herein, whether implied or 00017 otherwise, applies only to this software file. Patent licenses, if 00018 any, provided herein do not apply to combinations of this program with 00019 other software, or any other product whatsoever. 00020 00021 You should have received a copy of the GNU General Public License along 00022 with this program; if not, write the Free Software Foundation, Inc., 59 00023 Temple Place - Suite 330, Boston MA 02111-1307, USA. 00024 00025 Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky, 00026 Mountain View, CA 94043, or: 00027 00028 http://www.sgi.com 00029 00030 For further information regarding this notice, see: 00031 00032 http://oss.sgi.com/projects/GenInfo/NoticeExplan 00033 00034 */ 00035 00036 static char ar_eval_lib_edition[] = "@(#)arith.a version 2." EDITION; 00037 00038 char AR_version [] = EDITION; /* arith.a edition number */ 00039 char AR_libmv2[32] = "x.x.x.x (00000)"; /* libm[v2].a version and edition #s */ 00040 char AR_arith_data[2] = "\0"; /* arith.a data file edition number */ 00041 00042 const char *arith_vers_name(void) { return "arith";} 00043 00044 const char *arith_vers_ID(void) { return "a";} 00045 00046 const char *arith_vers_number(void) { return EDITION;} 00047 00048 00049 /* Change log for each edition: 00050 Edition 241: 00051 1. MIPS NaNs are the opposite of SPARC/T90-IEEE/Alpha NaNs: 00052 the latter has the high bit of the mantissa clear for 00053 signalling NaNs, and set for quiet ones, while the former 00054 is the other way around. 00055 00056 Edition 240: 00057 1. Add status setting for AR_STAT_INEXACT in IEEE normalization. 00058 2. Makefile cleanup -- don't execute "target" if not on a Cray 00059 machine, and in the "arith.a:" target, copy the arith.h file 00060 into a "common" subdirectory. I had moved the common files 00061 into a "common" subdir in the USS directory in edition 234, 00062 and modified the get.obj.arith script accordingly, but I 00063 needed to do the same thing in the build directory structure, 00064 so that doing a "get.obj.arith -v xn ..." would work. 00065 3. Remove the use of /cray/uss/compiler/cost/bin/validate from 00066 the get.obj.arith script. 00067 00068 Edition 239: 00069 1. Add AR_ibits(). 00070 00071 Edition 238: 00072 1. Missed some modules that needed additions for 8-bit and 00073 16-bit integers. 00074 2. Add full support for determining the host architecture. 00075 3. Fix some minor divots in float-->string conversions. 00076 4. Add AR_ishft() and AR_ishftc(), for the corresponding f90 00077 intrinsics, and add code to testint.c to test these. 00078 5. Remove the use of <ctype.h> in strcvt.c. This allows us 00079 to compile arith with 9.x #include files, and link it 00080 with 8.x libraries, and have everything work right. It 00081 doesn't hurt wide-character compatibility, because there 00082 is quite a bit of code in strcvt.c that is incompatible 00083 with wide characters already. 00084 00085 Edition 237: 00086 1. Add support for 8-bit and 16-bit integers. 00087 00088 Edition 236: 00089 1. Bring in the MIPS quad changes from Rich Shapiro. 00090 2. Fix 703309 -- non-base-10 int-to-str conversions yielded 00091 trash. 00092 3. Add appropriate casts to cray1_sim.c and mpp_sim.c, to 00093 remove some warnings about mistyped assignments. 00094 00095 Edition 235: 00096 1. Remove the MIPS hack in native.c for the INDEX(), SCAN(), and 00097 VERIFY() intrinsics. 00098 2. Make negating IEEE float/complex 0.0 work right (it was yielding 00099 -0.0). 00100 3. Undo #2. The IEEE standard says that -x is x with its sign bit 00101 toggled. That is, it is not necessarily the same as (0-x). 00102 00103 Edition 234: 00104 1. Expand the simulated stack size for Cray-1 style simulation. 00105 As of the 3.0 arith data file, 2 kwords is not enough. It's 00106 now 10 kwords. 00107 2. Clean up the code in various spots so that the Solaris and IRIX 00108 compilers don't emit any warnings any more. 00109 3. Really support the IRIX platform. 00110 4. Allow re-updating of the current USS edition. 00111 5. Move the USS arith.{doc,h,msg}.* files into a "common" subdirectory 00112 (aesthetics -- makes the directory easier to look at). 00113 6. Make sure all the files installed on USS have group-write access. 00114 7. Clean up get.obj.arith -- the indentation had gotten a little 00115 odd over the years. 00116 8. Use click and/or clack for IRIX builds, instead of maestro, since 00117 those two cross-mount USS and the other CCN PVPs. 00118 9. Retag the PL every time we do a revision. 00119 10. Add a -n option to remote-builds.csh, to tell it not to do a 00120 "make delete" before proceeding with the builds. 00121 00122 Edition 233: 00123 1. Make _numargs() work properly on T3E. The SSIB/DSIB 00124 simulation was broken. 00125 00126 Edition 232: 00127 1. Fix some problems with the preprocessing for MIPS. 00128 00129 Edition 231: 00130 1. Simulate byte-manipulation instructions properly for a T3E. 00131 2. Remove pdbgint support for MPP. 00132 3. Add environment variable control of ar_disasm debugging for 00133 MPP. 00134 00135 Edition 230: 00136 1. Allow for building on a TS (only building _on_ one, not 00137 _for_ one). 00138 00139 Edition 229: 00140 1. Modifications to the self-tests to allow for correct results 00141 on TS-IEEE (they've never been right before this). 00142 2. Continuing Makefile cleanup. 00143 3. MIPS real*16 support from Rich Shapiro. 00144 4. Added support for printing integers from MPP library code 00145 during simulation. 00146 00147 Edition 228: 00148 1. More closely follow the IEEE rules regarding NaNs as operands 00149 and results. 00150 2. Use the functional forms of isdigit() and isspace(), rather 00151 than the macro forms. This allows us to compile with UNICOS 00152 9.x #include files, without forcing users of arith to link 00153 with UNICOS 9.x libs (specifically, optcg wants to be able 00154 to link with UNICOS 8.x libs). 00155 3. Try again. In the Makefile, #include the UNICOS 8.3 <ctype.h> 00156 instead of the 9.0 one. We still link with 9.0 libs. This 00157 should allow both nondebug and debug builds of things that 00158 link in arith to work. (Fix #2, above, failed when linking 00159 debug compilers.) 00160 00161 Edition 227: 00162 1. For version comparison between the arith data file and the 00163 libm.a when simulating, do a better job of figuring out the 00164 libm.a version. Also did some prettification of the version 00165 checking code in mpp_sim.c, and a minor change to allow for 00166 creating the MPP simulation data file on a C-90. 00167 00168 Edition 226: 00169 1. Oops. Send store_mpp_word() the _address_ of the register you 00170 want to simulate storing, not the contents of it. Sheesh. 00171 00172 Edition 225: 00173 1. Large amounts of Makefile beautification, after Mark Cruciani 00174 had some targeting problems. 00175 00176 2. Add a -z switch to get.obj.arith, to return sources, and add 00177 a new target "install_source" to the Makefile, to install them 00178 where the -z logic is expecting to find them. This new target 00179 should be made after "update" is made. 00180 00181 3. Take out the -X1 for T3E builds temporarily. It's causing 00182 problems with the currently-available hardware. 00183 00184 Edition 224: 00185 1. IRIX/MIPS changes. Add fintrin_irix.f, fintrin_dc_irix.f, 00186 fintrin_irix_f77.f. Update Makefile to understand about IRIX, 00187 and build the three new modules. Update #ifdefs in confidence.c, 00188 miscmath.c, native.c, simulate.c, strcvt.c, and test_ar_intrin.c 00189 to do MIPS like we do Solaris. 00190 00191 2. Fix a problem in AR_make_complex (miscmath.c), where aliasing 00192 result and op2 led to wrong results. 00193 00194 3. Set up the simulated stack differently in mpp_sim.c. For the 00195 T3E, we had the simulated DSIB between the simulated frames of 00196 the caller and callee. The latter two need to abut, or arg 00197 addressing when simulating routines with more than 6 arguments 00198 won't work. 00199 00200 4. Replace a sequence of '|' expressions in ar_convert_str_to_float() 00201 with a sequence of '|=' assignments. The former is subject to 00202 expression reordering which, although it apparently hasn't yet 00203 occurred, would get the arguments to _defgu2sd() in the wrong 00204 order if it happened. 00205 00206 Edition 223: 00207 1. Fix for spr 100775. Insure that 64 bit addressing is used 00208 in Ar_put_real_address(). Previous cast to long it was 00209 getting only the low order 32 bits. 00210 00211 2. Changed get.obj.arith to provide release 2 arith versions for 00212 cft90 6.x or 6.X products. 00213 00214 Edition 222: 00215 1. Changed header processing for cld a.out again. Do move 00216 down over header after all segments are processed. Insure 00217 that segment ids can't be redefined by an undefined segment. 00218 00219 2. Perform right shifts using macro with unsigned longs so no 00220 sign extension takes place, even for Cray systems that sign 00221 extend right shifts. The SHRIGHT64X macro specifically does 00222 sign extension and will continue to sign extend. 00223 00224 3. Changed definitions of parcels to unsigned longs to insure 00225 that sign extension doesn't take place. 00226 00227 Edition 221: 00228 1. Changed definitions for cld a.out header. Defined dynamically 00229 rather that static assignements. 00230 2. Spr 100747: Mod by Greg Titus. 00231 arith.internal.h: Add ar_crnd128() declaration. 00232 cvt.c: Call ar_crnd128() for 128-bit Cray floating 00233 point round_int_div. 00234 convert.c: Add ar_crnd128() body. 00235 3. SPR 101290: Mod by Greg Titus. 00236 mpp_sim.c: Fix invalid type punning (IEEE complex to 00237 IEEE float) in ar_pass_arg_value(). We 00238 were passing a misaligned 32-bit IEEE 00239 float to ar_convert_to_float() when we 00240 were doing the real part of a 32-bit IEEE 00241 complex. 00242 00243 Edition 220: 00244 1. Changed Makefile to build Cray-t3d and Cray-t3e targets. 00245 00246 2. Changes for native versions of Cray-t3d and Cray-t3e that use 00247 Solaris simulation routines. 00248 00249 Edition 219: 00250 1. Changed mpp_sim.c to handle the segment identifier differences between 00251 the t3d and t3e. open_intrinsics_file now looks at the segment 00252 type field of the file header instead of the id, and 00253 load/store_mpp_word now looks at variables corresponding to the 00254 new segment identifiers. T3E data files built with mppldr should 00255 not be used. Those produced by cld will be handled (hopefully) by 00256 this mod. 00257 00258 2. Changed arith_mpp.s to add the 32-bit SCANI, VERIFYI, and INDEXI 00259 intrinsics to the list of those needing to have their fcd arguments 00260 converted to byte-lengths. 00261 00262 Edition 218: 00263 1. Triton-IEEE 0162 and 0163 divide instructions had the operands 00264 reversed for the divide calls. This fixes SPRs: 95451, 96747, 00265 95582, 97309, 99176, 99366. 00266 00267 Edition 217: 00268 1. MPP 0x18 instructions were being called illegal and arith was aborting. 00269 These are now disassembled and ignored. For 0x18c (RPCC), the rtc 00270 is moved into ra. 00271 00272 2. The mpp intrinsic simulations for index, scan, verify, and selected_ 00273 real_kind for 32-bit integers were not supported. The appropriate 00274 entry points are now in place however. 00275 00276 Edition 216: 00277 1. Fix for SPR 98417. The 01xx40 instructions (loads and stores to 00278 and from S-regs with 3-parcel address expressions) were incorrectly 00279 simulated. Only two parcels were ever being used. 00280 00281 Edition 215: 00282 00283 1. Changed get.obj.arith to use /bin/cp instead of whatever one's path 00284 pointed to, to prevent ownership problems, and now use chmod to 00285 force the correct permissions. 00286 00287 2. Added "bump" to the Makefile to allow moving the newest version 00288 to latest without creating a new newest. 00289 00290 3. Fixed SPR 96747. This was a problem with the 174[1,2,3] instructions 00291 on the c90 and triton causing the reshape intrinsic to fail for 128-bit 00292 data items. The loop variables and indices in the loops in ar_sim 00293 (cray1_sim.c) for these instructions were wrong. 00294 00295 Edition 214: 00296 00297 1. Fixed bug in ar_itoc128 in which the resulting exponent was 1 too big. 00298 (jhw) Altered this function to return the correct status. This fixes 00299 SPR 90659. 00300 00301 2. Fixed bugs in ar_sim simulation of 026/027 instructions that were 00302 causing unsimulated instruction errors and not using new A-reg operand 00303 instructions. 00304 00305 3. Removed rounding in conversion of Cray 128-bit to 64-bit floating point 00306 since all compilers internally just truncate (keep the first 64-bits). 00307 00308 4. Added tbb and svc to the change list, made the default uss results 00309 repository to be in cray/uss/a6/jhw, and changed the c90 and triton 00310 cc and libs setup to the correct directories in Makefile. 00311 00312 Edition 213: 00313 00314 1. Added check for compatible floating point format between the requested 00315 resulttype and that specified by the arith data file. Generate arith error 00316 message 2018 for a mismatch. 00317 00318 2. Added /opt/ctl/craylibs[_m]/craylibs[_m] as the first default location 00319 for the (native) arith data file. Added check for libm.a in the . 00320 directory as well as the .. directory relative to the arith data file. 00321 00322 3. Relaxed the requirement for libm.a existing--cross-compilations do not 00323 require it. However, if it does exist, it's version must match. 00324 00325 4. Added integer*8 versions of native power function evaluation. 00326 00327 5. Added test for IEEE attribute in get.obj.arith in determining the 00328 default target. 00329 00330 6. Added simulation for the remaining cray-ts[,ieee] instructions that 00331 may be encountered in future releases of libraries. 00332 00333 7. Modified arith_mpp.s to support T3D and T3E libraries and convert to 00334 the T3E argument/fcd interfaces if necessary. 00335 00336 8. Modified mpp_sim.c to interface to either T3D or T3E libraries. 00337 00338 Edition 212: 00339 00340 1. Added simulation of Triton instructions Vi Vj*[LU]Vk. 00341 00342 2. Fixed bug in simulation of Vi Vj,Vj<Ak instruction. Fixed bug in 00343 store_pvp_word to mask the segment number. 00344 00345 Edition 211: 00346 00347 1. Added full 128-bit IEEE arithmetic everywhere. 00348 00349 2. Removed rounding argument from ar_cfadd/sub64 routines--wasn't used. 00350 00351 3. Removed all internal arith declaration stuff from arith.h. In 00352 particular, removed the internal declarations for the AR_DATA union and 00353 moved them to an internal ar_data union in arith.internal.h. 00354 00355 4. Removed internal redundancy of rounding mode names. 00356 00357 5. Changed internal AR_FLOAT_NOT_COMPLEX to AR_FLOAT_SIMPLE. 00358 00359 6. Added ar_state_info struct and associated ar_state_register variable. 00360 Moved ar_CRAY_64_trunc_bits and ar_IEEE_denorm_behavior into this variable. 00361 00362 7. Added partial support for "multi-targetable" arith. Intrinsic folding 00363 is multi-targetable via the arith data file pointed to by CRAYLIBS. Basic 00364 arithmetic still depends upon input type arguments. 00365 00366 8. Added support for cray-ts and cray-ts,ieee in the Makefile and 00367 get.obj.arith. 00368 00369 Edition 210: 00370 00371 1. Fixed problem with 64-bit pointers being cleared to 24-bits in 00372 ar_clear_unused_bits. 00373 00374 2. Now allow uppercase, lowercase, and full names for new and latest 00375 version ids. 00376 00377 3. Switched to Craylibs 2.0 for arith testing. 00378 00379 4. Fixed problem in cray1_sim.c and mpp_sim.c that generated libm 00380 warning message on non-package versions of Craylibs. 00381 00382 Edition 209: 00383 00384 1. Modified Makefile support for updating arith data files to be able 00385 to create and update using the newest (possibly non-packaged) versions 00386 of Craylibs. Also, modified *.o targets to be arith.a(*.o) to minimize 00387 the amount of recompilation after a make clobber. The edition target 00388 copies an initial arith.a from the corresponding system directory. 00389 00390 2. Changed severity level of 2016 arith message to Logfile_Warning. 00391 00392 3. Added check for non-package version of arith data file (?.x.?.? in 00393 AR_libmv2) which skips libm[v2].a validation step when data file 00394 is opened. 00395 00396 4. Made modifications to accept 128-bit IEEE floating and 64-bit integer 00397 AR_TYPEs for Solaris. Internally 128-bit IEEE floating values are converted 00398 to/from 64-bit values for the time being. Also, the integer-to-integer 00399 power function uses the 32-bit intrinsic for the time being. 00400 00401 5. 64-bit pointers no longer have the upper 8 bits cleared by 00402 ar_clear_unused_bits. 00403 00404 6. Allow 46-bit integer type in MPP simulation (since this is also used 00405 for Triton currently). Eliminates AR_STAT_INVALID_TYPE for powri. 00406 00407 7. Added cray-ts as an allowable target in get.obj.arith. 00408 00409 8. Changed c++ product in get.obj.arith to return the same arith.a as scc 00410 for ccg and mppcg code generators but continue to return an arith.a with 00411 no intrinsic folding for rcg. Also force new version for mppcg. 00412 00413 9. Removed extern of ARSQRTA from confidence.c and ctgen.c since Cray-2 00414 is no longer supported. Added trapmathlibabort() to confidence.c. 00415 00416 10. Fix MPP simulation of defgu2sd returning 32-bit IEEE floats by moving 00417 the upper 32-bits returned by defgu2sd into the lower 32-bits. Also, set 00418 the dynamic rounding mode variables to round-to-nearest defaults. 00419 00420 Edition 208: 00421 00422 1. Fixed bug in PVP simulation of Ai [PQZ]Sj instruction to test for j==0. 00423 00424 2. Changed DCMPLX in test_native.f, sim_c1_gen.f, and sim_mpp_sim.f to 00425 CMPLX since DCMPLX is no longer recognized. 00426 00427 Edition 207: 00428 00429 1. Allow more slop in stores also (see edition 205 notes). Fixes problem 00430 in which a simulated ORE load is stored back to the same location with 00431 the same value. 00432 00433 2. Added this "allowable ORE" logic to mpp_sim.c but only up to 8 words. 00434 00435 Edition 206: 00436 00437 1. Added a bunch of new PVP instructions to be simulated. Now the only 00438 PVP (YMP) instructions not simulated are ERR, EXIT, half-precision 00439 floating multiply, monitor instructions, and any instruction 00440 referencing shared registers. 00441 00442 Edition 205: 00443 00444 1. Add more slop for vector loads in simulated search functions such as 00445 in memchr. Return bad data (0xf0f0...f0) for up to 64 words beyond 00446 known data length rather than trying to read the data and possibly 00447 getting an ORE. Force internal error if any simulated store goes 00448 beyond known data length. 00449 00450 Edition 204: 00451 00452 1. Define EDITION string on cc command line now. 00453 00454 2. Added declarations for arith_vers_name, arith_vers_ID, and 00455 arith_vers_number in arith.h. 00456 00457 3. Changed back argument in calls to _F90_{INDEX,SCAN,VERIFY} to be 00458 a pointer rather than a value due to a library change. 00459 00460 4. Changed makefile to permit the PVP arith data file to be built on a 00461 C90 (but still in Y-mode and using YMP libraries though). Also build 00462 the MPP arith data file on a C90. 00463 00464 Edition 203: 00465 00466 1. Bugfixes in get.obj.arith. 00467 00468 2. Added AR_cabs to no_intrin.c (to resolve external reference in 00469 miscmath.c)--returns AR_STAT_UNDEFINED. Added ar_divide_complex 00470 to no_intrin.c (to resolve external reference in math.c)--computes 00471 "standard" algorithm. 00472 00473 3. Added 3 "" arguments to 2016 warning message call to PRINTMSG to 00474 support cft77's (Pascal) version of PRINTMSG. 00475 00476 4. Fixed bug to return AR_STAT_UNDERFLOW in ar_cvt_str_to_float. 00477 00478 5. Added what-line to arith_c1.s and arith_mpp.s so that a 'what -s arith' 00479 will display the libm version of the arith data file. Also, cray1_sim.c 00480 and mpp_sim.c search for the what-line string and use it, if found, to 00481 obtain the libm version number. The what-line does not contain the 00482 arith.a version number so tests using this (to generate internal error 00483 messages) were changed. 00484 00485 Edition 202: 00486 00487 1. Removed 'cray-2' from the list of MACHINES in Makefile. Miscellaneous 00488 other improvements such as email to-list. 00489 00490 2. Fixed bug in get.obj.arith when -v la needed to back up to the previous 00491 release, the latest edition in that release wasn't being gotten. 00492 00493 3. Fixed bug in AR_power in native.c for 32-bit IEEE complex--ARPOWCR was 00494 being called even when the power was complex type. 00495 00496 Edition 201: 00497 00498 1. Removed cvs log entries in all files except edition.c. 00499 00500 2. Added test in 'make update' to NOT update get.obj.arith or result test 00501 case files for release branch updates. Added associated note to README. 00502 00503 3. Fixed bugs in get.obj.arith associated with getting development 00504 editions. Version string now contains the release number but only 00505 if the release number is greater than 1. 00506 00507 4. Deleted support for cray-2 and cray-x4 everywhere. 00508 00509 5. Deleted calls to native PVP library/intrinsic functions. All such 00510 functions are now simulated. Note that this implicitly eliminates 00511 support for the cmcs code generator products. 00512 00513 6. Removed save/clear/restore of ar_CRAY_64_trunc_bits from intrin.c and 00514 mpp_sim.c. Save/clear/restore of ar_CRAY_64_trunc_bits is applied to 00515 all PVP library/intrinsic function simulation (in cray1_sim.c). 00516 00517 7. Removed AR_IEEE_denorm_behavior routine. Denorm behavior is now 00518 specified inside corresponding intrinsic evaluation modules (e.g., 00519 mpp_sim.c). Added AR_Denorm_Operands_Trap flag and set it for MPP 00520 arithmetic evaluation (in mpp_sim.c). 00521 00522 Moved all denorm declarations from arith.h to arith.internal.h to 00523 make it invisible to the outside world. 00524 00525 8. Defined AR_STAT_SEMIVALID error status bit. Updated arith.doc to 00526 describe the situations under which this bit is set. 00527 00528 9. Restructured the intrinsic folding routines. Now either intrin.c 00529 or no_intrin.c must be used with the latter causing load-time missing 00530 external messages if intrinsic evaluation routines are called. Some 00531 intrinsic evaluation routines, such as those for string conversions, 00532 may exist in no_intrin.c. In any case, these source files contain the 00533 high-level interface routines to intrinsic folding (AR_name routines). 00534 00535 The high-level interface routines in turn call lower-level routines, 00536 named ar_name, in either native.c or simulate.c. Those in native.c 00537 ultimately call native (non-Cray system) library routines. Those in 00538 simulate.c ultimately cause a simulation of Cray system (PVP or MPP) 00539 library routines. 00540 00541 The lower level ar_name routines in simulate.c now do generic argument 00542 set up via calls to support routines located in specific platform 00543 modules (cray1_sim.c or mpp_sim.c). After arguments have been set up, 00544 routine ar_sim is called to simulate just the evaluation of the 00545 specific library function for the specific platform. Finally, routine 00546 ar_get_function_value is called to get the function value from the 00547 appropriate register. 00548 00549 10. Fixed AR_convert_str_to_int to call ar_set_invalid_result for overflows 00550 rather than clearing the unused bits. In some cases, AR_STAT_ZERO 00551 was being set in addition to AR_STAT_OVERFLOW. 00552 00553 11. Fixed bug in AR_convert which set AR_STAT_UNDERFLOW for the conversion 00554 of 0.0 from 64 to 32-bit IEEE float. 00555 00556 12. Fixed bug in AR_i32/64norm which was not setting AR_STAT_UNDERFLOW when 00557 the operand bits were not zero, but the normalization process caused 00558 all coefficient bits to become zero. Also removed unnecessary test 00559 for expo < 0 when preceding logic guaranteed it was always >= 0. 00560 00561 13. Changed Makefile naming of arith cpio file in tlc_rel to use the last 00562 two fields in the libm.a what -s version number. 00563 00564 14. Changed names of internal non-static routines to always begin with 'ar_' 00565 from 'AR_'. All user-callable routines should now consistently begin 00566 with 'AR_'. 00567 00568 15. Added a description to arith.doc for AR_one and AR_round_int_div. 00569 00570 16. Added version number proposal entry points into edition.c. 00571 00572 17. Fixed long standing bug in convert.c (ar_ifix64/32) in which zero was 00573 being incorrectly returned when the shift count was greater than the 00574 number of coefficient bits and the rounding mode was not AR_ROUND_ZERO. 00575 It is possible for the rounding to produce a value of 1 after all 00576 coefficient bits have been shifted off. 00577 00578 18. Fixed bug in mpp_sim.c in which the CMPULE/T instructions were not 00579 being evaluated correctly. 00580 00581 19. In simulate.c corrected the value stored into lcap1 for the call to 00582 defgu2sd to be a character address versus a word address. This requires 00583 ar_pass_ext_address to pass back a word-to-character shift count if the 00584 external address descriptor is requested. 00585 00586 20. Added AR_index, AR_scan, AR_verify, AR_reshape, and AR_transfer as well 00587 as new logical type AR_Logical and associated constants AR_const_true 00588 and AR_const_false in arith.h. 00589 00590 21. Modified F90 routine ARSELRK to use PRESENT(P/R) and call the library 00591 routine with the correct argument/s. 00592 00593 Edition 54: 00594 00595 1. Changes in Makefile, get.obj.arith, and README to support the creation 00596 and use of release branches. This includes new Makefile targets 00597 edition, update, revision, and new_release. Also get.obj.arith now 00598 uses the -R option to translate a product version to an arith release 00599 number (default is still the development version except for cft77 which 00600 is forced to release 1). 00601 00602 2. Added 'cam' to the list of supported products in get.obj.arith. 00603 00604 3. Added logic to IEEE floating point arithmetic routines to return 00605 AR_STAT_UNDEFINED for denormalized operands and the denorm behavior 00606 flag is not AR_Denorms_Keep (i.e., an assumed MPP compiler). This 00607 logic needs to exist in release 1 of arith to support updates to the 00608 "frozen" cft77_m compilers (and in particular fix SPR 79459). This 00609 logic will be changed in release 2 of arith to more explicitly trap 00610 on denorm operands based on new values for the denorm behavior flag. 00611 00612 Edition 53: 00613 00614 1. Support for the Fortran 90 modulo and selected_real_kind now exists for 00615 PVP, MPP, and Solaris compilers along with associated confidence tests. 00616 AR_Modulo is the name of the arith routine that supports the Fortran 90 00617 modulo intrinsic. This distinguishes it from AR_modulo which was the 00618 Fortran 77 mod intrinsic which could return different results. 00619 00620 2. Added AR_mod to be the Fortran 77 mod intrinsic and deprecated AR_modulo 00621 to (hopefully) eliminate maintenance questions and user confusion. 00622 AR_mod is identical to the old AR_modulo for now. 00623 00624 3. Made changes to Makefile to build arith data files using modulo and 00625 selected_real_kind from libfi.a. 00626 00627 Edition 52: 00628 00629 1. Added support for floating modulus and selected_real_kind for cf90_m 00630 only. This is a temporary edition to support MPP compilers only. 00631 00632 Edition 51: 00633 00634 1. Fixed LDS and STS MPP instruction simulation to NOT return 00635 AR_STAT_UNDEFINED (AR_convert returns this when converting a 64-bit NaN 00636 to 32-bit but this exception cannot occur on MPP hardware when simply 00637 loading/storing a NaN value). 00638 00639 2. Added characters to the internal ar_eval_lib_edition variable so that 00640 it can be printed by the what command. 00641 00642 Edition 50: 00643 00644 1. Changed AR_[ic]fcmp* routines to be statically declared inside compare.c 00645 and removed their interface description from arith.internal.h. 00646 00647 2. Changed the IEEE compare algorithms to not use subtract since they must 00648 be exact and not overflow or underflow. 00649 00650 3. Changed mpp_sim.c to use AR_compare for the CMPTxx instructions. 00651 00652 4. Upgraded sim_mpp_gen.f to compile and run with latest cft90 and 00653 generate correct data for/from the HLOG, HEXP, and HSQRT routines. 00654 Also added more test cases for string to float conversions. 00655 00656 5. Changed version numbering to drop the leading zero (version 50 will be 00657 stored as 50, not 050). 00658 00659 6. Changed packaging of arith data files. The default location is now 00660 the same directory as libm[v2].a on PVP systems and NO default on nonPVP 00661 systems. The CRAYLIBS environment variable is now used for both PVP 00662 and MPP simulation. Created a lib subdirectory below arith and 00663 $(USS)/arith containing platform subdirectories with the associated 00664 data file in each of these. Removed the .a files from the cpio files. 00665 Added arith_c1.mh and arith_mpp.mh to the corresponding cpio files. 00666 00667 Edition 49: 00668 00669 1. Force ar_IEEE_denorm_behavior default to be consistent with intrinsic 00670 simulation platform (Keep on sparc, +0.0 on MPP, illegal on C1). Removed 00671 default declaration from miscmath.c. Replaced logic inside 00672 AR_IEEE_denorm_behavior to simply validate the input value and return 00673 a nonzero value if not equal to the default. 00674 00675 2. Fixed constant value for 'A' in arith_mpp.s. 00676 00677 3. Fixed subscripting bugs in cray1_sim.c and mpp_sim.c where libm[v2] 00678 version is consistency checked against that in arith_c1/mpp. 00679 00680 4. Added support for 64-bit pointers in arith.h, cvt.c, math.c and 00681 miscmath.c. These are required for Triton. 00682 00683 5. Made all calls to PRINTMSG have 8 arguments to support cft77 message 00684 routine. 00685 00686 6. Fixed end-case in mpp_sim.c because the CMPTxx instructions are exact 00687 and do not over/underflow. 00688 00689 7. Fixed spelling in arith.mk. 00690 00691 Edition 48: 00692 00693 1. Fixed bug in ar_power (in mpp_sim.c) in which switch statement was 00694 based on basetype rather than resulttype. 00695 00696 2. Modified get.obj.arith to return latest validated version for each 00697 platform rather than the global validated version. Created 'latest' 00698 file in platform subdirectories in arith directory. 00699 00700 Edition 47: 00701 00702 1. Fixed floating input conversion bug in which an all zero mantissa 00703 produced an AR_STAT_UNDEFINED. 00704 00705 Edition 46: 00706 00707 1. Fixed floating input conversion bug in which a zero exponent still 00708 produces an AR_STAT_UNDEFINED if exponent is signed (e.g. 1.0e+0). 00709 00710 Edition 45: 00711 00712 1. Added simulation interface identifiers in case later changes are 00713 necessary. 00714 00715 2. Converted register numbers to mnemonic names in mpp_sim.c 00716 00717 3. Fixed floating input conversion bug in which a zero exponent (e.g. 1.0e0) 00718 produced an AR_STAT_UNDEFINED because leading zeroes are skipped. 00719 00720 4. Make sure that the libm[v2].a returned by get.obj.arith RW by owner. 00721 00722 5. Add AR_NOINTRIN_ERROR routine to ctgen.c to resolve fintrin.o external. 00723 00724 Edition 44: 00725 00726 1. get.obj.arith removes cray[12].o from arith.a when non-native intrinsic 00727 evaluation is used (eliminates trapmathlibabort missing external 00728 message). Removes misc_sim.o for native intrinsic evaluation. 00729 Tests for version >= 43 when deleting dummy_dc.o (vs dc_dummy.o). 00730 00731 2. Added simulation support for MPP LDS, STS, and S8ADDQ instructions. 00732 00733 3. Began using actual 32-bit algorithms for HEXP, HLOG, and HSQRT. 00734 00735 4. Updated README file to eliminate the USM mod creation. 00736 00737 5. Made complex division a pseudo-intrinsic such that native version (in 00738 intrin.c) calls a locally compiled Fortran routine which yields whatever 00739 the native algorithm might be (except for sparc which uses the previous 00740 algorithm). The simulation version (in misc_sim.c) currently uses the 00741 previous algorithm (originally in math.c). This may need to be replaced 00742 in the future with a simulation of what F90 does for the targeted system. 00743 Fixes SPRs 78056 and 78123. 00744 00745 6. Added complex division confidence tests (in itgen.c and confidence.c, 00746 added itgen.c support file itgenf.f). 00747 00748 7. Added 'ar_' prefix to the shift_{left,right} functions in misc_sim.c. 00749 00750 Edition 43: 00751 00752 1. All known bugs are fixed (except complex divides for Solaris cft90). 00753 00754 2. Added support for -v ne and -v va to get.obj.arith. (Also -v xn is 00755 used in Makefile to build confidence test executables.) 00756 00757 3. Split intrinsic evaluation into 4 basic modes with no cross-over 00758 permitted. The modes are: 00759 00760 a) No intrinsic function evaluation available (no_intrin.o) 00761 b) Use native intrinsic library routines (intrin.o) 00762 c) Simulate PVP intrinsic library routines (cray1_sim.o) 00763 d) Simulate MPP intrinsic library routines (mpp_sim.o) 00764 00765 Get.obj.arith uses the code generator, language, and target options 00766 to construct an arith.a capable of folding in exactly one of these 00767 modes. The names in parentheses are the modules in the constructed 00768 arith.a corresponding to these modes. 00769 00770 Modes a, c, and d should not require libm.a (libmv2.a) to be loaded 00771 into the compiler (at least for folding). 00772 00773 4. Allow 32 and 64-bit non-complex floats to be passed as operands 00774 to AR_leadz, AR_popcnt, and AR_poppar. The operand type is no 00775 longer required to match the result type. Also, updated messages 00776 with changes suggested by Pubs. 00777 00778 5. Increased output precision for float_to_string. 00779 00780 6. Add support for base 2 string_to_int conversions 00781 00782 7. Cleared part1 and part2 for 32-bit integer results in bits.c and 00783 math.c (ar_add_integer, ar_subtract_integer, bitoper, ar_dblshift, 00784 AR_leadz, AR_popcnt, AR_poppar). 00785 00786 8. Added 'c++' to the list of supported languages in get.obj.arith. 00787 Currently, the arith.a constructed for c++ does not support any 00788 math library intrinsic function evaluation (mode 3a above). 00789 00790 9. Add minimal support for 16-bit ints. Functions supported are 00791 AR_convert, AR_status, and all functions which permit operands 00792 or results of any size integer value. 00793 00794 10. Also, fixed AR_convert_str_to_int which claimed to work for any 00795 integer type, but really didn't. Part of the problem with 00796 this function (the value of the ar_bits_used argument) was 00797 "fixed" by a change in documentation. 00798 00799 11. Eliminated simulation of strtod/strtold in favor of the lower level 00800 routine defgu2sd. An interface routine, ar_unpack_float_str is 00801 called to unpack a string into simulated Cray words prior to 00802 simulating defgu2sd. 00803 00804 12. Made a small optimization by using hardware shift instructions if 00805 running on a Cray (in shift_left/right). 00806 00807 13. Added a cpio target in Makefile. This creates the different cpio 00808 files necessary for packaging arith with Craylibs and copies them 00809 out to the TLC_REL directory on USS. Added file arith.mk to be 00810 included in the cpio files. 00811 00812 14. Added the following simulation error messages (see arith.msg for 00813 details): 00814 00815 2014 - simulated intrinsic interface error 00816 2015 - unsupported new intrinsic function 00817 2016 - potentially different intrinsic function values (warning only) 00818 2017 - intrinsic routine not loaded 00819 00820 These are intended to support version consistency checks when arith 00821 is built into compilers in the field. 00822 00823 15. Changed a bunch of file and routine names from *_ieee* to *_mpp* 00824 since it appears likely that future IEEE Cray architectures may not 00825 exactly produce the same results as the MPP. If they happen to 00826 always produce identical results, then internal links to MPP versions 00827 can be used. 00828 00829 16. Moved conv routines into the results directory. The conv 00830 subdirectory is no longer needed. 00831 00832 17. Removed dc_dummy.c. Added dummy_dc.f in order to more easily 00833 maintain the Fortran naming conventions on multiple platforms. 00834 00835 18. Added HSQRT, HLOG, and HEXP to arith_mpp.s. These are still just 00836 interfaces to the 64-bit algorithms. However, the next edition of 00837 arith should automatically start using the actual 32-bit algorithms 00838 when they are put in the next Craylibs_m package. 00839 00840 19. Added external char variables AR_libmv2 and AR_arith_data. These 00841 contain a null string if simulation is not used. Otherwise, 00842 AR_libmv2 contains the libmv2.a version information, including the 00843 edition number (e.g., 81002). AR_arith_data contains the arith.a 00844 edition number of the arith_c1/mpp file (i.e., the arith.a edition 00845 number when the data file was built). 00846 00847 Edition 42: 00848 00849 1. Added PVP and MPP intrinsic simulation for libm and floating input 00850 conversion routines. 00851 00852 2. Modified get.obj.arith to turn on simulation for ccg and mppcg code 00853 generators but disable it for rcg and cmcs. 00854 00855 3. Extensive modifications were made to the makefile for consistent 00856 packaging, easier testing, and to provide debug versions of arith. 00857 Added make targets to generate the intrinsic simulation data files 00858 and to generate the test data for the simulation confidence tests. 00859 00860 4. Updated the README, arith.msg, and arith.doc files. 00861 00862 5. Modified existing confidence tests to work with/without simulation 00863 enabled. Added simulation confidence tests. 00864 */ 00865 00866 00867 static char USMID [] = "\n%Z%%M% %I% %G% %U%\n"; 00868 static char rcsid [] = "$Id: edition.c,v 1.4 2003-12-11 22:19:18 eraxxon Exp $"; 00869 /* $Log: not supported by cvs2svn $ */ 00870 /* Revision 1.3 2003/02/20 01:53:11 fzhao */ 00871 /* *** empty log message *** */ 00872 /* 00873 * Revision 1.2 2002/07/18 17:31:13 fzhao 00874 * nothing important,remove nested common symbol. 00875 * 00876 * Revision 1.1.1.1 2002/05/22 20:06:18 dsystem 00877 * Initial import 00878 * 00879 * Revision 2.46 1997/07/22 23:31:22 gbt 00880 * MIPS NaNs are the opposite of SPARC/T90-IEEE/Alpha NaNs: the 00881 * latter has the high bit of the mantissa clear for signalling 00882 * NaNs, and set for quiet ones; the former is the other way 00883 * around. 00884 * 00885 * Revision 2.45 1997/06/17 17:46:19 gbt 00886 * - Add status setting for AR_STAT_INEXACT in IEEE normalization. 00887 * - Makefile cleanup -- don't execute "target" if not on a Cray 00888 * machine, and in the "arith.a:" target, copy the arith.h file 00889 * into a "common" subdirectory. I had moved the common files 00890 * into a "common" subdir in the USS directory in edition 234, 00891 * and modified the get.obj.arith script accordingly, but I 00892 * needed to do the same thing in the build directory structure, 00893 * so that doing a "get.obj.arith -v xn ..." would work. 00894 * - Remove the use of /cray/uss/compiler/cost/bin/validate from 00895 * the get.obj.arith script. 00896 * 00897 * Revision 2.44 1997/06/02 19:14:16 gbt 00898 * Add AR_ibits(), and the corresponding internal tests. 00899 * 00900 * Revision 2.43 1997/05/01 15:25:18 gbt 00901 * Remove the use of <ctype.h> in strcvt.c. This allows us 00902 * to compile arith with 9.x #include files, and link it 00903 * with 8.x libraries, and have everything work right. It 00904 * doesn't hurt wide-character compatibility, because there 00905 * is quite a bit of code in strcvt.c that is incompatible 00906 * with wide characters already. 00907 * 00908 * Revision 2.42 1997/04/25 02:56:02 gbt 00909 * 1. Missed some modules that needed additions for 8-bit and 00910 * 16-bit integers. 00911 * 2. Add full support for determining the host architecture. 00912 * 3. Fix some minor divots in float-->string conversions. 00913 * 4. Add AR_ishft() and AR_ishftc(), for the corresponding f90 00914 * intrinsics, and add code to testint.c to test these. 00915 * 00916 * Revision 2.41 1997/04/02 00:04:31 gbt 00917 * Add support for 8-bit and 16-bit integers. Update testing programs 00918 * appropriately. 00919 * 00920 * Revision 2.40 1997/03/17 21:19:11 gbt 00921 * 1. Bring in the MIPS quad changes from Rich Shapiro. 00922 * 2. Fix 703309 -- non-base-10 int-to-str conversions yielded 00923 * trash. 00924 * 3. Add appropriate casts to cray1_sim.c and mpp_sim.c, to 00925 * remove some warnings about mistyped assignments. 00926 * 00927 * Revision 2.39 1996/12/12 20:31:44 gbt 00928 * Undo the change that made negating IEEE 0.0 not yield -0.0 any more. The 00929 * standard says that negating 0.0 is *supposed* to yield -0.0. We hadn't 00930 * read the IEEE standard completely. 00931 * 00932 * Revision 2.38 1996/11/05 18:33:00 gbt 00933 * Remove the MIPS hack in native.c for the INDEX(), SCAN(), and VERIFY() 00934 * intrinsics. 00935 * 00936 * Revision 2.37 1996/10/30 21:01:21 gbt 00937 * Add a -n option to remote-builds.csh, to tell it not to do a 00938 * "make delete" before proceeding with the builds. Also, update 00939 * edition.c -- I had forgotten to do so on the last few changes. 00940 * 00941 * Revision 2.36 1996/10/29 21:53:39 gbt 00942 * - Clean up the code in various spots so that the Solaris and IRIX 00943 * compilers don't emit any warnings any more. 00944 * - Really support the IRIX platform. 00945 * - Allow re-updating of the current USS edition. 00946 * - Move the USS arith.{doc,h,msg}.* files into a "common" subdirectory 00947 * (aesthetics -- makes the directory easier to look at). 00948 * - Make sure all the files installed on USS have group-write access. 00949 * - Clean up get.obj.arith -- the indentation had gotten a little 00950 * odd over the years. 00951 * 00952 * Revision 2.35 1996/10/28 23:10:04 gbt 00953 * Expand the simulated stack size for Cray-1 style simulation, from 2 kwords 00954 * to 10 kwords. It wasn't big enough for the needs of all the intrinsics in 00955 * the 3.0 arith data file. 00956 * 00957 * Revision 2.34 1996/10/11 22:20:34 gbt 00958 * Make _numargs() work properly on T3E. The SSIB and DSIB weren't properly 00959 * set up before beginning simulation, nor was the CI register correct on 00960 * entry to the simulated intrinsic code. 00961 * 00962 * Revision 2.33 1996/10/03 19:24:26 gbt 00963 * Fix some preprocessing problems having to do with the _Solaris #if tests. 00964 * 00965 * Revision 2.32 1996/09/23 21:21:46 gbt 00966 * - Simulate byte-manipulation instructions properly for a T3E. 00967 * - Remove pdbgint support for MPP -- it couldn't have been made to 00968 * work anyway. 00969 * - Add environment variable control of ar_disasm debugging for MPP. 00970 * 00971 * Revision 2.31 1996/09/10 21:46:11 gbt 00972 * Allow for building on a TS (only building _on_ one, not _for_ one). 00973 * 00974 * Revision 2.30 1996/08/30 19:39:50 gbt 00975 * - Modifications to the self-tests to allow for correct results on 00976 * TS-IEEE (they've never been right before this). 00977 * - Continuing Makefile cleanup. 00978 * - MIPS real*16 support from Rich Shapiro. 00979 * - Added support for printing integers from MPP library code during 00980 * simulation. 00981 * 00982 * Revision 2.29 1996/08/20 20:07:35 gbt 00983 * Go back to using the UNICOS 8.3 #include files for C-90 and Y-MP. There's 00984 * no apparent way to safely use the 9.x ones, and still allow people to link 00985 * an arith.a thus compiled with 8.x libraries. 00986 * 00987 * Revision 2.28 1996/08/15 23:09:12 gbt 00988 * More closely follow the IEEE rules regarding NaNs as operands and results. 00989 * Also, do a little fixup in the Makefile. The YMP tests all pass now. 00990 * 00991 * Revision 2.27 1996/07/03 23:14:26 gbt 00992 * For version comparison between the arith data file and the 00993 * libm.a when simulating, do a better job of figuring out the 00994 * libm.a version. Also did some prettification of the version 00995 * checking code in mpp_sim.c, and a minor change to allow for 00996 * creating the MPP simulation data file on a C-90. 00997 * 00998 * Revision 2.26 1996/06/19 23:32:16 gbt 00999 * Oops. Send store_mpp_word() the _address_ of the register you 01000 * want to simulate storing, not the contents of it. Sheesh. 01001 * 01002 * Revision 2.25 1996/06/12 18:20:16 gbt 01003 * Large amounts of Makefile beautification, after Mark Cruciani 01004 * had some targeting problems. 01005 * Add a -z switch to get.obj.arith, to return sources, and add 01006 * a new target "install_source" to the Makefile, to install them 01007 * where the -z logic is expecting to find them. This new target 01008 * should be made after "update" is made. 01009 * Take out the -X1 for T3E builds temporarily. It's causing 01010 * problems with the currently-available hardware. 01011 * 01012 * Revision 2.24 1996/05/31 21:09:51 gbt 01013 * 1. IRIX/MIPS changes. Add fintrin_irix.f, fintrin_dc_irix.f, 01014 * fintrin_irix_f77.f. Update Makefile to understand about IRIX, 01015 * and build the three new modules. Update #ifdefs in confidence.c, 01016 * miscmath.c, native.c, simulate.c, strcvt.c, and test_ar_intrin.c 01017 * to do MIPS like we do Solaris. 01018 * 01019 * 2. Fix a problem in AR_make_complex (miscmath.c), where aliasing 01020 * result and op2 led to wrong results. 01021 * 01022 * 3. Set up the simulated stack differently in mpp_sim.c. For the 01023 * T3E, we had the simulated DSIB between the simulated frames of 01024 * the caller and callee. The latter two need to abut, or arg 01025 * addressing when simulating routines with more than 6 arguments 01026 * won't work. 01027 * 01028 * 4. Replace a sequence of '|' expressions in ar_convert_str_to_float() 01029 * with a sequence of '|=' assignments. The former is subject to 01030 * expression reordering which, although it apparently hasn't yet 01031 * occurred, would get the arguments to _defgu2sd() in the wrong 01032 * order if it happened. 01033 * 01034 * Revision 2.23 1996/05/10 22:02:22 ghg 01035 * Edition 223: 01036 * 1. Fix for spr 100775. Insure that 64 bit addressing is used 01037 * in Ar_put_real_address(). Previous cast to long it was 01038 * getting only the low order 32 bits. 01039 * 01040 * 2. Changed get.obj.arith to provide release 2 arith versions for 01041 * cft90 6.x or 6.X products. 01042 * 01043 * Revision 2.22 1996/05/01 22:00:10 ghg 01044 * 1. Changed header processing for cld a.out again. Do move 01045 * down over header after all segments are processed. Insure 01046 * that segment ids can't be redefined by an undefined segment. 01047 * 01048 * 2. Perform right shifts using macro with unsigned longs so no 01049 * sign extension takes place, even for Cray systems that sign 01050 * extend right shifts. The SHRIGHT64X macro specifically does 01051 * sign extension and will continue to sign extend. 01052 * 01053 * 3. Changed definitions of parcels to unsigned longs to insure 01054 * that sign extension doesn't take place. 01055 * 01056 * Revision 2.21 1996/04/23 23:42:44 ghg 01057 * '********************************************************' 01058 * Please send following email... 01059 * To: krz, bcn, mwm, knaak, homer, rlf, srp, pmk, bhj, kik, tbb, jk, gbt, lew, svc, ghg, mac 01060 * 01061 * Subject: New edition `cat release`.`cat edition` of arith 01062 * 01063 * Edition `cat release`.`cat edition` of arith is now available in $(USSARITH)/R`cat release`. 01064 * It can be accessed with get.obj.arith as follows: 01065 * 01066 * " get.obj.arith -v ne ..." 01067 * 01068 * It contains the following enhancements: 01069 * Edition 221: 01070 * 1. Changed segment definitions for cld a.out header. Defined dynamically 01071 * rather than static assignements. 01072 * 2. Spr 100747: Mod by Greg Titus. 01073 * arith.internal.h: Add ar_crnd128() declaration. 01074 * cvt.c: Call ar_crnd128() for 128-bit Cray floating 01075 * point round_int_div. 01076 * convert.c: Add ar_crnd128() body. 01077 * 3. SPR 101290: Mod by Greg Titus. 01078 * mpp_sim.c: Fix invalid type punning (IEEE complex to 01079 * IEEE float) in ar_pass_arg_value(). We 01080 * were passing a misaligned 32-bit IEEE 01081 * float to ar_convert_to_float() when we 01082 * were doing the real part of a 32-bit IEEE 01083 * complex. 01084 * 01085 * Revision 2.20 1996/04/17 18:22:50 ghg 01086 * Edition 220: 01087 * 1. Changed Makefile to build Cray-t3d and Cray-t3e targets. 01088 * 01089 * 2. Changes for native versions of Cray-t3d and Cray-t3e that use 01090 * Solaris simulation routines. 01091 * 01092 * Revision 2.19 1996/02/07 23:39:49 jhw 01093 * Edition 219: 01094 * 1. Changed mpp_sim.c to handle the segment identifier differences between 01095 * the t3d and t3e. open_intrinsics_file now looks at the segment 01096 * type field of the file header instead of the id, and 01097 * load/store_mpp_word now looks at variables corresponding to the 01098 * new segment identifiers. T3E data files built with mppldr should 01099 * not be used. Those produced by cld will be handled (hopefully) by 01100 * this mod. 01101 * 01102 * 2. Changed arith_mpp.s to add the 32-bit SCANI, VERIFYI, and INDEXI 01103 * intrinsics to the list of those needing to have their fcd arguments 01104 * converted to byte-lengths. 01105 * 01106 * Revision 2.18 1996/01/03 22:15:46 jhw 01107 * Edition 218: 01108 * 1. Triton-IEEE 0162 and 0163 divide instructions had the operands 01109 * reversed for the divide calls. This fixes SPRs: 95451, 96747, 01110 * 95582, 97309, 99176, 99366. 01111 * 01112 * Revision 2.17 1995/12/19 16:51:03 jhw 01113 * 12/19/95 jhw: 01114 * 1. MPP 0x18 instructions were being called illegal and arith was aborting. 01115 * These are now disassembled and ignored. For 0x18c (RPCC), the rtc 01116 * is moved into ra. This was in mpp_sim.c. 01117 * 01118 * 2. The mpp intrinsic simulations for index, scan, verify, and selected_ 01119 * real_kind for 32-bit integers were not supported. The appropriate 01120 * entry points are now in place however. This was in arith_mpp.s 01121 * and simulate.c 01122 * 01123 * Revision 2.16 1995/12/11 15:56:51 jhw 01124 * 12/11/95 jhw: This change fixes incorrect simulation of the 01xx4 (S-reg 01125 * load/store) instructions. Only two-parcels of the 3-parcel address 01126 * expressions were being used. This fixes SPR 98417. 01127 * 01128 * Revision 2.15 1995/11/30 21:34:37 jhw 01129 * 11/30/95 jhw: Changed cray1_sim.c so that the 174[1,2,3] instructions were 01130 * being simulated correctly. This fixes reshape sprs: 96747, 95628, 95627, 01131 * 97309, and 97842. Also modified get.obj.arith to manually set permissions 01132 * when copying arith.a. Makefile was modified to reference newer libraries 01133 * for building arith data files, and I added the capability of bumping a new 01134 * version to latest. 01135 * 01136 * Revision 2.14 1995/11/13 20:25:46 jhw 01137 * Edition 214: 01138 * 01139 * 1. Fixed bug in ar_itoc128 in which the resulting exponent was 1 too big. 01140 * (jhw) Altered this function to return the correct status. This fixes 01141 * SPR 90659. 01142 * 01143 * 2. Fixed bugs in ar_sim simulation of 026/027 instructions that were 01144 * causing unsimulated instruction errors and not using new A-reg operand 01145 * instructions. 01146 * 01147 * 3. Removed rounding in conversion of Cray 128-bit to 64-bit floating point 01148 * since all compilers internally just truncate (keep the first 64-bits). 01149 * 01150 * 4. Added tbb and svc to the change list, made the default uss results 01151 * repository to be in cray/uss/a6/jhw, and changed the c90 and triton 01152 * cc and libs setup to the correct directories in Makefile. 01153 * 01154 * Revision 2.13 1995/09/26 20:40:19 jk 01155 * Added check for compatible floating point format between result type and 01156 * opened arith data file. Made /opt/ctl/craylibs[_m]/craylibs[_m] first 01157 * default location for arith. Removed libm.a existance requirement for 01158 * all cross compilations. Added integer*8 versions of native power 01159 * functions. Added simulation of remaining cray-ts[,ieee] instructions 01160 * (currently unused but lowers risk if future Craylibs uses them). Changed 01161 * arith_mpp.s and mpp_sim.c to interface to either T3D or T3E libraries. 01162 * 01163 * Revision 2.12 1995/08/18 17:18:00 jk 01164 * Fixed some bugs in cray1_sim.c; added simulation for Vi Vj*[LU]Vk. 01165 * 01166 * Revision 2.11 1995/08/16 22:09:24 jk 01167 * Added full 128-bit IEEE support; removed all internal arith declarations 01168 * from arith.h; implemented partial support for multi-targetable arith 01169 * library; added support for native cray-ts, cray-ts-ieee. 01170 * 01171 * Revision 2.10 1995/04/18 23:17:52 jk 01172 * Fixed cast of int to 64-bit pointer problem; fixed problem with nonpackage 01173 * versions of Craylibs. Begin using Craylibs 2.0 for arith testing. 01174 * 01175 * Revision 2.9 1995/02/08 19:55:22 jk 01176 * Added support for non-package versions of Craylibs and asynchronous 01177 * updating of the arith data file. Changed severity of 2016 message to 01178 * Logfile_Warning. Allow 128-bit IEEE float types and 64-bit integer 01179 * types on sparc systems but internally work in reduced precision. Fixed 01180 * MPP simulation bugs--allow 46-bit integer type and set default dynamic 01181 * rounding modes and types. Added cray-ts as target in get.obj.arith. 01182 * Changed c++ product in get.obj.arith to be same as scc except for rcg. 01183 * No longer clear upper 8 bits of 64-bit pointers. 01184 * 01185 * Revision 2.8 1995/01/04 16:06:20 jk 01186 * Test for j==0 in simulation of Ai [PQZ]Sj. Changed DCMPLX to CMPLX where used 01187 * since cft90 no longer recognizes DCMPLX. 01188 * 01189 * Revision 2.7 1994/12/20 22:39:20 jk 01190 * Allow slop in stores also. Copy allowable ORE logic to mpp_sim.c. 01191 * 01192 * Revision 2.6 1994/12/16 18:02:18 jk 01193 * Added simulation of remaining PVP instructions except for system calls, 01194 * monitor mode instructions, half-precision multiply, and shared register usage. 01195 * Fixes problem when reshape calls %LDSV which uses some previously unsimulated 01196 * vector instructions. 01197 * 01198 * Revision 2.5 1994/12/13 23:00:44 jk 01199 * Fixed problem with simulated vector load in memchr reaching outside fcd 01200 * memory area. 01201 * 01202 * Revision 2.4 1994/12/13 14:51:38 jk 01203 * Changed back arg in _F90_{INDEX,SCAN,VERIFY} calls to be a pointer rather 01204 * than a value. Added declarations in arith.h for arith_vers_name, 01205 * arith_vers_ID, and arith_vers_number. Moved definition of EDITION macro 01206 * from edition.c to cc command line. Changed Makefile to build arith data 01207 * files on either YMP or C90 (in Y-mode). 01208 * 01209 * Revision 2.3 1994/11/29 23:37:14 jk 01210 * Added AR_cabs and ar_divide_complex to no_intrin.c. Added 3 NULL args 01211 * to 2016 PRINTMSG call. Fixed ar_cvt_str_to_float to return 01212 * AR_STAT_UNDERFLOW. Added what-lines to arith_c1/mpp.s. 01213 * 01214 * Revision 2.2 1994/10/19 20:54:52 jk 01215 * Fix bug in native.c--x**C was calling ARPOWCR. 01216 * 01217 * Revision 2.1 1994/10/18 19:48:35 jk 01218 * Major restructuring of intrinsic evaluation. Added AR_index, AR_scan, 01219 * AR_verify, AR_reshape, and AR_transfer. Added type AR_Logical. Added 01220 * AR_SEMI_VALID status value. Removed AR_IEEE_denorm_behavior. Removed 01221 * support for Cray-2 and Cray-XMP. Changed internal names to consistently 01222 * begin with 'ar_' while all external user-callable names begin with 'AR_'. 01223 * See edition.c Edition 201 notes for a complete list of changes. 01224 * 01225 * Revision 2.0 1994/08/11 16:21:30 jk 01226 * Increment development version to 2.0 01227 * 01228 * Revision 1.53 1994/08/10 22:01:58 jk 01229 * Make changes to support release 1 branch; added logic to trap on denormalized 01230 * operands (for MPP only) in IEEE arithmetic routines; added product cam to 01231 * get.obj.arith. 01232 * 01233 * Revision 1.52 1994/08/05 22:27:03 jk 01234 * Add support for Fortran 90 modulo and selected_real_kind intrinsics. 01235 * 01236 * Revision 1.51 1994/06/16 18:06:58 jk 01237 * Fix bug in mpp_sim.c to prevent premature AR_STAT_UNDEFINED returned when 01238 * LDS instruction loads a NaN value. Add what-line chars in edition.c. 01239 * 01240 * Revision 1.50 1994/06/09 14:17:15 jk 01241 * Bug fixes, made AR_[ic]fcmp* routines internal, avoid using subtract for 01242 * IEEE compares (they must be exact and not over/underflow), changed version 01243 * numbering to 2-digit number, changed packaging for simulation (arith.a will 01244 * go in the compiler packages, arith data file will go in craylibs package 01245 * and be installed in the same location as libm.a/libmv2.a). 01246 * 01247 * Revision 1.49 1994/06/01 21:57:25 jk 01248 * Fixed problems to correctly handle denorm behavior, correctly test for 01249 * version consistency with libm/libmv2, and interface with cft77's version 01250 * of PRINTMSG. 01251 * 01252 * Revision 1.48 1994/05/27 18:34:46 jk 01253 * Fix bug in AR_power in mpp_sim.c for 32-bit float base operand--a 64-bit 01254 * value was being returned. 01255 * 01256 * Revision 1.47 1994/05/23 21:57:18 jk 01257 * Fixed bug in ar_unpack_float_str in which 0e1 was failing. 01258 * 01259 * Revision 1.46 1994/05/19 22:34:21 jk 01260 * Fixed another bug str to float conversions with 0 exponents. 01261 * 01262 * Revision 1.45 1994/05/19 16:51:17 jk 01263 * Add simulation interface ids to support future mods. Converted register 01264 * #s to mnemonics in mpp_sim.c. Fixed '..E0' bug in AR_convert_str_to_float. 01265 * Misc Makefile, get.obj.arith, confidence test fixes. 01266 * 01267 * Revision 1.44 1994/05/17 15:13:22 jk 01268 * Added simulation for the LDS, STS, and S8ADDQ MPP instructions plus the 01269 * actual 32-bit algorithms for HEXP, HLOG, and HSQRT. Made complex division 01270 * a pseudo-intrinsic (native version in intrin.c, simulation version in 01271 * misc_sim.c) to fix SPRs 78056 and 78123. Misc cleanup and bug fixes. 01272 * 01273 * Revision 1.43 1994/05/04 14:50:13 jk 01274 * Split intrinsic folding into 4 non-overlapping modes--none, native, PVP 01275 * simulation, and MPP simulation. Allow 32/64-bit non-complex floats in 01276 * AR_leadz, AR_popcnt, and AR_poppar. Add base 2 string_to_int conversion. 01277 * Clear part1 and part2 in integer results in bits.c and math.c. Added 01278 * minimal support for 16-bit integers. Began edition log in edition.c 01279 * for editions with large numbers of changes (see edition.c). 01280 * 01281 * Revision 1.42 1994/04/07 18:41:18 jk 01282 * Added PVP and MPP intrinsic simulation for libm and floating input conversion 01283 * routines. Modified get.obj.arith to turn on simulation for ccg and mppcg 01284 * code generators but disable it for rcg and cmcs. Extensive modifications 01285 * were made to the makefile for consistent packaging, easier testing, and 01286 * to provide debug versions of arith. Updated the README, arith.msg, and 01287 * arith.doc files. Modified existing confidence tests to work with/without 01288 * simulation enabled. Added simulation confidence tests. Added make targets 01289 * to generate the intrinsic simulation data files and to generate the test 01290 * data for the simulation confidence tests. 01291 * 01292 * Revision 1.41 1994/02/10 17:10:42 pmk 01293 * Fix problems with 32-bit IEEE intrinsic folding feature begun with last 01294 * version. Should affect only SPARC. 01295 * 01296 * Revision 1.40 1994/02/04 03:18:27 pmk 01297 * Fix SPARC/Solaris intrinsic folding so that 32-bit IEEE Fortran intrinsics 01298 * are not folded by conversion to/from 64-bit. 01299 * 01300 * Revision 1.39 1994/02/02 20:17:02 krz 01301 * Fix conversion of unsigned int to IEEE (SPR 74885). Incorrect member was 01302 * accessed when determining unsignedness of integer type. 01303 * 01304 * Revision 1.38 1993/12/01 01:39:01 pmk 01305 * Change complex division as requested by GSF to special-case zero 01306 * imaginary parts in denominators (only) -- SPR 70472. 01307 * Also fix conversions from 64-bit IEEE to 32-bit IEEE -- SPR 70042. 01308 * 01309 * Revision 1.37 1993/11/30 00:38:22 krz 01310 * Add support for Cray single-precision floating-point truncation. (SPR 01311 * 70042) 01312 * 01313 * Allow user-specified behavior for IEEE denorms. (SPR 66025) 01314 * 01315 * Provide functions to convert a host 64-bit int to an AR_DATA representation. 01316 * 01317 * Update arith.msg with changes made by pubs (Chris Brewster). 01318 * 01319 * Fix bug in AR_status for 32-bit IEEE floats (AR_STAT_ZERO was not reported 01320 * correctly). 01321 * 01322 * Fix AR_convert_float_to_str to correctly report Nan, +Inf, and -Inf for IEEE 01323 * floating-point numbers. 01324 * 01325 * Fix ar_convert_to_float (called by AR_convert) to allow conversions from 01326 * integral values to type AR_Float_Cray1_64_F. Previously, 01327 * AR_STAT_INVALID_TYPE was returned for such conversions. 01328 * 01329 * Revision 1.36 1993/11/12 02:08:39 krz 01330 * 1. Add a new function, AR_make_complex, which creates a complex number from 01331 * two floating-point numbers. 01332 * 01333 * 2. Update the messages file (arith.msg) with changes made by Pubs. 01334 * 01335 * 3. Fix the result from function AR_one for 32-bit ints. The unused upper 01336 * 32 bits of the word are now zeroed. 01337 * 01338 * 4. Fix the result from AR_convert_str_to_float for 32-bit floats when 01339 * executing on the Suns. The result was previously put into the wrong half of 01340 * the 64-bit word. 01341 * 01342 * Revision 1.35 1993/10/14 01:49:56 krz 01343 * The directory for arith has moved on the file server. Update references to 01344 * the arith directory in all files. 01345 * 01346 * Add support to build under the "solaris" environment. 01347 * 01348 * Revision 1.34 1993/09/23 00:57:35 krz 01349 * Add function AR_subtract_ptr_ptr to perform pointer minus pointer 01350 * evaluations. 01351 * 01352 * Change function AR_add_ptr_int to return an error status (it previously 01353 * always returned AR_STAT_OK). 01354 * 01355 * Don't make reference to ARERPFIX on platforms where it doesn't exist. 01356 * 01357 * Change uses of macros CRAY, CRAY1, and CRAY2 to the preferred 01358 * (standard-conforming) macros _CRAY, _CRAY1, and _CRAY2. 01359 * 01360 * Added a dummy AR_INTERNAL_ERROR function to ctgen.c to avoid the unsatisfied 01361 * external. Also link in PRINTMSG_dummy.c. 01362 * 01363 * Revision 1.33 1993/09/03 20:18:57 pmk 01364 * Fix cross-compiled exponentiation folding (IEEE on Cray hardware). 01365 * 01366 * Revision 1.32 1993/09/01 23:29:31 pmk 01367 * Revamp intrinsic processing, especially exponentiation, to support double 01368 * precision complex and to use system math libraries. Also fix a rounding bug 01369 * in convert.c. 01370 * 01371 * Revision 1.31 1993/08/12 20:55:41 krz 01372 * Add support to issue internal error messages through the PRINTMSG interface to the message system. 01373 * 01374 * Revision 1.30 1993/08/05 17:46:00 krz 01375 * 1. Added AR_convert_hex_str_to_float function. 01376 * 01377 * 2. Updated build procedures in README file to use generation compiler, library, and header files as jointly agreed upon by the compiler integrators. (Don't have to worry about signgam anymore!) 01378 * 01379 * 3. Added copyright notices and USMIDs to source files. 01380 * 01381 * 4. Added function prototypes for AR_c2fapprox in cray2_dummy.c and matherr in itgen.c. 01382 * 01383 * 5. Added descriptions for AR_convert_str_to_int, AR_convert_int_to_str, AR_convert_str_to_float, and AR_convert_float_to_str to arith.doc. 01384 * 01385 * 6. Clean up, standardize, and document the return values for AR_convert_str_to_int and AR_convert_str_to_float. 01386 * 01387 * Revision 1.29 1993/07/13 18:25:21 gbt 01388 * For reals raised to integer powers, AR_power() was checking the size of 01389 * the base, rather than the power, to determine whether the power was a 01390 * 32 bit int or a 64 bit one. The bug was introduced when 32 bit integer 01391 * support was added. 01392 * 01393 * Revision 1.28 1993/07/01 23:41:52 krz 01394 * This is a small commit to test the automatic mail feature of CVS. 01395 * 01396 * Revision 1.27 1993/06/15 00:59:27 krz 01397 * Add a dummy entry for the Cray-2 floating-point approximation function (and 01398 * associated data) for use on non-Cray-2 machines (to save code/data space 01399 * when the library is linked into executables on those machines). Add a 01400 * couple of workarounds for bugs found in the gcc compiler and library 01401 * headers. 01402 * 01403 * Revision 1.26 1993/05/20 02:59:28 krz 01404 * 1. Fix return value for AR_modulo, which incorrectly reported overflow in 01405 * cases where the numerator was negative and the result was zero. 01406 * 01407 * 2. Fix sprintf() calls for floats on non-Cray hosts. While the ar_ieee64 01408 * union member is the same size as a double on a Sun, the parameter 01409 * passing mechanism is different for structs and doubles. Thus explicit 01410 * casts are necessary. Also, make all the format strings on those calls 01411 * right. 01412 * 01413 * 3. Comparisons of infinities with infinities are now fixed. 01414 * 01415 * Revision 1.25 1993/05/17 17:50:48 krz 01416 * Add a new function, AR_add_ptr_int to perform pointer arithmetic. 01417 * Fix some integral conversions that weren't sign extending correctly. 01418 * AR_status now allows and correctly handles 24 and 8 bit ints. 01419 * 01420 * Revision 1.24 1993/04/19 20:39:02 gbt 01421 * 1. Make sure all file errors increment the error counter in confidence.c. 01422 * 2. Add 32 bit signed and unsigned integer support. 01423 * 3. Modify testint.c to allow it to run on (SPARC) Suns. 01424 * 01425 * Revision 1.23 1993/04/09 22:36:35 pmk 01426 * Minor fixes to Cray double precision floating add and double precision 01427 * exponentiation, to yield proper results in end-case error situations. 01428 * 01429 * Revision 1.22 1993/04/09 03:51:04 krz 01430 * Change the data format for IEEE 32-bit floats so that the value is maintained in the lower 32 bits of a 64-bit word. Change the data format for IEEE 64-bit complex (2 32-bit floats) to match the format used at runtime. This change should be completely transparent since nobody is using these data types (yet). 01431 * 01432 * Revision 1.21 1993/03/11 23:29:15 pmk 01433 * Add new AR_round_int_div routine, and fix Cray-1 truncated multiplies 01434 * in the high-level interface. 01435 * 01436 * Revision 1.20 1993/02/09 21:07:19 pmk 01437 * Correct an abort in intrin.c when folding IEEE arithmetic on the Crays; 01438 * also, continue development and testing of 32-bit IEEE arithmetic. 01439 * 01440 * Revision 1.19 1993/02/04 23:40:25 pmk 01441 * Speed up integer multiplication, addition, and string conversion. 01442 * 01443 * Revision 1.18 1993/01/29 01:26:55 krz 01444 * Forgot to update the edition last time. This is edition 17. 01445 * 01446 * Revision 1.17 1993/01/27 22:52:21 pmk 01447 * Add Cray 128-bit float -> IEEE 64-bit conversion. 01448 * 01449 * Revision 1.16 1992/12/29 03:47:04 krz 01450 * Move the removal of the overflow flag for unsigned integer multiplication from ar_multiply_integer to AR_multiply so that AR_convert_str_to_int can check for overflow during conversion. 01451 * 01452 * Revision 1.15 1992/12/12 04:43:20 pmk 01453 * Implement AR_exp, AR_log, and AR_power routines for the evaluation 01454 * of exponentiation in intrin.c. 01455 * 01456 * Revision 1.14 1992/12/03 23:21:24 pmk 01457 * Add new AR_cabs function for bitwise accuracy with library. 01458 * 01459 * Revision 1.13 1992/11/25 21:23:52 krz 01460 * 1. Add tests for conversions from integral operands to integral results. 01461 * 2. When converting to integral value, return overflow status bit when 01462 * original operand value can not be represented in the result type. 01463 * 3. Fix integral addition, subtraction, division, and modulus to return 01464 * correct status when the result and an operand are the same object. 01465 * 01466 * Revision 1.12 1992/11/18 01:26:14 pmk 01467 * Fix complex absolute value and integer division overflow checking. 01468 * 01469 * Revision 1.11 1992/11/06 17:35:20 pmk 01470 * Break up bitopers.c, and support square root. 01471 * 01472 * Revision 1.10 1992/10/24 01:12:38 pmk 01473 * Compile with optimization enabled. 01474 * 01475 * Revision 1.9 1992/10/21 23:35:33 pmk 01476 * Correct status returns in complex operations. 01477 * 01478 * Revision 1.8 1992/10/19 19:52:20 pmk 01479 * Provide conversions between Cray and IEEE format floating-point numbers. 01480 * 01481 * Revision 1.7 1992/10/17 00:56:08 krz 01482 * Add arith.doc to repository. Add AR_Int_46_U back to arith.h. Fixed bugs in AR_convert_str_to_int. 01483 * 01484 * Revision 1.6 1992/10/16 23:08:34 krz 01485 * Finished testing of integral operations. Changed return status bits from integral operations where necessary. 01486 * 01487 * Revision 1.5 1992/10/12 16:19:56 pmk 01488 * Version 004 - fixes from Kent to bitopers.c and testint.c. 01489 * 01490 * Revision 1.4 1992/10/08 01:17:35 pmk 01491 * Version 003 - a fix to conversion from Kent in bitopers.c. 01492 * 01493 * Revision 1.3 1992/09/23 21:55:54 pmk 01494 * 01495 * Revision 1.2 1992/09/23 21:53:59 pmk 01496 * Correct minor problems with packaging. This is version V002. All 01497 * problems reported with V001 should have been addressed. 01498 * 01499 * Revision 1.1 1992/09/22 20:01:10 pmk 01500 * Set up build procedures. 01501 * 01502 */