1*8ad5b80dSskrll; $NetBSD: milli.S,v 1.3 2022/06/13 16:00:05 skrll Exp $ 2e978777bSfredette; 3e978777bSfredette; $OpenBSD: milli.S,v 1.5 2001/03/29 04:08:20 mickey Exp $ 4e978777bSfredette; 5e978777bSfredette; (c) Copyright 1986 HEWLETT-PACKARD COMPANY 6e978777bSfredette; 7e978777bSfredette; To anyone who acknowledges that this file is provided "AS IS" 8e978777bSfredette; without any express or implied warranty: 9e978777bSfredette; permission to use, copy, modify, and distribute this file 10e978777bSfredette; for any purpose is hereby granted without fee, provided that 11e978777bSfredette; the above copyright notice and this notice appears in all 12e978777bSfredette; copies, and that the name of Hewlett-Packard Company not be 13e978777bSfredette; used in advertising or publicity pertaining to distribution 14e978777bSfredette; of the software without specific, written prior permission. 15e978777bSfredette; Hewlett-Packard Company makes no representations about the 16e978777bSfredette; suitability of this software for any purpose. 17e978777bSfredette; 18e978777bSfredette 19e978777bSfredette; Standard Hardware Register Definitions for Use with Assembler 20e978777bSfredette; version A.08.06 21e978777bSfredette; - fr16-31 added at Utah 22e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23e978777bSfredette; Hardware General Registers 24e978777bSfredetter0: .equ 0 25e978777bSfredette 26e978777bSfredetter1: .equ 1 27e978777bSfredette 28e978777bSfredetter2: .equ 2 29e978777bSfredette 30e978777bSfredetter3: .equ 3 31e978777bSfredette 32e978777bSfredetter4: .equ 4 33e978777bSfredette 34e978777bSfredetter5: .equ 5 35e978777bSfredette 36e978777bSfredetter6: .equ 6 37e978777bSfredette 38e978777bSfredetter7: .equ 7 39e978777bSfredette 40e978777bSfredetter8: .equ 8 41e978777bSfredette 42e978777bSfredetter9: .equ 9 43e978777bSfredette 44e978777bSfredetter10: .equ 10 45e978777bSfredette 46e978777bSfredetter11: .equ 11 47e978777bSfredette 48e978777bSfredetter12: .equ 12 49e978777bSfredette 50e978777bSfredetter13: .equ 13 51e978777bSfredette 52e978777bSfredetter14: .equ 14 53e978777bSfredette 54e978777bSfredetter15: .equ 15 55e978777bSfredette 56e978777bSfredetter16: .equ 16 57e978777bSfredette 58e978777bSfredetter17: .equ 17 59e978777bSfredette 60e978777bSfredetter18: .equ 18 61e978777bSfredette 62e978777bSfredetter19: .equ 19 63e978777bSfredette 64e978777bSfredetter20: .equ 20 65e978777bSfredette 66e978777bSfredetter21: .equ 21 67e978777bSfredette 68e978777bSfredetter22: .equ 22 69e978777bSfredette 70e978777bSfredetter23: .equ 23 71e978777bSfredette 72e978777bSfredetter24: .equ 24 73e978777bSfredette 74e978777bSfredetter25: .equ 25 75e978777bSfredette 76e978777bSfredetter26: .equ 26 77e978777bSfredette 78e978777bSfredetter27: .equ 27 79e978777bSfredette 80e978777bSfredetter28: .equ 28 81e978777bSfredette 82e978777bSfredetter29: .equ 29 83e978777bSfredette 84e978777bSfredetter30: .equ 30 85e978777bSfredette 86e978777bSfredetter31: .equ 31 87e978777bSfredette 88e978777bSfredette; Hardware Space Registers 89e978777bSfredettesr0: .equ 0 90e978777bSfredette 91e978777bSfredettesr1: .equ 1 92e978777bSfredette 93e978777bSfredettesr2: .equ 2 94e978777bSfredette 95e978777bSfredettesr3: .equ 3 96e978777bSfredette 97e978777bSfredettesr4: .equ 4 98e978777bSfredette 99e978777bSfredettesr5: .equ 5 100e978777bSfredette 101e978777bSfredettesr6: .equ 6 102e978777bSfredette 103e978777bSfredettesr7: .equ 7 104e978777bSfredette 105e978777bSfredette; Hardware Floating Point Registers 106e978777bSfredettefr0: .equ 0 107e978777bSfredette 108e978777bSfredettefr1: .equ 1 109e978777bSfredette 110e978777bSfredettefr2: .equ 2 111e978777bSfredette 112e978777bSfredettefr3: .equ 3 113e978777bSfredette 114e978777bSfredettefr4: .equ 4 115e978777bSfredette 116e978777bSfredettefr5: .equ 5 117e978777bSfredette 118e978777bSfredettefr6: .equ 6 119e978777bSfredette 120e978777bSfredettefr7: .equ 7 121e978777bSfredette 122e978777bSfredettefr8: .equ 8 123e978777bSfredette 124e978777bSfredettefr9: .equ 9 125e978777bSfredette 126e978777bSfredettefr10: .equ 10 127e978777bSfredette 128e978777bSfredettefr11: .equ 11 129e978777bSfredette 130e978777bSfredettefr12: .equ 12 131e978777bSfredette 132e978777bSfredettefr13: .equ 13 133e978777bSfredette 134e978777bSfredettefr14: .equ 14 135e978777bSfredette 136e978777bSfredettefr15: .equ 15 137e978777bSfredette 138e978777bSfredettefr16: .equ 16 139e978777bSfredette 140e978777bSfredettefr17: .equ 17 141e978777bSfredette 142e978777bSfredettefr18: .equ 18 143e978777bSfredette 144e978777bSfredettefr19: .equ 19 145e978777bSfredette 146e978777bSfredettefr20: .equ 20 147e978777bSfredette 148e978777bSfredettefr21: .equ 21 149e978777bSfredette 150e978777bSfredettefr22: .equ 22 151e978777bSfredette 152e978777bSfredettefr23: .equ 23 153e978777bSfredette 154e978777bSfredettefr24: .equ 24 155e978777bSfredette 156e978777bSfredettefr25: .equ 25 157e978777bSfredette 158e978777bSfredettefr26: .equ 26 159e978777bSfredette 160e978777bSfredettefr27: .equ 27 161e978777bSfredette 162e978777bSfredettefr28: .equ 28 163e978777bSfredette 164e978777bSfredettefr29: .equ 29 165e978777bSfredette 166e978777bSfredettefr30: .equ 30 167e978777bSfredette 168e978777bSfredettefr31: .equ 31 169e978777bSfredette 170e978777bSfredette; Hardware Control Registers 171e978777bSfredettecr0: .equ 0 172e978777bSfredette 173e978777bSfredetterctr: .equ 0 ; Recovery Counter Register 174e978777bSfredette 175e978777bSfredettecr8: .equ 8 ; Protection ID 1 176e978777bSfredette 177e978777bSfredettepidr1: .equ 8 178e978777bSfredette 179e978777bSfredettecr9: .equ 9 ; Protection ID 2 180e978777bSfredette 181e978777bSfredettepidr2: .equ 9 182e978777bSfredette 183e978777bSfredettecr10: .equ 10 184e978777bSfredette 1852e0bf311Sandvarccr: .equ 10 ; Coprocessor Configuration Register 186e978777bSfredette 187e978777bSfredettecr11: .equ 11 188e978777bSfredette 189e978777bSfredettesar: .equ 11 ; Shift Amount Register 190e978777bSfredette 191e978777bSfredettecr12: .equ 12 192e978777bSfredette 193e978777bSfredettepidr3: .equ 12 ; Protection ID 3 194e978777bSfredette 195e978777bSfredettecr13: .equ 13 196e978777bSfredette 197e978777bSfredettepidr4: .equ 13 ; Protection ID 4 198e978777bSfredette 199e978777bSfredettecr14: .equ 14 200e978777bSfredette 201e978777bSfredetteiva: .equ 14 ; Interrupt Vector Address 202e978777bSfredette 203e978777bSfredettecr15: .equ 15 204e978777bSfredette 205e978777bSfredetteeiem: .equ 15 ; External Interrupt Enable Mask 206e978777bSfredette 207e978777bSfredettecr16: .equ 16 208e978777bSfredette 209e978777bSfredetteitmr: .equ 16 ; Interval Timer 210e978777bSfredette 211e978777bSfredettecr17: .equ 17 212e978777bSfredette 213e978777bSfredettepcsq: .equ 17 ; Program Counter Space queue 214e978777bSfredette 215e978777bSfredettecr18: .equ 18 216e978777bSfredette 217e978777bSfredettepcoq: .equ 18 ; Program Counter Offset queue 218e978777bSfredette 219e978777bSfredettecr19: .equ 19 220e978777bSfredette 221e978777bSfredetteiir: .equ 19 ; Interruption Instruction Register 222e978777bSfredette 223e978777bSfredettecr20: .equ 20 224e978777bSfredette 225e978777bSfredetteisr: .equ 20 ; Interruption Space Register 226e978777bSfredette 227e978777bSfredettecr21: .equ 21 228e978777bSfredette 229e978777bSfredetteior: .equ 21 ; Interruption Offset Register 230e978777bSfredette 231e978777bSfredettecr22: .equ 22 232e978777bSfredette 2332e0bf311Sandvaripsw: .equ 22 ; Interruption Processor Status Word 234e978777bSfredette 235e978777bSfredettecr23: .equ 23 236e978777bSfredette 237e978777bSfredetteeirr: .equ 23 ; External Interrupt Request 238e978777bSfredette 239e978777bSfredettecr24: .equ 24 240e978777bSfredette 2412e0bf311Sandvarppda: .equ 24 ; Physical Page Directory Address 242e978777bSfredette 243e978777bSfredettetr0: .equ 24 ; Temporary register 0 244e978777bSfredette 245e978777bSfredettecr25: .equ 25 246e978777bSfredette 247e978777bSfredettehta: .equ 25 ; Hash Table Address 248e978777bSfredette 249e978777bSfredettetr1: .equ 25 ; Temporary register 1 250e978777bSfredette 251e978777bSfredettecr26: .equ 26 252e978777bSfredette 253e978777bSfredettetr2: .equ 26 ; Temporary register 2 254e978777bSfredette 255e978777bSfredettecr27: .equ 27 256e978777bSfredette 257e978777bSfredettetr3: .equ 27 ; Temporary register 3 258e978777bSfredette 259e978777bSfredettecr28: .equ 28 260e978777bSfredette 261e978777bSfredettetr4: .equ 28 ; Temporary register 4 262e978777bSfredette 263e978777bSfredettecr29: .equ 29 264e978777bSfredette 265e978777bSfredettetr5: .equ 29 ; Temporary register 5 266e978777bSfredette 267e978777bSfredettecr30: .equ 30 268e978777bSfredette 269e978777bSfredettetr6: .equ 30 ; Temporary register 6 270e978777bSfredette 271e978777bSfredettecr31: .equ 31 272e978777bSfredette 273e978777bSfredettetr7: .equ 31 ; Temporary register 7 274e978777bSfredette 275e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 276e978777bSfredette; Procedure Call Convention ~ 277e978777bSfredette; Register Definitions for Use with Assembler ~ 278e978777bSfredette; version A.08.06 ~ 279e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 280e978777bSfredette; Software Architecture General Registers 281e978777bSfredetterp: .equ r2 ; return pointer 282e978777bSfredette 283e978777bSfredettemrp: .equ r31 ; millicode return pointer 284e978777bSfredette 285e978777bSfredetteret0: .equ r28 ; return value 286e978777bSfredette 287e978777bSfredetteret1: .equ r29 ; return value (high part of double) 288e978777bSfredette 289e978777bSfredettesl: .equ r29 ; static link 290e978777bSfredette 291e978777bSfredettesp: .equ r30 ; stack pointer 292e978777bSfredette 293e978777bSfredettedp: .equ r27 ; data pointer 294e978777bSfredette 295e978777bSfredettearg0: .equ r26 ; argument 296e978777bSfredette 297e978777bSfredettearg1: .equ r25 ; argument or high part of double argument 298e978777bSfredette 299e978777bSfredettearg2: .equ r24 ; argument 300e978777bSfredette 301e978777bSfredettearg3: .equ r23 ; argument or high part of double argument 302e978777bSfredette 303e978777bSfredette;_____________________________________________________________________________ 304e978777bSfredette; Software Architecture Space Registers 305e978777bSfredette; sr0 ; return link form BLE 306e978777bSfredettesret: .equ sr1 ; return value 307e978777bSfredette 308e978777bSfredettesarg: .equ sr1 ; argument 309e978777bSfredette 310e978777bSfredette; sr4 ; PC SPACE tracker 311e978777bSfredette; sr5 ; process private data 312e978777bSfredette;_____________________________________________________________________________ 313e978777bSfredette; Software Architecture Pseudo Registers 314e978777bSfredetteprevious_sp: .equ 64 ; old stack pointer (locates previous frame) 315e978777bSfredette 316e978777bSfredette;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 317e978777bSfredette; Standard space and subspace definitions. version A.08.06 318e978777bSfredette; These are generally suitable for programs on HP_UX and HPE. 319e978777bSfredette; Statements commented out are used when building such things as operating 320e978777bSfredette; system kernels. 321e978777bSfredette;;;;;;;;;;;;;;;; 322e978777bSfredette; Additional code subspaces should have ALIGN=8 for an interspace BV 323e978777bSfredette; and should have SORT=24. 324e978777bSfredette; 325e978777bSfredette; For an incomplete executable (program bound to shared libraries), 326e978777bSfredette; sort keys $GLOBAL$ -1 and $GLOBAL$ -2 are reserved for the $DLT$ 327e978777bSfredette; and $PLT$ subspaces respectively. 328e978777bSfredette;;;;;;;;;;;;;;; 329e978777bSfredette 330e978777bSfredette .text 331e978777bSfredette .EXPORT $$remI,millicode 332e978777bSfredette; .IMPORT cerror 333e978777bSfredette$$remI: 334e978777bSfredette .PROC 335e978777bSfredette .CALLINFO NO_CALLS 336e978777bSfredette .ENTRY 337e978777bSfredette addit,= 0,arg1,r0 338e978777bSfredette add,>= r0,arg0,ret1 339e978777bSfredette sub r0,ret1,ret1 340e978777bSfredette sub r0,arg1,r1 341e978777bSfredette ds r0,r1,r0 342e978777bSfredette or r0,r0,r1 343e978777bSfredette add ret1,ret1,ret1 344e978777bSfredette ds r1,arg1,r1 345e978777bSfredette addc ret1,ret1,ret1 346e978777bSfredette ds r1,arg1,r1 347e978777bSfredette addc ret1,ret1,ret1 348e978777bSfredette ds r1,arg1,r1 349e978777bSfredette addc ret1,ret1,ret1 350e978777bSfredette ds r1,arg1,r1 351e978777bSfredette addc ret1,ret1,ret1 352e978777bSfredette ds r1,arg1,r1 353e978777bSfredette addc ret1,ret1,ret1 354e978777bSfredette ds r1,arg1,r1 355e978777bSfredette addc ret1,ret1,ret1 356e978777bSfredette ds r1,arg1,r1 357e978777bSfredette addc ret1,ret1,ret1 358e978777bSfredette ds r1,arg1,r1 359e978777bSfredette addc ret1,ret1,ret1 360e978777bSfredette ds r1,arg1,r1 361e978777bSfredette addc ret1,ret1,ret1 362e978777bSfredette ds r1,arg1,r1 363e978777bSfredette addc ret1,ret1,ret1 364e978777bSfredette ds r1,arg1,r1 365e978777bSfredette addc ret1,ret1,ret1 366e978777bSfredette ds r1,arg1,r1 367e978777bSfredette addc ret1,ret1,ret1 368e978777bSfredette ds r1,arg1,r1 369e978777bSfredette addc ret1,ret1,ret1 370e978777bSfredette ds r1,arg1,r1 371e978777bSfredette addc ret1,ret1,ret1 372e978777bSfredette ds r1,arg1,r1 373e978777bSfredette addc ret1,ret1,ret1 374e978777bSfredette ds r1,arg1,r1 375e978777bSfredette addc ret1,ret1,ret1 376e978777bSfredette ds r1,arg1,r1 377e978777bSfredette addc ret1,ret1,ret1 378e978777bSfredette ds r1,arg1,r1 379e978777bSfredette addc ret1,ret1,ret1 380e978777bSfredette ds r1,arg1,r1 381e978777bSfredette addc ret1,ret1,ret1 382e978777bSfredette ds r1,arg1,r1 383e978777bSfredette addc ret1,ret1,ret1 384e978777bSfredette ds r1,arg1,r1 385e978777bSfredette addc ret1,ret1,ret1 386e978777bSfredette ds r1,arg1,r1 387e978777bSfredette addc ret1,ret1,ret1 388e978777bSfredette ds r1,arg1,r1 389e978777bSfredette addc ret1,ret1,ret1 390e978777bSfredette ds r1,arg1,r1 391e978777bSfredette addc ret1,ret1,ret1 392e978777bSfredette ds r1,arg1,r1 393e978777bSfredette addc ret1,ret1,ret1 394e978777bSfredette ds r1,arg1,r1 395e978777bSfredette addc ret1,ret1,ret1 396e978777bSfredette ds r1,arg1,r1 397e978777bSfredette addc ret1,ret1,ret1 398e978777bSfredette ds r1,arg1,r1 399e978777bSfredette addc ret1,ret1,ret1 400e978777bSfredette ds r1,arg1,r1 401e978777bSfredette addc ret1,ret1,ret1 402e978777bSfredette ds r1,arg1,r1 403e978777bSfredette addc ret1,ret1,ret1 404e978777bSfredette ds r1,arg1,r1 405e978777bSfredette addc ret1,ret1,ret1 406e978777bSfredette ds r1,arg1,r1 407e978777bSfredette addc ret1,ret1,ret1 408e978777bSfredette movb,>=,n r1,ret1,remI300 409e978777bSfredette add,< arg1,r0,r0 410e978777bSfredette add,tr r1,arg1,ret1 411e978777bSfredette sub r1,arg1,ret1 412e978777bSfredetteremI300: add,>= arg0,r0,r0 413e978777bSfredette 414e978777bSfredette sub r0,ret1,ret1 415e978777bSfredette bv r0(r31) 416e978777bSfredette nop 417e978777bSfredette .EXIT 418e978777bSfredette .PROCEND 419e978777bSfredette 420e978777bSfredettebit1: .equ 1 421e978777bSfredette 422e978777bSfredettebit30: .equ 30 423e978777bSfredettebit31: .equ 31 424e978777bSfredette 425e978777bSfredettelen2: .equ 2 426e978777bSfredette 427e978777bSfredettelen4: .equ 4 428e978777bSfredette 429e978777bSfredette#if 0 430e978777bSfredette$$dyncall: 431e978777bSfredette .proc 432e978777bSfredette .callinfo NO_CALLS 433e978777bSfredette .export $$dyncall,MILLICODE 434e978777bSfredette 435e978777bSfredette bb,>=,n 22,bit30,noshlibs 436e978777bSfredette 437e978777bSfredette depi 0,bit31,len2,22 438e978777bSfredette ldw 4(22),19 439e978777bSfredette ldw 0(22),22 440e978777bSfredettenoshlibs: 441e978777bSfredette ldsid (22),r1 442e978777bSfredette mtsp r1,sr0 443e978777bSfredette be 0(sr0,r22) 444e978777bSfredette stw rp,-24(sp) 445e978777bSfredette .procend 446e978777bSfredette 447e978777bSfredette$$sh_func_adrs: 448e978777bSfredette .proc 449e978777bSfredette .callinfo NO_CALLS 450e978777bSfredette .export $$sh_func_adrs, millicode 451e978777bSfredette ldo 0(r26),ret1 452e978777bSfredette dep r0,30,1,r26 453e978777bSfredette probew (r26),r31,r22 454e978777bSfredette extru,= r22,31,1,r22 455e978777bSfredette bv r0(r31) 456e978777bSfredette ldws 0(r26),ret1 457e978777bSfredette .procend 458*8ad5b80dSskrll#endif 459e978777bSfredette 460e978777bSfredettetemp: .EQU r1 461e978777bSfredette 462e978777bSfredetteretreg: .EQU ret1 ; r29 463e978777bSfredette 464e978777bSfredette .export $$divU,millicode 465e978777bSfredette .import $$divU_3,millicode 466e978777bSfredette .import $$divU_5,millicode 467e978777bSfredette .import $$divU_6,millicode 468e978777bSfredette .import $$divU_7,millicode 469e978777bSfredette .import $$divU_9,millicode 470e978777bSfredette .import $$divU_10,millicode 471e978777bSfredette .import $$divU_12,millicode 472e978777bSfredette .import $$divU_14,millicode 473e978777bSfredette .import $$divU_15,millicode 474e978777bSfredette$$divU: 475e978777bSfredette .proc 476e978777bSfredette .callinfo NO_CALLS 477e978777bSfredette; The subtract is not nullified since it does no harm and can be used 478e978777bSfredette; by the two cases that branch back to "normal". 479e978777bSfredette comib,>= 15,arg1,special_divisor 480e978777bSfredette sub r0,arg1,temp ; clear carry, negate the divisor 481e978777bSfredette ds r0,temp,r0 ; set V-bit to 1 482e978777bSfredettenormal: 483e978777bSfredette add arg0,arg0,retreg ; shift msb bit into carry 484e978777bSfredette ds r0,arg1,temp ; 1st divide step, if no carry 485e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 486e978777bSfredette ds temp,arg1,temp ; 2nd divide step 487e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 488e978777bSfredette ds temp,arg1,temp ; 3rd divide step 489e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 490e978777bSfredette ds temp,arg1,temp ; 4th divide step 491e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 492e978777bSfredette ds temp,arg1,temp ; 5th divide step 493e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 494e978777bSfredette ds temp,arg1,temp ; 6th divide step 495e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 496e978777bSfredette ds temp,arg1,temp ; 7th divide step 497e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 498e978777bSfredette ds temp,arg1,temp ; 8th divide step 499e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 500e978777bSfredette ds temp,arg1,temp ; 9th divide step 501e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 502e978777bSfredette ds temp,arg1,temp ; 10th divide step 503e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 504e978777bSfredette ds temp,arg1,temp ; 11th divide step 505e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 506e978777bSfredette ds temp,arg1,temp ; 12th divide step 507e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 508e978777bSfredette ds temp,arg1,temp ; 13th divide step 509e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 510e978777bSfredette ds temp,arg1,temp ; 14th divide step 511e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 512e978777bSfredette ds temp,arg1,temp ; 15th divide step 513e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 514e978777bSfredette ds temp,arg1,temp ; 16th divide step 515e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 516e978777bSfredette ds temp,arg1,temp ; 17th divide step 517e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 518e978777bSfredette ds temp,arg1,temp ; 18th divide step 519e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 520e978777bSfredette ds temp,arg1,temp ; 19th divide step 521e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 522e978777bSfredette ds temp,arg1,temp ; 20th divide step 523e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 524e978777bSfredette ds temp,arg1,temp ; 21st divide step 525e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 526e978777bSfredette ds temp,arg1,temp ; 22nd divide step 527e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 528e978777bSfredette ds temp,arg1,temp ; 23rd divide step 529e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 530e978777bSfredette ds temp,arg1,temp ; 24th divide step 531e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 532e978777bSfredette ds temp,arg1,temp ; 25th divide step 533e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 534e978777bSfredette ds temp,arg1,temp ; 26th divide step 535e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 536e978777bSfredette ds temp,arg1,temp ; 27th divide step 537e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 538e978777bSfredette ds temp,arg1,temp ; 28th divide step 539e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 540e978777bSfredette ds temp,arg1,temp ; 29th divide step 541e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 542e978777bSfredette ds temp,arg1,temp ; 30th divide step 543e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 544e978777bSfredette ds temp,arg1,temp ; 31st divide step 545e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 546e978777bSfredette ds temp,arg1,temp ; 32nd divide step, 547e978777bSfredette bv 0(r31) 548e978777bSfredette addc retreg,retreg,retreg ; shift last retreg bit into retreg 549e978777bSfredette;_____________________________________________________________________________ 550e978777bSfredette; handle the cases where divisor is a small constant or has high bit on 551e978777bSfredettespecial_divisor: 552e978777bSfredette blr arg1,r0 553e978777bSfredette comib,>,n 0,arg1,big_divisor ; nullify previous instruction 554e978777bSfredettezero_divisor: ; this label is here to provide external visibility 555e978777bSfredette 556e978777bSfredette addit,= 0,arg1,0 ; trap for zero dvr 557e978777bSfredette nop 558e978777bSfredette bv 0(r31) ; divisor == 1 559e978777bSfredette copy arg0,retreg 560e978777bSfredette bv 0(r31) ; divisor == 2 561e978777bSfredette extru arg0,30,31,retreg 562e978777bSfredette b,n $$divU_3 ; divisor == 3 563e978777bSfredette nop 564e978777bSfredette bv 0(r31) ; divisor == 4 565e978777bSfredette extru arg0,29,30,retreg 566e978777bSfredette b,n $$divU_5 ; divisor == 5 567e978777bSfredette nop 568e978777bSfredette b,n $$divU_6 ; divisor == 6 569e978777bSfredette nop 570e978777bSfredette b,n $$divU_7 ; divisor == 7 571e978777bSfredette nop 572e978777bSfredette bv 0(r31) ; divisor == 8 573e978777bSfredette extru arg0,28,29,retreg 574e978777bSfredette b,n $$divU_9 ; divisor == 9 575e978777bSfredette nop 576e978777bSfredette b,n $$divU_10 ; divisor == 10 577e978777bSfredette nop 578e978777bSfredette b normal ; divisor == 11 579e978777bSfredette ds r0,temp,r0 ; set V-bit to 1 580e978777bSfredette b,n $$divU_12 ; divisor == 12 581e978777bSfredette nop 582e978777bSfredette b normal ; divisor == 13 583e978777bSfredette ds r0,temp,r0 ; set V-bit to 1 584e978777bSfredette b,n $$divU_14 ; divisor == 14 585e978777bSfredette nop 586e978777bSfredette b,n $$divU_15 ; divisor == 15 587e978777bSfredette nop 588e978777bSfredette;_____________________________________________________________________________ 589e978777bSfredette; Handle the case where the high bit is on in the divisor. 590e978777bSfredette; Compute: if( dividend>=divisor) quotient=1; else quotient=0; 591e978777bSfredette; Note: dividend>==divisor iff dividend-divisor does not borrow 592e978777bSfredette; and not borrow iff carry 593e978777bSfredettebig_divisor: 594e978777bSfredette sub arg0,arg1,r0 595e978777bSfredette bv 0(r31) 596e978777bSfredette addc r0,r0,retreg 597e978777bSfredette .procend 598e978777bSfredette .end 599e978777bSfredette 600e978777bSfredettet2: .EQU r1 601e978777bSfredette 602e978777bSfredette; x2 .EQU arg0 ; r26 603e978777bSfredettet1: .EQU arg1 ; r25 604e978777bSfredette 605e978777bSfredette; x1 .EQU ret1 ; r29 606e978777bSfredette;_____________________________________________________________________________ 607e978777bSfredette 608e978777bSfredette$$divide_by_constant: 609e978777bSfredette .PROC 610e978777bSfredette .CALLINFO NO_CALLS 611e978777bSfredette .export $$divide_by_constant,millicode 612e978777bSfredette; Provides a "nice" label for the code covered by the unwind descriptor 613e978777bSfredette; for things like gprof. 614e978777bSfredette 615e978777bSfredette$$divI_2: 616e978777bSfredette .EXPORT $$divI_2,MILLICODE 617e978777bSfredette COMCLR,>= arg0,0,0 618e978777bSfredette ADDI 1,arg0,arg0 619e978777bSfredette bv 0(r31) 620e978777bSfredette EXTRS arg0,30,31,ret1 621e978777bSfredette 622e978777bSfredette$$divI_4: 623e978777bSfredette .EXPORT $$divI_4,MILLICODE 624e978777bSfredette COMCLR,>= arg0,0,0 625e978777bSfredette ADDI 3,arg0,arg0 626e978777bSfredette bv 0(r31) 627e978777bSfredette EXTRS arg0,29,30,ret1 628e978777bSfredette 629e978777bSfredette$$divI_8: 630e978777bSfredette .EXPORT $$divI_8,MILLICODE 631e978777bSfredette COMCLR,>= arg0,0,0 632e978777bSfredette ADDI 7,arg0,arg0 633e978777bSfredette bv 0(r31) 634e978777bSfredette EXTRS arg0,28,29,ret1 635e978777bSfredette 636e978777bSfredette$$divI_16: 637e978777bSfredette .EXPORT $$divI_16,MILLICODE 638e978777bSfredette COMCLR,>= arg0,0,0 639e978777bSfredette ADDI 15,arg0,arg0 640e978777bSfredette bv 0(r31) 641e978777bSfredette EXTRS arg0,27,28,ret1 642e978777bSfredette 643e978777bSfredette$$divI_3: 644e978777bSfredette .EXPORT $$divI_3,MILLICODE 645e978777bSfredette COMB,<,N arg0,0,$neg3 646e978777bSfredette 647e978777bSfredette ADDI 1,arg0,arg0 648e978777bSfredette EXTRU arg0,1,2,ret1 649e978777bSfredette SH2ADD arg0,arg0,arg0 650e978777bSfredette B $pos 651e978777bSfredette ADDC ret1,0,ret1 652e978777bSfredette 653e978777bSfredette$neg3: 654e978777bSfredette SUBI 1,arg0,arg0 655e978777bSfredette EXTRU arg0,1,2,ret1 656e978777bSfredette SH2ADD arg0,arg0,arg0 657e978777bSfredette B $neg 658e978777bSfredette ADDC ret1,0,ret1 659e978777bSfredette 660e978777bSfredette$$divU_3: 661e978777bSfredette .EXPORT $$divU_3,MILLICODE 662e978777bSfredette ADDI 1,arg0,arg0 663e978777bSfredette ADDC 0,0,ret1 664e978777bSfredette SHD ret1,arg0,30,t1 665e978777bSfredette SH2ADD arg0,arg0,arg0 666e978777bSfredette B $pos 667e978777bSfredette ADDC ret1,t1,ret1 668e978777bSfredette 669e978777bSfredette$$divI_5: 670e978777bSfredette .EXPORT $$divI_5,MILLICODE 671e978777bSfredette COMB,<,N arg0,0,$neg5 672e978777bSfredette ADDI 3,arg0,t1 673e978777bSfredette SH1ADD arg0,t1,arg0 674e978777bSfredette B $pos 675e978777bSfredette ADDC 0,0,ret1 676e978777bSfredette 677e978777bSfredette$neg5: 678e978777bSfredette SUB 0,arg0,arg0 679e978777bSfredette ADDI 1,arg0,arg0 680e978777bSfredette SHD 0,arg0,31,ret1 681e978777bSfredette SH1ADD arg0,arg0,arg0 682e978777bSfredette B $neg 683e978777bSfredette ADDC ret1,0,ret1 684e978777bSfredette 685e978777bSfredette$$divU_5: 686e978777bSfredette .EXPORT $$divU_5,MILLICODE 687e978777bSfredette ADDI 1,arg0,arg0 688e978777bSfredette ADDC 0,0,ret1 689e978777bSfredette SHD ret1,arg0,31,t1 690e978777bSfredette SH1ADD arg0,arg0,arg0 691e978777bSfredette B $pos 692e978777bSfredette ADDC t1,ret1,ret1 693e978777bSfredette 694e978777bSfredette$$divI_6: 695e978777bSfredette .EXPORT $$divI_6,MILLICODE 696e978777bSfredette COMB,<,N arg0,0,$neg6 697e978777bSfredette EXTRU arg0,30,31,arg0 698e978777bSfredette ADDI 5,arg0,t1 699e978777bSfredette SH2ADD arg0,t1,arg0 700e978777bSfredette B $pos 701e978777bSfredette ADDC 0,0,ret1 702e978777bSfredette 703e978777bSfredette$neg6: 704e978777bSfredette SUBI 2,arg0,arg0 705e978777bSfredette EXTRU arg0,30,31,arg0 706e978777bSfredette SHD 0,arg0,30,ret1 707e978777bSfredette SH2ADD arg0,arg0,arg0 708e978777bSfredette B $neg 709e978777bSfredette ADDC ret1,0,ret1 710e978777bSfredette 711e978777bSfredette$$divU_6: 712e978777bSfredette .EXPORT $$divU_6,MILLICODE 713e978777bSfredette EXTRU arg0,30,31,arg0 714e978777bSfredette ADDI 1,arg0,arg0 715e978777bSfredette SHD 0,arg0,30,ret1 716e978777bSfredette SH2ADD arg0,arg0,arg0 717e978777bSfredette B $pos 718e978777bSfredette ADDC ret1,0,ret1 719e978777bSfredette 720e978777bSfredette$$divU_10: 721e978777bSfredette .EXPORT $$divU_10,MILLICODE 722e978777bSfredette EXTRU arg0,30,31,arg0 723e978777bSfredette ADDI 3,arg0,t1 724e978777bSfredette SH1ADD arg0,t1,arg0 725e978777bSfredette ADDC 0,0,ret1 726e978777bSfredette$pos: 727e978777bSfredette SHD ret1,arg0,28,t1 728e978777bSfredette SHD arg0,0,28,t2 729e978777bSfredette ADD arg0,t2,arg0 730e978777bSfredette ADDC ret1,t1,ret1 731e978777bSfredette$pos_for_17: 732e978777bSfredette SHD ret1,arg0,24,t1 733e978777bSfredette SHD arg0,0,24,t2 734e978777bSfredette ADD arg0,t2,arg0 735e978777bSfredette ADDC ret1,t1,ret1 736e978777bSfredette 737e978777bSfredette SHD ret1,arg0,16,t1 738e978777bSfredette SHD arg0,0,16,t2 739e978777bSfredette ADD arg0,t2,arg0 740e978777bSfredette bv 0(r31) 741e978777bSfredette ADDC ret1,t1,ret1 742e978777bSfredette 743e978777bSfredette$$divI_10: 744e978777bSfredette .EXPORT $$divI_10,MILLICODE 745e978777bSfredette COMB,< arg0,0,$neg10 746e978777bSfredette COPY 0,ret1 747e978777bSfredette EXTRU arg0,30,31,arg0 748e978777bSfredette ADDIB,TR 1,arg0,$pos 749e978777bSfredette SH1ADD arg0,arg0,arg0 750e978777bSfredette 751e978777bSfredette$neg10: 752e978777bSfredette SUBI 2,arg0,arg0 753e978777bSfredette EXTRU arg0,30,31,arg0 754e978777bSfredette SH1ADD arg0,arg0,arg0 755e978777bSfredette$neg: 756e978777bSfredette SHD ret1,arg0,28,t1 757e978777bSfredette SHD arg0,0,28,t2 758e978777bSfredette ADD arg0,t2,arg0 759e978777bSfredette ADDC ret1,t1,ret1 760e978777bSfredette$neg_for_17: 761e978777bSfredette SHD ret1,arg0,24,t1 762e978777bSfredette SHD arg0,0,24,t2 763e978777bSfredette ADD arg0,t2,arg0 764e978777bSfredette ADDC ret1,t1,ret1 765e978777bSfredette 766e978777bSfredette SHD ret1,arg0,16,t1 767e978777bSfredette SHD arg0,0,16,t2 768e978777bSfredette ADD arg0,t2,arg0 769e978777bSfredette ADDC ret1,t1,ret1 770e978777bSfredette bv 0(r31) 771e978777bSfredette SUB 0,ret1,ret1 772e978777bSfredette 773e978777bSfredette$$divI_12: 774e978777bSfredette .EXPORT $$divI_12,MILLICODE 775e978777bSfredette COMB,< arg0,0,$neg12 776e978777bSfredette COPY 0,ret1 777e978777bSfredette EXTRU arg0,29,30,arg0 778e978777bSfredette ADDIB,TR 1,arg0,$pos 779e978777bSfredette SH2ADD arg0,arg0,arg0 780e978777bSfredette 781e978777bSfredette$neg12: 782e978777bSfredette SUBI 4,arg0,arg0 783e978777bSfredette EXTRU arg0,29,30,arg0 784e978777bSfredette B $neg 785e978777bSfredette SH2ADD arg0,arg0,arg0 786e978777bSfredette 787e978777bSfredette$$divU_12: 788e978777bSfredette .EXPORT $$divU_12,MILLICODE 789e978777bSfredette EXTRU arg0,29,30,arg0 790e978777bSfredette ADDI 5,arg0,t1 791e978777bSfredette SH2ADD arg0,t1,arg0 792e978777bSfredette B $pos 793e978777bSfredette ADDC 0,0,ret1 794e978777bSfredette 795e978777bSfredette$$divI_15: 796e978777bSfredette .EXPORT $$divI_15,MILLICODE 797e978777bSfredette COMB,< arg0,0,$neg15 798e978777bSfredette COPY 0,ret1 799e978777bSfredette ADDIB,TR 1,arg0,$pos+4 800e978777bSfredette SHD ret1,arg0,28,t1 801e978777bSfredette 802e978777bSfredette$neg15: 803e978777bSfredette B $neg 804e978777bSfredette SUBI 1,arg0,arg0 805e978777bSfredette 806e978777bSfredette$$divU_15: 807e978777bSfredette .EXPORT $$divU_15,MILLICODE 808e978777bSfredette ADDI 1,arg0,arg0 809e978777bSfredette B $pos 810e978777bSfredette ADDC 0,0,ret1 811e978777bSfredette 812e978777bSfredette$$divI_17: 813e978777bSfredette .EXPORT $$divI_17,MILLICODE 814e978777bSfredette COMB,<,N arg0,0,$neg17 815e978777bSfredette ADDI 1,arg0,arg0 816e978777bSfredette SHD 0,arg0,28,t1 817e978777bSfredette SHD arg0,0,28,t2 818e978777bSfredette SUB t2,arg0,arg0 819e978777bSfredette B $pos_for_17 820e978777bSfredette SUBB t1,0,ret1 821e978777bSfredette 822e978777bSfredette$neg17: 823e978777bSfredette SUBI 1,arg0,arg0 824e978777bSfredette SHD 0,arg0,28,t1 825e978777bSfredette SHD arg0,0,28,t2 826e978777bSfredette SUB t2,arg0,arg0 827e978777bSfredette B $neg_for_17 828e978777bSfredette SUBB t1,0,ret1 829e978777bSfredette 830e978777bSfredette$$divU_17: 831e978777bSfredette .EXPORT $$divU_17,MILLICODE 832e978777bSfredette ADDI 1,arg0,arg0 833e978777bSfredette ADDC 0,0,ret1 834e978777bSfredette SHD ret1,arg0,28,t1 835e978777bSfredette$u17: 836e978777bSfredette SHD arg0,0,28,t2 837e978777bSfredette SUB t2,arg0,arg0 838e978777bSfredette B $pos_for_17 839e978777bSfredette SUBB t1,ret1,ret1 840e978777bSfredette 841e978777bSfredette$$divI_7: 842e978777bSfredette .EXPORT $$divI_7,MILLICODE 843e978777bSfredette COMB,<,N arg0,0,$neg7 844e978777bSfredette$7: 845e978777bSfredette ADDI 1,arg0,arg0 846e978777bSfredette SHD 0,arg0,29,ret1 847e978777bSfredette SH3ADD arg0,arg0,arg0 848e978777bSfredette ADDC ret1,0,ret1 849e978777bSfredette$pos7: 850e978777bSfredette SHD ret1,arg0,26,t1 851e978777bSfredette SHD arg0,0,26,t2 852e978777bSfredette ADD arg0,t2,arg0 853e978777bSfredette ADDC ret1,t1,ret1 854e978777bSfredette 855e978777bSfredette SHD ret1,arg0,20,t1 856e978777bSfredette SHD arg0,0,20,t2 857e978777bSfredette ADD arg0,t2,arg0 858e978777bSfredette ADDC ret1,t1,t1 859e978777bSfredette 860e978777bSfredette COPY 0,ret1 861e978777bSfredette SHD,= t1,arg0,24,t1 862e978777bSfredette$1: 863e978777bSfredette ADDB,TR t1,ret1,$2 864e978777bSfredette EXTRU arg0,31,24,arg0 865e978777bSfredette 866e978777bSfredette bv,n 0(r31) 867e978777bSfredette 868e978777bSfredette$2: 869e978777bSfredette ADDB,TR t1,arg0,$1 870e978777bSfredette EXTRU,= arg0,7,8,t1 871e978777bSfredette 872e978777bSfredette$neg7: 873e978777bSfredette SUBI 1,arg0,arg0 874e978777bSfredette$8: 875e978777bSfredette SHD 0,arg0,29,ret1 876e978777bSfredette SH3ADD arg0,arg0,arg0 877e978777bSfredette ADDC ret1,0,ret1 878e978777bSfredette 879e978777bSfredette$neg7_shift: 880e978777bSfredette SHD ret1,arg0,26,t1 881e978777bSfredette SHD arg0,0,26,t2 882e978777bSfredette ADD arg0,t2,arg0 883e978777bSfredette ADDC ret1,t1,ret1 884e978777bSfredette 885e978777bSfredette SHD ret1,arg0,20,t1 886e978777bSfredette SHD arg0,0,20,t2 887e978777bSfredette ADD arg0,t2,arg0 888e978777bSfredette ADDC ret1,t1,t1 889e978777bSfredette 890e978777bSfredette COPY 0,ret1 891e978777bSfredette SHD,= t1,arg0,24,t1 892e978777bSfredette$3: 893e978777bSfredette ADDB,TR t1,ret1,$4 894e978777bSfredette EXTRU arg0,31,24,arg0 895e978777bSfredette 896e978777bSfredette bv 0(r31) 897e978777bSfredette SUB 0,ret1,ret1 898e978777bSfredette 899e978777bSfredette$4: 900e978777bSfredette ADDB,TR t1,arg0,$3 901e978777bSfredette EXTRU,= arg0,7,8,t1 902e978777bSfredette 903e978777bSfredette$$divU_7: 904e978777bSfredette .EXPORT $$divU_7,MILLICODE 905e978777bSfredette ADDI 1,arg0,arg0 906e978777bSfredette ADDC 0,0,ret1 907e978777bSfredette SHD ret1,arg0,29,t1 908e978777bSfredette SH3ADD arg0,arg0,arg0 909e978777bSfredette B $pos7 910e978777bSfredette ADDC t1,ret1,ret1 911e978777bSfredette 912e978777bSfredette$$divI_9: 913e978777bSfredette .EXPORT $$divI_9,MILLICODE 914e978777bSfredette COMB,<,N arg0,0,$neg9 915e978777bSfredette ADDI 1,arg0,arg0 916e978777bSfredette SHD 0,arg0,29,t1 917e978777bSfredette SHD arg0,0,29,t2 918e978777bSfredette SUB t2,arg0,arg0 919e978777bSfredette B $pos7 920e978777bSfredette SUBB t1,0,ret1 921e978777bSfredette 922e978777bSfredette$neg9: 923e978777bSfredette SUBI 1,arg0,arg0 924e978777bSfredette SHD 0,arg0,29,t1 925e978777bSfredette SHD arg0,0,29,t2 926e978777bSfredette SUB t2,arg0,arg0 927e978777bSfredette B $neg7_shift 928e978777bSfredette SUBB t1,0,ret1 929e978777bSfredette 930e978777bSfredette$$divU_9: 931e978777bSfredette .EXPORT $$divU_9,MILLICODE 932e978777bSfredette ADDI 1,arg0,arg0 933e978777bSfredette ADDC 0,0,ret1 934e978777bSfredette SHD ret1,arg0,29,t1 935e978777bSfredette SHD arg0,0,29,t2 936e978777bSfredette SUB t2,arg0,arg0 937e978777bSfredette B $pos7 938e978777bSfredette SUBB t1,ret1,ret1 939e978777bSfredette 940e978777bSfredette$$divI_14: 941e978777bSfredette .EXPORT $$divI_14,MILLICODE 942e978777bSfredette COMB,<,N arg0,0,$neg14 943e978777bSfredette$$divU_14: 944e978777bSfredette .EXPORT $$divU_14,MILLICODE 945e978777bSfredette B $7 946e978777bSfredette EXTRU arg0,30,31,arg0 947e978777bSfredette 948e978777bSfredette$neg14: 949e978777bSfredette SUBI 2,arg0,arg0 950e978777bSfredette B $8 951e978777bSfredette EXTRU arg0,30,31,arg0 952e978777bSfredette 953e978777bSfredette .PROCEND 954e978777bSfredette .END 955e978777bSfredette 956e978777bSfredettermndr: .EQU ret1 ; r29 957e978777bSfredette 958e978777bSfredette .export $$remU,millicode 959e978777bSfredette$$remU: 960e978777bSfredette .proc 961e978777bSfredette .callinfo NO_CALLS 962e978777bSfredette .entry 963e978777bSfredette 964e978777bSfredette comib,>=,n 0,arg1,special_case 965e978777bSfredette sub r0,arg1,rmndr ; clear carry, negate the divisor 966e978777bSfredette ds r0,rmndr,r0 ; set V-bit to 1 967e978777bSfredette add arg0,arg0,temp ; shift msb bit into carry 968e978777bSfredette ds r0,arg1,rmndr ; 1st divide step, if no carry 969e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 970e978777bSfredette ds rmndr,arg1,rmndr ; 2nd divide step 971e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 972e978777bSfredette ds rmndr,arg1,rmndr ; 3rd divide step 973e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 974e978777bSfredette ds rmndr,arg1,rmndr ; 4th divide step 975e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 976e978777bSfredette ds rmndr,arg1,rmndr ; 5th divide step 977e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 978e978777bSfredette ds rmndr,arg1,rmndr ; 6th divide step 979e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 980e978777bSfredette ds rmndr,arg1,rmndr ; 7th divide step 981e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 982e978777bSfredette ds rmndr,arg1,rmndr ; 8th divide step 983e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 984e978777bSfredette ds rmndr,arg1,rmndr ; 9th divide step 985e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 986e978777bSfredette ds rmndr,arg1,rmndr ; 10th divide step 987e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 988e978777bSfredette ds rmndr,arg1,rmndr ; 11th divide step 989e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 990e978777bSfredette ds rmndr,arg1,rmndr ; 12th divide step 991e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 992e978777bSfredette ds rmndr,arg1,rmndr ; 13th divide step 993e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 994e978777bSfredette ds rmndr,arg1,rmndr ; 14th divide step 995e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 996e978777bSfredette ds rmndr,arg1,rmndr ; 15th divide step 997e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 998e978777bSfredette ds rmndr,arg1,rmndr ; 16th divide step 999e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1000e978777bSfredette ds rmndr,arg1,rmndr ; 17th divide step 1001e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1002e978777bSfredette ds rmndr,arg1,rmndr ; 18th divide step 1003e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1004e978777bSfredette ds rmndr,arg1,rmndr ; 19th divide step 1005e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1006e978777bSfredette ds rmndr,arg1,rmndr ; 20th divide step 1007e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1008e978777bSfredette ds rmndr,arg1,rmndr ; 21st divide step 1009e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1010e978777bSfredette ds rmndr,arg1,rmndr ; 22nd divide step 1011e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1012e978777bSfredette ds rmndr,arg1,rmndr ; 23rd divide step 1013e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1014e978777bSfredette ds rmndr,arg1,rmndr ; 24th divide step 1015e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1016e978777bSfredette ds rmndr,arg1,rmndr ; 25th divide step 1017e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1018e978777bSfredette ds rmndr,arg1,rmndr ; 26th divide step 1019e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1020e978777bSfredette ds rmndr,arg1,rmndr ; 27th divide step 1021e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1022e978777bSfredette ds rmndr,arg1,rmndr ; 28th divide step 1023e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1024e978777bSfredette ds rmndr,arg1,rmndr ; 29th divide step 1025e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1026e978777bSfredette ds rmndr,arg1,rmndr ; 30th divide step 1027e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1028e978777bSfredette ds rmndr,arg1,rmndr ; 31st divide step 1029e978777bSfredette addc temp,temp,temp ; shift temp with/into carry 1030e978777bSfredette ds rmndr,arg1,rmndr ; 32nd divide step, 1031e978777bSfredette comiclr,<= 0,rmndr,r0 1032e978777bSfredette add rmndr,arg1,rmndr ; correction 1033e978777bSfredette; .exit 1034e978777bSfredette bv,n 0(r31) 1035e978777bSfredette nop 1036e978777bSfredette; Putting >= on the last DS and deleting COMICLR does not work! 1037e978777bSfredette;_____________________________________________________________________________ 1038e978777bSfredettespecial_case: 1039e978777bSfredette addit,= 0,arg1,r0 ; trap on div by zero 1040e978777bSfredette sub,>>= arg0,arg1,rmndr 1041e978777bSfredette copy arg0,rmndr 1042e978777bSfredette .exit 1043e978777bSfredette bv,n 0(r31) 1044e978777bSfredette nop 1045e978777bSfredette .procend 1046e978777bSfredette .end 1047e978777bSfredette 1048e978777bSfredette; Use bv 0(r31) and bv,n 0(r31) instead. 1049e978777bSfredette; #define return bv 0(%mrp) 1050e978777bSfredette; #define return_n bv,n 0(%mrp) 1051e978777bSfredette 1052e978777bSfredette .align 16 1053e978777bSfredette$$mulI: 1054e978777bSfredette 1055e978777bSfredette .proc 1056e978777bSfredette .callinfo NO_CALLS 1057e978777bSfredette .export $$mulI, millicode 1058e978777bSfredette combt,<<= %r25,%r26,l4 ; swap args if unsigned %r25>%r26 1059e978777bSfredette copy 0,%r29 ; zero out the result 1060e978777bSfredette xor %r26,%r25,%r26 ; swap %r26 & %r25 using the 1061e978777bSfredette xor %r26,%r25,%r25 ; old xor trick 1062e978777bSfredette xor %r26,%r25,%r26 1063e978777bSfredettel4: combt,<= 0,%r26,l3 ; if %r26>=0 then proceed like unsigned 1064e978777bSfredette 1065e978777bSfredette zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 ********* 1066e978777bSfredette sub,> 0,%r25,%r1 ; otherwise negate both and 1067e978777bSfredette combt,<=,n %r26,%r1,l2 ; swap back if |%r26|<|%r25| 1068e978777bSfredette sub 0,%r26,%r25 1069e978777bSfredette movb,tr,n %r1,%r26,l2 ; 10th inst. 1070e978777bSfredette 1071e978777bSfredettel0: add %r29,%r1,%r29 ; add in this partial product 1072e978777bSfredette 1073e978777bSfredettel1: zdep %r26,23,24,%r26 ; %r26 <<= 8 ****************** 1074e978777bSfredette 1075e978777bSfredettel2: zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 ********* 1076e978777bSfredette 1077e978777bSfredettel3: blr %r1,0 ; case on these 8 bits ****** 1078e978777bSfredette 1079e978777bSfredette extru %r25,23,24,%r25 ; %r25 >>= 8 ****************** 1080e978777bSfredette 1081e978777bSfredette;16 insts before this. 1082e978777bSfredette; %r26 <<= 8 ************************** 1083e978777bSfredettex0: comb,<> %r25,0,l2 ! zdep %r26,23,24,%r26 ! bv,n 0(r31) ! nop 1084e978777bSfredette 1085e978777bSfredettex1: comb,<> %r25,0,l1 ! add %r29,%r26,%r29 ! bv,n 0(r31) ! nop 1086e978777bSfredette 1087e978777bSfredettex2: comb,<> %r25,0,l1 ! sh1add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1088e978777bSfredette 1089e978777bSfredettex3: comb,<> %r25,0,l0 ! sh1add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1090e978777bSfredette 1091e978777bSfredettex4: comb,<> %r25,0,l1 ! sh2add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1092e978777bSfredette 1093e978777bSfredettex5: comb,<> %r25,0,l0 ! sh2add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1094e978777bSfredette 1095e978777bSfredettex6: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1096e978777bSfredette 1097e978777bSfredettex7: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r26,%r29,%r29 ! b,n ret_t0 1098e978777bSfredette 1099e978777bSfredettex8: comb,<> %r25,0,l1 ! sh3add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1100e978777bSfredette 1101e978777bSfredettex9: comb,<> %r25,0,l0 ! sh3add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1102e978777bSfredette 1103e978777bSfredettex10: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1104e978777bSfredette 1105e978777bSfredettex11: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0 1106e978777bSfredette 1107e978777bSfredettex12: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1108e978777bSfredette 1109e978777bSfredettex13: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0 1110e978777bSfredette 1111e978777bSfredettex14: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1112e978777bSfredette 1113e978777bSfredettex15: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r1,%r1 ! b,n ret_t0 1114e978777bSfredette 1115e978777bSfredettex16: zdep %r26,27,28,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1116e978777bSfredette 1117e978777bSfredettex17: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r1,%r1 ! b,n ret_t0 1118e978777bSfredette 1119e978777bSfredettex18: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1120e978777bSfredette 1121e978777bSfredettex19: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r26,%r1 ! b,n ret_t0 1122e978777bSfredette 1123e978777bSfredettex20: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1124e978777bSfredette 1125e978777bSfredettex21: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1126e978777bSfredette 1127e978777bSfredettex22: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1128e978777bSfredette 1129e978777bSfredettex23: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1130e978777bSfredette 1131e978777bSfredettex24: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1132e978777bSfredette 1133e978777bSfredettex25: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0 1134e978777bSfredette 1135e978777bSfredettex26: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1136e978777bSfredette 1137e978777bSfredettex27: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r1,%r1 ! b,n ret_t0 1138e978777bSfredette 1139e978777bSfredettex28: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1140e978777bSfredette 1141e978777bSfredettex29: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1142e978777bSfredette 1143e978777bSfredettex30: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1144e978777bSfredette 1145e978777bSfredettex31: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1146e978777bSfredette 1147e978777bSfredettex32: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1148e978777bSfredette 1149e978777bSfredettex33: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1150e978777bSfredette 1151e978777bSfredettex34: zdep %r26,27,28,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1152e978777bSfredette 1153e978777bSfredettex35: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r26,%r1,%r1 1154e978777bSfredette 1155e978777bSfredettex36: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1156e978777bSfredette 1157e978777bSfredettex37: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1158e978777bSfredette 1159e978777bSfredettex38: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1160e978777bSfredette 1161e978777bSfredettex39: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1162e978777bSfredette 1163e978777bSfredettex40: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1164e978777bSfredette 1165e978777bSfredettex41: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0 1166e978777bSfredette 1167e978777bSfredettex42: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1168e978777bSfredette 1169e978777bSfredettex43: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1170e978777bSfredette 1171e978777bSfredettex44: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1172e978777bSfredette 1173e978777bSfredettex45: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0 1174e978777bSfredette 1175e978777bSfredettex46: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! add %r1,%r26,%r1 1176e978777bSfredette 1177e978777bSfredettex47: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1178e978777bSfredette 1179e978777bSfredettex48: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! zdep %r1,27,28,%r1 ! b,n ret_t0 1180e978777bSfredette 1181e978777bSfredettex49: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r26,%r1,%r1 1182e978777bSfredette 1183e978777bSfredettex50: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1184e978777bSfredette 1185e978777bSfredettex51: sh3add %r26,%r26,%r1 ! sh3add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1186e978777bSfredette 1187e978777bSfredettex52: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1188e978777bSfredette 1189e978777bSfredettex53: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1190e978777bSfredette 1191e978777bSfredettex54: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1192e978777bSfredette 1193e978777bSfredettex55: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1194e978777bSfredette 1195e978777bSfredettex56: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1196e978777bSfredette 1197e978777bSfredettex57: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1198e978777bSfredette 1199e978777bSfredettex58: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1200e978777bSfredette 1201e978777bSfredettex59: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1202e978777bSfredette 1203e978777bSfredettex60: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1204e978777bSfredette 1205e978777bSfredettex61: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1206e978777bSfredette 1207e978777bSfredettex62: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1208e978777bSfredette 1209e978777bSfredettex63: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1210e978777bSfredette 1211e978777bSfredettex64: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1212e978777bSfredette 1213e978777bSfredettex65: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0 1214e978777bSfredette 1215e978777bSfredettex66: zdep %r26,26,27,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1216e978777bSfredette 1217e978777bSfredettex67: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1218e978777bSfredette 1219e978777bSfredettex68: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1220e978777bSfredette 1221e978777bSfredettex69: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1222e978777bSfredette 1223e978777bSfredettex70: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1224e978777bSfredette 1225e978777bSfredettex71: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1226e978777bSfredette 1227e978777bSfredettex72: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1228e978777bSfredette 1229e978777bSfredettex73: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! add %r29,%r1,%r29 1230e978777bSfredette 1231e978777bSfredettex74: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1232e978777bSfredette 1233e978777bSfredettex75: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1234e978777bSfredette 1235e978777bSfredettex76: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1236e978777bSfredette 1237e978777bSfredettex77: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1238e978777bSfredette 1239e978777bSfredettex78: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1240e978777bSfredette 1241e978777bSfredettex79: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1242e978777bSfredette 1243e978777bSfredettex80: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29 1244e978777bSfredette 1245e978777bSfredettex81: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29 1246e978777bSfredette 1247e978777bSfredettex82: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1248e978777bSfredette 1249e978777bSfredettex83: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1250e978777bSfredette 1251e978777bSfredettex84: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1252e978777bSfredette 1253e978777bSfredettex85: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1254e978777bSfredette 1255e978777bSfredettex86: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1256e978777bSfredette 1257e978777bSfredettex87: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r26,%r1,%r1 1258e978777bSfredette 1259e978777bSfredettex88: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1260e978777bSfredette 1261e978777bSfredettex89: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1262e978777bSfredette 1263e978777bSfredettex90: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1264e978777bSfredette 1265e978777bSfredettex91: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1266e978777bSfredette 1267e978777bSfredettex92: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1268e978777bSfredette 1269e978777bSfredettex93: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1270e978777bSfredette 1271e978777bSfredettex94: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r26,%r1,%r1 1272e978777bSfredette 1273e978777bSfredettex95: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1274e978777bSfredette 1275e978777bSfredettex96: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1276e978777bSfredette 1277e978777bSfredettex97: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1278e978777bSfredette 1279e978777bSfredettex98: zdep %r26,26,27,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1280e978777bSfredette 1281e978777bSfredettex99: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1282e978777bSfredette 1283e978777bSfredettex100: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1284e978777bSfredette 1285e978777bSfredettex101: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1286e978777bSfredette 1287e978777bSfredettex102: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1288e978777bSfredette 1289e978777bSfredettex103: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r26,%r1 1290e978777bSfredette 1291e978777bSfredettex104: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1292e978777bSfredette 1293e978777bSfredettex105: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1294e978777bSfredette 1295e978777bSfredettex106: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1296e978777bSfredette 1297e978777bSfredettex107: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh3add %r1,%r26,%r1 1298e978777bSfredette 1299e978777bSfredettex108: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1300e978777bSfredette 1301e978777bSfredettex109: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1302e978777bSfredette 1303e978777bSfredettex110: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1304e978777bSfredette 1305e978777bSfredettex111: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1306e978777bSfredette 1307e978777bSfredettex112: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! zdep %r1,27,28,%r1 1308e978777bSfredette 1309e978777bSfredettex113: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1310e978777bSfredette 1311e978777bSfredettex114: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1312e978777bSfredette 1313e978777bSfredettex115: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1314e978777bSfredette 1315e978777bSfredettex116: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1316e978777bSfredette 1317e978777bSfredettex117: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1318e978777bSfredette 1319e978777bSfredettex118: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0a0 ! sh3add %r1,%r1,%r1 1320e978777bSfredette 1321e978777bSfredettex119: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1 1322e978777bSfredette 1323e978777bSfredettex120: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1324e978777bSfredette 1325e978777bSfredettex121: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1326e978777bSfredette 1327e978777bSfredettex122: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1328e978777bSfredette 1329e978777bSfredettex123: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1330e978777bSfredette 1331e978777bSfredettex124: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1332e978777bSfredette 1333e978777bSfredettex125: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1334e978777bSfredette 1335e978777bSfredettex126: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1336e978777bSfredette 1337e978777bSfredettex127: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1338e978777bSfredette 1339e978777bSfredettex128: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1340e978777bSfredette 1341e978777bSfredettex129: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! add %r1,%r26,%r1 ! b,n ret_t0 1342e978777bSfredette 1343e978777bSfredettex130: zdep %r26,25,26,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1344e978777bSfredette 1345e978777bSfredettex131: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1346e978777bSfredette 1347e978777bSfredettex132: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1348e978777bSfredette 1349e978777bSfredettex133: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1350e978777bSfredette 1351e978777bSfredettex134: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1352e978777bSfredette 1353e978777bSfredettex135: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1354e978777bSfredette 1355e978777bSfredettex136: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1356e978777bSfredette 1357e978777bSfredettex137: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1358e978777bSfredette 1359e978777bSfredettex138: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1360e978777bSfredette 1361e978777bSfredettex139: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1 1362e978777bSfredette 1363e978777bSfredettex140: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r1,%r1 1364e978777bSfredette 1365e978777bSfredettex141: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1366e978777bSfredette 1367e978777bSfredettex142: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_2t0 ! sub %r1,%r26,%r1 1368e978777bSfredette 1369e978777bSfredettex143: zdep %r26,27,28,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1370e978777bSfredette 1371e978777bSfredettex144: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1372e978777bSfredette 1373e978777bSfredettex145: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1374e978777bSfredette 1375e978777bSfredettex146: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1376e978777bSfredette 1377e978777bSfredettex147: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1378e978777bSfredette 1379e978777bSfredettex148: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1380e978777bSfredette 1381e978777bSfredettex149: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1382e978777bSfredette 1383e978777bSfredettex150: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1384e978777bSfredette 1385e978777bSfredettex151: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1386e978777bSfredette 1387e978777bSfredettex152: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1388e978777bSfredette 1389e978777bSfredettex153: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1390e978777bSfredette 1391e978777bSfredettex154: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1392e978777bSfredette 1393e978777bSfredettex155: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1394e978777bSfredette 1395e978777bSfredettex156: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1396e978777bSfredette 1397e978777bSfredettex157: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1398e978777bSfredette 1399e978777bSfredettex158: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sub %r1,%r26,%r1 1400e978777bSfredette 1401e978777bSfredettex159: zdep %r26,26,27,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1402e978777bSfredette 1403e978777bSfredettex160: sh2add %r26,%r26,%r1 ! sh2add %r1,0,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1404e978777bSfredette 1405e978777bSfredettex161: sh3add %r26,0,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1406e978777bSfredette 1407e978777bSfredettex162: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1408e978777bSfredette 1409e978777bSfredettex163: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1410e978777bSfredette 1411e978777bSfredettex164: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1412e978777bSfredette 1413e978777bSfredettex165: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1414e978777bSfredette 1415e978777bSfredettex166: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1416e978777bSfredette 1417e978777bSfredettex167: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1418e978777bSfredette 1419e978777bSfredettex168: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1420e978777bSfredette 1421e978777bSfredettex169: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1422e978777bSfredette 1423e978777bSfredettex170: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1424e978777bSfredette 1425e978777bSfredettex171: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1426e978777bSfredette 1427e978777bSfredettex172: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1428e978777bSfredette 1429e978777bSfredettex173: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1 1430e978777bSfredette 1431e978777bSfredettex174: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t04a0 ! sh2add %r1,%r1,%r1 1432e978777bSfredette 1433e978777bSfredettex175: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1434e978777bSfredette 1435e978777bSfredettex176: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1436e978777bSfredette 1437e978777bSfredettex177: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1 1438e978777bSfredette 1439e978777bSfredettex178: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1 1440e978777bSfredette 1441e978777bSfredettex179: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r26,%r1 1442e978777bSfredette 1443e978777bSfredettex180: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1444e978777bSfredette 1445e978777bSfredettex181: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1446e978777bSfredette 1447e978777bSfredettex182: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1448e978777bSfredette 1449e978777bSfredettex183: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1450e978777bSfredette 1451e978777bSfredettex184: sh2add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! add %r1,%r26,%r1 1452e978777bSfredette 1453e978777bSfredettex185: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1454e978777bSfredette 1455e978777bSfredettex186: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1456e978777bSfredette 1457e978777bSfredettex187: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1458e978777bSfredette 1459e978777bSfredettex188: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r26,%r1,%r1 1460e978777bSfredette 1461e978777bSfredettex189: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1462e978777bSfredette 1463e978777bSfredettex190: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1464e978777bSfredette 1465e978777bSfredettex191: zdep %r26,25,26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1466e978777bSfredette 1467e978777bSfredettex192: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1468e978777bSfredette 1469e978777bSfredettex193: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1470e978777bSfredette 1471e978777bSfredettex194: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1472e978777bSfredette 1473e978777bSfredettex195: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1474e978777bSfredette 1475e978777bSfredettex196: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1476e978777bSfredette 1477e978777bSfredettex197: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1478e978777bSfredette 1479e978777bSfredettex198: zdep %r26,25,26,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1480e978777bSfredette 1481e978777bSfredettex199: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1482e978777bSfredette 1483e978777bSfredettex200: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1484e978777bSfredette 1485e978777bSfredettex201: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1486e978777bSfredette 1487e978777bSfredettex202: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1488e978777bSfredette 1489e978777bSfredettex203: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1 1490e978777bSfredette 1491e978777bSfredettex204: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1 1492e978777bSfredette 1493e978777bSfredettex205: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1494e978777bSfredette 1495e978777bSfredettex206: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1496e978777bSfredette 1497e978777bSfredettex207: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1 1498e978777bSfredette 1499e978777bSfredettex208: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1500e978777bSfredette 1501e978777bSfredettex209: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1 1502e978777bSfredette 1503e978777bSfredettex210: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1504e978777bSfredette 1505e978777bSfredettex211: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1 1506e978777bSfredette 1507e978777bSfredettex212: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1508e978777bSfredette 1509e978777bSfredettex213: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0a0 ! sh2add %r1,%r26,%r1 1510e978777bSfredette 1511e978777bSfredettex214: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e2t04a0 ! sh3add %r1,%r26,%r1 1512e978777bSfredette 1513e978777bSfredettex215: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1514e978777bSfredette 1515e978777bSfredettex216: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1516e978777bSfredette 1517e978777bSfredettex217: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1518e978777bSfredette 1519e978777bSfredettex218: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1520e978777bSfredette 1521e978777bSfredettex219: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1522e978777bSfredette 1523e978777bSfredettex220: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1524e978777bSfredette 1525e978777bSfredettex221: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1526e978777bSfredette 1527e978777bSfredettex222: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1528e978777bSfredette 1529e978777bSfredettex223: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1530e978777bSfredette 1531e978777bSfredettex224: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1532e978777bSfredette 1533e978777bSfredettex225: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1534e978777bSfredette 1535e978777bSfredettex226: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! zdep %r1,26,27,%r1 1536e978777bSfredette 1537e978777bSfredettex227: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1538e978777bSfredette 1539e978777bSfredettex228: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1 1540e978777bSfredette 1541e978777bSfredettex229: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r1,%r1 1542e978777bSfredette 1543e978777bSfredettex230: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_5t0 ! add %r1,%r26,%r1 1544e978777bSfredette 1545e978777bSfredettex231: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1 1546e978777bSfredette 1547e978777bSfredettex232: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0 ! sh2add %r1,%r26,%r1 1548e978777bSfredette 1549e978777bSfredettex233: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0a0 ! sh2add %r1,%r26,%r1 1550e978777bSfredette 1551e978777bSfredettex234: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r1,%r1 1552e978777bSfredette 1553e978777bSfredettex235: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r1,%r1 1554e978777bSfredette 1555e978777bSfredettex236: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e4t08a0 ! sh1add %r1,%r1,%r1 1556e978777bSfredette 1557e978777bSfredettex237: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_3t0 ! sub %r1,%r26,%r1 1558e978777bSfredette 1559e978777bSfredettex238: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e2t04a0 ! sh3add %r1,%r1,%r1 1560e978777bSfredette 1561e978777bSfredettex239: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0ma0 ! sh1add %r1,%r1,%r1 1562e978777bSfredette 1563e978777bSfredettex240: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0 ! sh1add %r1,%r1,%r1 1564e978777bSfredette 1565e978777bSfredettex241: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0a0 ! sh1add %r1,%r1,%r1 1566e978777bSfredette 1567e978777bSfredettex242: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1 1568e978777bSfredette 1569e978777bSfredettex243: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1570e978777bSfredette 1571e978777bSfredettex244: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1572e978777bSfredette 1573e978777bSfredettex245: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1574e978777bSfredette 1575e978777bSfredettex246: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1576e978777bSfredette 1577e978777bSfredettex247: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1578e978777bSfredette 1579e978777bSfredettex248: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1580e978777bSfredette 1581e978777bSfredettex249: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1582e978777bSfredette 1583e978777bSfredettex250: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1584e978777bSfredette 1585e978777bSfredettex251: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1 1586e978777bSfredette 1587e978777bSfredettex252: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1588e978777bSfredette 1589e978777bSfredettex253: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1590e978777bSfredette 1591e978777bSfredettex254: zdep %r26,24,25,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1592e978777bSfredette 1593e978777bSfredettex255: zdep %r26,23,24,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1594e978777bSfredette 1595e978777bSfredette;1040 insts before this. 1596e978777bSfredetteret_t0: bv 0(r31) 1597e978777bSfredette 1598e978777bSfredettee_t0: add %r29,%r1,%r29 1599e978777bSfredette 1600e978777bSfredettee_shift: comb,<> %r25,0,l2 1601e978777bSfredette 1602e978777bSfredette zdep %r26,23,24,%r26 ; %r26 <<= 8 *********** 1603e978777bSfredette bv,n 0(r31) 1604e978777bSfredettee_t0ma0: comb,<> %r25,0,l0 1605e978777bSfredette 1606e978777bSfredette sub %r1,%r26,%r1 1607e978777bSfredette bv 0(r31) 1608e978777bSfredette add %r29,%r1,%r29 1609e978777bSfredettee_t0a0: comb,<> %r25,0,l0 1610e978777bSfredette 1611e978777bSfredette add %r1,%r26,%r1 1612e978777bSfredette bv 0(r31) 1613e978777bSfredette add %r29,%r1,%r29 1614e978777bSfredettee_t02a0: comb,<> %r25,0,l0 1615e978777bSfredette 1616e978777bSfredette sh1add %r26,%r1,%r1 1617e978777bSfredette bv 0(r31) 1618e978777bSfredette add %r29,%r1,%r29 1619e978777bSfredettee_t04a0: comb,<> %r25,0,l0 1620e978777bSfredette 1621e978777bSfredette sh2add %r26,%r1,%r1 1622e978777bSfredette bv 0(r31) 1623e978777bSfredette add %r29,%r1,%r29 1624e978777bSfredettee_2t0: comb,<> %r25,0,l1 1625e978777bSfredette 1626e978777bSfredette sh1add %r1,%r29,%r29 1627e978777bSfredette bv,n 0(r31) 1628e978777bSfredettee_2t0a0: comb,<> %r25,0,l0 1629e978777bSfredette 1630e978777bSfredette sh1add %r1,%r26,%r1 1631e978777bSfredette bv 0(r31) 1632e978777bSfredette add %r29,%r1,%r29 1633e978777bSfredettee2t04a0: sh1add %r26,%r1,%r1 1634e978777bSfredette 1635e978777bSfredette comb,<> %r25,0,l1 1636e978777bSfredette sh1add %r1,%r29,%r29 1637e978777bSfredette bv,n 0(r31) 1638e978777bSfredettee_3t0: comb,<> %r25,0,l0 1639e978777bSfredette 1640e978777bSfredette sh1add %r1,%r1,%r1 1641e978777bSfredette bv 0(r31) 1642e978777bSfredette add %r29,%r1,%r29 1643e978777bSfredettee_4t0: comb,<> %r25,0,l1 1644e978777bSfredette 1645e978777bSfredette sh2add %r1,%r29,%r29 1646e978777bSfredette bv,n 0(r31) 1647e978777bSfredettee_4t0a0: comb,<> %r25,0,l0 1648e978777bSfredette 1649e978777bSfredette sh2add %r1,%r26,%r1 1650e978777bSfredette bv 0(r31) 1651e978777bSfredette add %r29,%r1,%r29 1652e978777bSfredettee4t08a0: sh1add %r26,%r1,%r1 1653e978777bSfredette 1654e978777bSfredette comb,<> %r25,0,l1 1655e978777bSfredette sh2add %r1,%r29,%r29 1656e978777bSfredette bv,n 0(r31) 1657e978777bSfredettee_5t0: comb,<> %r25,0,l0 1658e978777bSfredette 1659e978777bSfredette sh2add %r1,%r1,%r1 1660e978777bSfredette bv 0(r31) 1661e978777bSfredette add %r29,%r1,%r29 1662e978777bSfredettee_8t0: comb,<> %r25,0,l1 1663e978777bSfredette 1664e978777bSfredette sh3add %r1,%r29,%r29 1665e978777bSfredette bv,n 0(r31) 1666e978777bSfredettee_8t0a0: comb,<> %r25,0,l0 1667e978777bSfredette 1668e978777bSfredette sh3add %r1,%r26,%r1 1669e978777bSfredette bv 0(r31) 1670e978777bSfredette add %r29,%r1,%r29 1671e978777bSfredette 1672e978777bSfredette .procend 1673e978777bSfredette .end 1674e978777bSfredette 1675e978777bSfredette .import $$divI_2,millicode 1676e978777bSfredette .import $$divI_3,millicode 1677e978777bSfredette .import $$divI_4,millicode 1678e978777bSfredette .import $$divI_5,millicode 1679e978777bSfredette .import $$divI_6,millicode 1680e978777bSfredette .import $$divI_7,millicode 1681e978777bSfredette .import $$divI_8,millicode 1682e978777bSfredette .import $$divI_9,millicode 1683e978777bSfredette .import $$divI_10,millicode 1684e978777bSfredette .import $$divI_12,millicode 1685e978777bSfredette .import $$divI_14,millicode 1686e978777bSfredette .import $$divI_15,millicode 1687e978777bSfredette .export $$divI,millicode 1688e978777bSfredette .export $$divoI,millicode 1689e978777bSfredette$$divoI: 1690e978777bSfredette .proc 1691e978777bSfredette .callinfo NO_CALLS 1692e978777bSfredette comib,=,n -1,arg1,negative1 ; when divisor == -1 1693e978777bSfredette$$divI: 1694e978777bSfredette comib,>>=,n 15,arg1,small_divisor 1695e978777bSfredette add,>= 0,arg0,retreg ; move dividend, if retreg < 0, 1696e978777bSfredettenormal1: 1697e978777bSfredette sub 0,retreg,retreg ; make it positive 1698e978777bSfredette sub 0,arg1,temp ; clear carry, 1699e978777bSfredette ; negate the divisor 1700e978777bSfredette ds 0,temp,0 ; set V-bit to the comple- 1701e978777bSfredette ; ment of the divisor sign 1702e978777bSfredette add retreg,retreg,retreg ; shift msb bit into carry 1703e978777bSfredette ds r0,arg1,temp ; 1st divide step, if no carry 1704e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1705e978777bSfredette ds temp,arg1,temp ; 2nd divide step 1706e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1707e978777bSfredette ds temp,arg1,temp ; 3rd divide step 1708e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1709e978777bSfredette ds temp,arg1,temp ; 4th divide step 1710e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1711e978777bSfredette ds temp,arg1,temp ; 5th divide step 1712e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1713e978777bSfredette ds temp,arg1,temp ; 6th divide step 1714e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1715e978777bSfredette ds temp,arg1,temp ; 7th divide step 1716e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1717e978777bSfredette ds temp,arg1,temp ; 8th divide step 1718e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1719e978777bSfredette ds temp,arg1,temp ; 9th divide step 1720e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1721e978777bSfredette ds temp,arg1,temp ; 10th divide step 1722e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1723e978777bSfredette ds temp,arg1,temp ; 11th divide step 1724e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1725e978777bSfredette ds temp,arg1,temp ; 12th divide step 1726e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1727e978777bSfredette ds temp,arg1,temp ; 13th divide step 1728e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1729e978777bSfredette ds temp,arg1,temp ; 14th divide step 1730e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1731e978777bSfredette ds temp,arg1,temp ; 15th divide step 1732e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1733e978777bSfredette ds temp,arg1,temp ; 16th divide step 1734e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1735e978777bSfredette ds temp,arg1,temp ; 17th divide step 1736e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1737e978777bSfredette ds temp,arg1,temp ; 18th divide step 1738e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1739e978777bSfredette ds temp,arg1,temp ; 19th divide step 1740e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1741e978777bSfredette ds temp,arg1,temp ; 20th divide step 1742e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1743e978777bSfredette ds temp,arg1,temp ; 21st divide step 1744e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1745e978777bSfredette ds temp,arg1,temp ; 22nd divide step 1746e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1747e978777bSfredette ds temp,arg1,temp ; 23rd divide step 1748e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1749e978777bSfredette ds temp,arg1,temp ; 24th divide step 1750e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1751e978777bSfredette ds temp,arg1,temp ; 25th divide step 1752e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1753e978777bSfredette ds temp,arg1,temp ; 26th divide step 1754e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1755e978777bSfredette ds temp,arg1,temp ; 27th divide step 1756e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1757e978777bSfredette ds temp,arg1,temp ; 28th divide step 1758e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1759e978777bSfredette ds temp,arg1,temp ; 29th divide step 1760e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1761e978777bSfredette ds temp,arg1,temp ; 30th divide step 1762e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1763e978777bSfredette ds temp,arg1,temp ; 31st divide step 1764e978777bSfredette addc retreg,retreg,retreg ; shift retreg with/into carry 1765e978777bSfredette ds temp,arg1,temp ; 32nd divide step, 1766e978777bSfredette addc retreg,retreg,retreg ; shift last retreg bit into retreg 1767e978777bSfredette xor,>= arg0,arg1,0 ; get correct sign of quotient 1768e978777bSfredette sub 0,retreg,retreg ; based on operand signs 1769e978777bSfredette bv,n 0(r31) 1770e978777bSfredette nop 1771e978777bSfredette;______________________________________________________________________ 1772e978777bSfredettesmall_divisor: 1773e978777bSfredette blr,n arg1,r0 1774e978777bSfredette nop 1775e978777bSfredette; table for divisor == 0,1, ... ,15 1776e978777bSfredette addit,= 0,arg1,r0 ; trap if divisor == 0 1777e978777bSfredette nop 1778e978777bSfredette bv 0(r31) ; divisor == 1 1779e978777bSfredette copy arg0,retreg 1780e978777bSfredette b,n $$divI_2 ; divisor == 2 1781e978777bSfredette nop 1782e978777bSfredette b,n $$divI_3 ; divisor == 3 1783e978777bSfredette nop 1784e978777bSfredette b,n $$divI_4 ; divisor == 4 1785e978777bSfredette nop 1786e978777bSfredette b,n $$divI_5 ; divisor == 5 1787e978777bSfredette nop 1788e978777bSfredette b,n $$divI_6 ; divisor == 6 1789e978777bSfredette nop 1790e978777bSfredette b,n $$divI_7 ; divisor == 7 1791e978777bSfredette nop 1792e978777bSfredette b,n $$divI_8 ; divisor == 8 1793e978777bSfredette nop 1794e978777bSfredette b,n $$divI_9 ; divisor == 9 1795e978777bSfredette nop 1796e978777bSfredette b,n $$divI_10 ; divisor == 10 1797e978777bSfredette nop 1798e978777bSfredette b normal1 ; divisor == 11 1799e978777bSfredette add,>= 0,arg0,retreg 1800e978777bSfredette b,n $$divI_12 ; divisor == 12 1801e978777bSfredette nop 1802e978777bSfredette b normal1 ; divisor == 13 1803e978777bSfredette add,>= 0,arg0,retreg 1804e978777bSfredette b,n $$divI_14 ; divisor == 14 1805e978777bSfredette nop 1806e978777bSfredette b,n $$divI_15 ; divisor == 15 1807e978777bSfredette nop 1808e978777bSfredette;______________________________________________________________________ 1809e978777bSfredettenegative1: 1810e978777bSfredette sub 0,arg0,retreg ; result is negation of dividend 1811e978777bSfredette bv 0(r31) 1812e978777bSfredette addo arg0,arg1,r0 ; trap iff dividend==0x80000000 && divisor==-1 1813e978777bSfredette .procend 1814e978777bSfredette .end 1815