| 1 | /INTEGER MATH PACKAGE OS8 FORTRAN II LIBRARY |
| 2 | / |
| 3 | / |
| 4 | / |
| 5 | / |
| 6 | / |
| 7 | / |
| 8 | / |
| 9 | / |
| 10 | / |
| 11 | /COPYRIGHT (C) 1974,1977 BY DIGITAL EQUIPMENT CORPORATION |
| 12 | / |
| 13 | / |
| 14 | / |
| 15 | / |
| 16 | / |
| 17 | / |
| 18 | / |
| 19 | / |
| 20 | / |
| 21 | / |
| 22 | /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE |
| 23 | /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT |
| 24 | /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY |
| 25 | /FOR ANY ERRORS THAT MAY APPEAR IN THIS MANUAL. |
| 26 | / |
| 27 | /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER |
| 28 | /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED |
| 29 | /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH |
| 30 | /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. |
| 31 | / |
| 32 | /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE |
| 33 | /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY |
| 34 | /DIGITAL. |
| 35 | / |
| 36 | / |
| 37 | / |
| 38 | / |
| 39 | / |
| 40 | / |
| 41 | / |
| 42 | / |
| 43 | / |
| 44 | / |
| 45 | \f/ VERSION 5A |
| 46 | / APRIL 28, 1977 |
| 47 | / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS |
| 48 | / |
| 49 | / |
| 50 | ENTRY IREM |
| 51 | ENTRY IABS |
| 52 | ENTRY DIV |
| 53 | ENTRY MPY |
| 54 | ENTRY IRDSW |
| 55 | ENTRY CLEAR |
| 56 | ENTRY SUBSC |
| 57 | |
| 58 | /THE FOLLOWING DEFINITIONS ARE TO ENABLE LIBRARY |
| 59 | /OPTIMIZATIONS WHERE CRITICAL TIMING CONSIDERATIONS |
| 60 | /EXIST. THEY SHOULD BE USED WITH EXTREME CAUTION, |
| 61 | /AND MUST REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS |
| 62 | /ONLY. |
| 63 | |
| 64 | OPDEF TADI 1400 |
| 65 | OPDEF DCAI 3400 |
| 66 | OPDEF JMSI 4400 |
| 67 | OPDEF JMPI 5400 |
| 68 | |
| 69 | LAP /LV AUTO PAGING FOR PAL-III LIKE CODE |
| 70 | |
| 71 | AC, 0 /LOCATIONS USED BY MPY & DIV |
| 72 | MQ, 0 |
| 73 | SIGN, 0 |
| 74 | CTR, 0 |
| 75 | LOC, 0 |
| 76 | SAV, 0 |
| 77 | |
| 78 | MPY, BLOCK 1 |
| 79 | 5 /INTEGER MULTIPLY SUBROUTINE |
| 80 | DCA MQ / CALL 1,MPY |
| 81 | TAD MPY / ARG <NUMBER> |
| 82 | DCA MPY1 |
| 83 | MPY1, NOP /REPLACED BY CDF |
| 84 | TADI MPY# |
| 85 | INC MPY# |
| 86 | DCA MPY2 |
| 87 | TADI MPY# |
| 88 | INC MPY# |
| 89 | DCA DIV |
| 90 | MPY2, NOP /REPLACED BY CDF |
| 91 | TADI DIV |
| 92 | JMS MPYSB |
| 93 | RETRN MPY |
| 94 | |
| 95 | MPYSB, 0 /INTERNAL MULTIPLICATION SUBR |
| 96 | DCA DIV |
| 97 | TAD (-14 |
| 98 | DCA CTR |
| 99 | BACK, CLL RAL |
| 100 | DCA AC |
| 101 | TAD MQ |
| 102 | CLL RAL |
| 103 | DCA MQ |
| 104 | SZL |
| 105 | TAD DIV |
| 106 | TAD AC |
| 107 | ISZ CTR |
| 108 | JMP BACK |
| 109 | JMPI MPYSB |
| 110 | / |
| 111 | CPAGE 4 |
| 112 | DIVZA, DIVZ |
| 113 | DVERR, 4411 /"DIVZ" ERROR |
| 114 | 2632 |
| 115 | DIV, BLOCK 1 |
| 116 | 5 /INTEGER DIVIDE SUBROUTINE |
| 117 | SMA / CALL 1,DIV |
| 118 | JMP AD1 / ARG <DIVISOR> |
| 119 | INC SIGN |
| 120 | CIA |
| 121 | AD1, DCA MQ |
| 122 | DCA CTR |
| 123 | TAD DIV |
| 124 | DCA DIV1 |
| 125 | DIV1, NOP /REPLACED BY CDF |
| 126 | TADI DIV# |
| 127 | INC DIV# |
| 128 | DCA DIV2 |
| 129 | TADI DIV# |
| 130 | INC DIV# |
| 131 | DCA MPY |
| 132 | DIV2, NOP |
| 133 | TADI MPY |
| 134 | SNA |
| 135 | JMPI DIVZA /ATTEMPTING TO DIVIDE BY ZERO |
| 136 | SMA |
| 137 | JMP LOOP1 |
| 138 | INC SIGN |
| 139 | CIA |
| 140 | LOOP1, CLL RAL |
| 141 | INC CTR |
| 142 | SMA |
| 143 | JMP LOOP1 |
| 144 | CLL RAR |
| 145 | DCA LOC |
| 146 | TAD LOC |
| 147 | CIA |
| 148 | DCA MPY |
| 149 | TAD CTR |
| 150 | CMA |
| 151 | DCA CTR |
| 152 | TAD CTR |
| 153 | DCA SAV |
| 154 | DCA AC |
| 155 | TAD MQ |
| 156 | LOOP2, TAD MPY |
| 157 | LOOP3, ISZ CTR |
| 158 | SKP |
| 159 | JMP DONE |
| 160 | STL |
| 161 | SPA |
| 162 | CLL |
| 163 | DCA MQ |
| 164 | TAD AC |
| 165 | RAL |
| 166 | DCA AC |
| 167 | TAD MQ |
| 168 | CLL RAL |
| 169 | SNL |
| 170 | JMP LOOP2 |
| 171 | TAD LOC |
| 172 | JMP LOOP3 |
| 173 | DONE, CLA |
| 174 | TAD SIGN |
| 175 | RAR |
| 176 | CLA |
| 177 | DCA SIGN |
| 178 | TAD AC |
| 179 | SZL |
| 180 | CIA |
| 181 | RETRN DIV |
| 182 | |
| 183 | IREM, BLOCK 1 |
| 184 | 5 /INTEGER REMAINDER SUBROUTINE |
| 185 | CLA / CALL 1,IREM |
| 186 | INC IREM# / ARG <UNUSED VARIABLE> |
| 187 | INC IREM# |
| 188 | INC SAV /IREM MUST HAVE AN ARGUMENT |
| 189 | TAD MQ /BECAUSE IT IS A FUNCTION. |
| 190 | SPA /IREM CAN BE CALLED ONLY ONCE |
| 191 | TAD LOC /AFTER EACH DIVISION ... |
| 192 | SKP /SUBSEQUENT CALLS WILL RETURN ZERO. |
| 193 | LOP, CLL RAR |
| 194 | ISZ SAV |
| 195 | JMP LOP |
| 196 | RETRN IREM |
| 197 | / |
| 198 | PAGE |
| 199 | \f |
| 200 | IABS, BLOCK 1 |
| 201 | 5 /INTEGER ABS VALUE FUNCTION |
| 202 | TAD IABS / CALL 1,IABS |
| 203 | DCA IAB1 / ARG <INTEGER VARIABLE> |
| 204 | IAB1, NOP |
| 205 | TADI IABS# |
| 206 | INC IABS# |
| 207 | DCA IAB2 |
| 208 | TADI IABS# |
| 209 | INC IABS# |
| 210 | DCA IRDSW |
| 211 | IAB2, NOP /CDF TO ARGUMENT FIELD |
| 212 | TADI IRDSW |
| 213 | SPA |
| 214 | CIA |
| 215 | RETRN IABS |
| 216 | |
| 217 | IRDSW, BLOCK 1 |
| 218 | 5 /READ SWITCH REGISTER FUNCTION |
| 219 | CLA OSR |
| 220 | INC IRDSW# |
| 221 | INC IRDSW# |
| 222 | RETRN IRDSW |
| 223 | |
| 224 | DIVZ, CALL 1,ERROR /ZERO DIVIDE ERROR |
| 225 | ARG DVERR |
| 226 | CLA CLL CMA RAR |
| 227 | RETRN DIV |
| 228 | |
| 229 | /THE FLOATING POINT CLEAR ROUTINE WAS ADDED TO "INTEGR" |
| 230 | /SO THAT PROGRAMS WHICH DO NOT USE FLOATING POINT MATH |
| 231 | /CAN RUN WITHOUT LOADING THE F.P. MATH PACKAGE. |
| 232 | |
| 233 | CLEAR, BLOCK 1 |
| 234 | 5 /FLOATING POINT CLEAR FUNCTION |
| 235 | DCA IRDSW |
| 236 | DCA ACH |
| 237 | DCA ACM |
| 238 | DCA ACL |
| 239 | TAD IRDSW |
| 240 | RETRN CLEAR |
| 241 | |
| 242 | \f |
| 243 | / THE FOLLOWING CAN BE USED FOR DOUBLY OR SINGLY |
| 244 | / SUBSCRIPTED ARRAYS. ON ENTRY THE AC SHOULD BE |
| 245 | / NEGATIVE FOR FLOATING POINT VARIABLES. THIS MAY |
| 246 | / BE ANY NEGATIVE NUMBER FOR SINGLY SUBSCRIPTED |
| 247 | / VARIABLES, AND MUST BE THE FIRST DIMENSION FOR |
| 248 | / DOUBLY SUBSCRIPTED VARIABLES. SOME EXAMPLES |
| 249 | / FOLLOW: (TO LOAD THE I,JTH ELEMENT OF AN FP ARRAY) |
| 250 | |
| 251 | / TAD (-M /DIMENSIONS ARE M BY N |
| 252 | / CALL 3,SUBSC |
| 253 | / ARG J |
| 254 | / ARG I |
| 255 | / ARG ARRAY |
| 256 | / LOC /MUST BE A DUMMY VARIABLE |
| 257 | / CALL 1,IFAD |
| 258 | / ARG LOC |
| 259 | |
| 260 | / TO LOAD THE JTH ELEMENT OF AN INTEGER ARRAY: |
| 261 | |
| 262 | / CALL 2,SUBSC |
| 263 | / ARG J |
| 264 | / ARG INTARR |
| 265 | / LOC /STILL A DUMMY VARIABLE |
| 266 | / TAD I LOC |
| 267 | |
| 268 | |
| 269 | S1, BLOCK 1 /ADDR OF 1ST SUBSC |
| 270 | S2, BLOCK 1 /ADDR OF 2ND SUBSC |
| 271 | A, BLOCK 2 /ADDR OF ARRAY |
| 272 | R, BLOCK 1 /ADDR FOR RESULT |
| 273 | TM, 0 |
| 274 | FL, 0 /DOUBLE SUBSC FLAG |
| 275 | N, 0 /DIMENSION -- NEGATIVE IF FLOATING |
| 276 | MQA, MQ /FOR INDIRECT DCA |
| 277 | |
| 278 | SUBSC, BLOCK 1 |
| 279 | 5 /FORTRAN SUBSCRIPTING ROUTINE |
| 280 | DCA N /SAVE THE DIMENSION |
| 281 | TAD N |
| 282 | SPA /... ALSO ABS VALUE |
| 283 | CMA |
| 284 | DCAI MQA /WARNING **THIS ASSUMES DF=CURR FIELD** |
| 285 | CLA CLL CMA RAL /HOW MANY ARGS? |
| 286 | TAD SUBSC# |
| 287 | DCA 10 |
| 288 | TAD SUBSC |
| 289 | DCA SUB1 |
| 290 | SUB1, NOP /REPLACED BY CDF |
| 291 | TADI 10 |
| 292 | AND (100 |
| 293 | SNA CLA /DOUBLE SUBSCRIPTS? |
| 294 | JMP SB0 |
| 295 | TADI 10 /YES, PICK UP ARGS... |
| 296 | DCA SB2 |
| 297 | TADI 10 |
| 298 | DCA S2 |
| 299 | CMA |
| 300 | SB0, DCA FL /SET DBL SUBSC FLAG |
| 301 | TADI 10 |
| 302 | DCA SB1 |
| 303 | TADI 10 |
| 304 | DCA S1 |
| 305 | TADI 10 |
| 306 | DCA A |
| 307 | TADI 10 |
| 308 | DCA A# |
| 309 | TAD SUBSC |
| 310 | DCA SUB2 |
| 311 | TADI 10 |
| 312 | DCA R |
| 313 | TAD 10 |
| 314 | IAC |
| 315 | DCA SUBSC# |
| 316 | ISZ FL /DBL SUBSCRIPTING? |
| 317 | JMP SB1 |
| 318 | CLA CMA /GET THE 2ND SUBSC |
| 319 | SB2, NOP /CDF TO FIELD OF 2ND SUBSCRIPT |
| 320 | TADI S2 |
| 321 | SZA /IS IT A 1? |
| 322 | JMSI MPYSBA /NO, MULTIPLY BY DIMENSION |
| 323 | SB1, NOP /CDF TO FIELD OF 1ST SUBSCRIPT |
| 324 | TADI S1 |
| 325 | TAD (-1 /MINUS ONE |
| 326 | DCA TM |
| 327 | SUB2, NOP /REPLACED BY CDF |
| 328 | TAD A |
| 329 | DCAI R |
| 330 | INC R |
| 331 | TAD N |
| 332 | SPA CLA /FIXED OR FLOATING |
| 333 | TAD TM |
| 334 | CLL RAL |
| 335 | TAD TM |
| 336 | TAD A# |
| 337 | DCAI R |
| 338 | STL CLA RTL /FAST 'RETRN SUBSC' |
| 339 | TAD SUBSC |
| 340 | DCA SUB3 |
| 341 | SUB3, NOP /REPLACED BY 'CDF CIF' |
| 342 | JMPI SUBSC# |
| 343 | |
| 344 | MPYSBA, MPYSB |
| 345 | |
| 346 | END |
| 347 | \f |