ASM1130 CROSS ASSEMBLER V1.22 -- V2M12 -- Sun Nov 1 19:25:07 2020 Source File: \r2ftanh.asm 1 | *************************************************** R2I00010 2 | * * R2I00020 3 | * SUBROUTINE NAME- * R2I00030 4 | * FULL NAME- STANDARD PRECISION FLOATING- * R2I00040 5 | * POINT HYPERBOLIC TANGENT FUNCTION. * R2I00050 6 | * CODE NAME- FTNH/FTANH * R2I00060 7 | * PURPOSE- THIS SUBPROGRAM COMPUTES THE HYPER- * R2I00070 8 | * BOLIC TANGENT OF A STANDARD PRECISION FLOAT* R2I00080 9 | * ING-POINT NUMBER. * R2I00090 10 | * METHOD-SEE IBM 1130 SUBROUTINE LIBRARY MANUAL.* R2I00100 11 | * CAPABILITIES AND LIMITATIONS- SEE IBM 1130 * R2I00110 12 | * SUBROUTINE LIBRARY MANUAL. * R2I00120 13 | * SPECIAL FEATURES- N/A * R2I00130 14 | * ADDITIONAL INFORMATION- * R2I00140 15 | * ESTIMATED EXECUTION TIME- SEE IBM 1130 * R2I00150 16 | * SUBROUTINE LIBRARY MANUAL * R2I00160 17 | * * R2I00170 18 | *************************************************** R2I00180 CALL FTANH -V1. 20 | SPR R2I00200 21 | ENT FTANH STANDARD FORTRAN NAME R2I00210 22 | ENT FTNH R2I00220 0000 0000 23 | FTANH DC 0 FORTRAN ENTRY R2I00230 0001 061C*58D7 24 | LIBF FGETP GET PARAMETER R2I00240 0002 0000 25 | FTNH DC 0 USER ENTRY R2I00250 0003 C37D 26 | LD 3 125 ADD ONE TO EXPONENT TO R2I00260 0004 8028 27 | A ONE DOUBLE X. R2I00270 0005 D37D 28 | STO 3 125 R2I00280 0006 9028 29 | S EXK CHK EXPONENT RANGE R2I00290 0007 4C30 0023R 30 | BSC L OUT1,-Z BR IF TOO LARGE,SET TANH=+1 R2I00300 0009 C37E 31 | LD 3 126 GET MANTISSA. IF IT IS R2I00310 000A 4818 32 | BSC +- ZERO,SET EXPONENT TO ZERO R2I00320 000B D37D 33 | STO 3 125 R2I00330 000C 069D*7540 34 | CALL FXPN COMPUTE E**2X. X=ARGUMENT R2I00340 000E 0604*4100 35 | LIBF FADD (E**2X)+1 R2I00350 000F 0030R 36 | DC FLONE R2I00360 0010 068A*3580 37 | LIBF FSTO SAVE IN Z R2I00370 0011 0032R 38 | DC Z R2I00380 0012 C37F 39 | LD 3 127 GET EXPONENT OF FAC R2I00390 0013 1008 40 | SLA 8 AND SAVE IN TEMP. R2I00400 0014 1808 41 | SRA 8 R2I00410 0015 D016 42 | STO TEMP R2I00420 0016 0604*4100 43 | LIBF FADD COMPUTE (E**2X)-1 R2I00430 0017 0034R 44 | DC MIN2 R2I00440 0018 1010 45 | SLA 16 CORRECT THE DIVIDEND R2I00450 0019 9012 46 | S TEMP TO ALLOW FOR DIVISOR R2I00460 001A A37E 47 | M 3 126 TRUNCATION UPON DIVISION. R2I00470 001B A816 48 | D Z R2I00480 001C 1890 49 | SRT 16 R2I00490 001D 8B7E 50 | AD 3 126 R2I00500 001E DB7E 51 | STD 3 126 R2I00510 001F 0610*9940 52 | LIBF FDIV PERFORM DIVISION-- R2I00520 0020 0032R 53 | DC Z (E**2X-1)/(E**2X+1). R2I00530 0021 4C80 0002R 54 | BSC I FTNH RETURN TO MAIN PROGRAM R2I00540 55 | * R2I00550 56 | *ABSOLUTE VALUE OF ARGUMENT GT 32. RETURN +1 OR -1. R2I00560 57 | * R2I00570 0023 C37E 58 | OUT1 LD 3 126 GET ARGUMENT AND R2I00580 0024 18A0 59 | SRT 32 SHIFT OUT ALL BUT THE R2I00590 0025 109F 60 | SLT 31 SIGN BIT. R2I00600 0026 E809 61 | OR FLONE PUT THE SIGN ON FLT PT ONE R2I00610 0027 DB7E 62 | STD 3 126 AND STORE IN FAC. R2I00620 0028 C005 63 | LD EXP1 GET CORRESPONDING EXPONENT. R2I00630 0029 D37D 64 | STO 3 125 R2I00640 002A 4C80 0002R 65 | BSC I FTNH RETURN TO MAIN PROGRAM R2I00650 66 | * R2I00660 67 | *CONSTANTS AND BUFFER AREA R2I00670 68 | * R2I00680 002C 0000 69 | TEMP DC 0 SAVE LAST OF DIVISOR R2I00690 002D 0001 70 | ONE DC 1 SINGLE WORD ONE R2I00700 002E 0081 71 | EXP1 DC 129 EXPONENT FOR FLT PT ONE R2I00710 002F 0085 72 | EXK DC 128+5 EXPONENT CHECK R2I00720 0030 4000 0081 73 | FLONE DEC 1.0 FLT PT ONE R2I00730 0032 0000 0000 74 | Z DEC 0.0 STORE DIVISOR R2I00740 0034 C000 0082 75 | MIN2 DEC -2.0 DIFFERENCE BETWEEN DIVISOR R2I00750 76 | * AND DIVIDEND. R2I00760 0036 77 | END R2I00770 There were no errors in this assembly === CROSS REFERENCES ========================================================== Name Val Defd Referenced EXK 002FR 72 29 EXP1 002ER 71 63 FLONE 0030R 73 36 61 FTANH 0000R 23 FTNH 0002R 25 54 65 MIN2 0034R 75 44 ONE 002DR 70 27 OUT1 0023R 58 30 TEMP 002CR 69 42 46 Z 0032R 74 38 48 53