1 1.3 skrll ; $NetBSD: milli.S,v 1.3 2022/06/13 16:00:05 skrll Exp $ 2 1.1 fredette ; 3 1.1 fredette ; $OpenBSD: milli.S,v 1.5 2001/03/29 04:08:20 mickey Exp $ 4 1.1 fredette ; 5 1.1 fredette ; (c) Copyright 1986 HEWLETT-PACKARD COMPANY 6 1.1 fredette ; 7 1.1 fredette ; To anyone who acknowledges that this file is provided "AS IS" 8 1.1 fredette ; without any express or implied warranty: 9 1.1 fredette ; permission to use, copy, modify, and distribute this file 10 1.1 fredette ; for any purpose is hereby granted without fee, provided that 11 1.1 fredette ; the above copyright notice and this notice appears in all 12 1.1 fredette ; copies, and that the name of Hewlett-Packard Company not be 13 1.1 fredette ; used in advertising or publicity pertaining to distribution 14 1.1 fredette ; of the software without specific, written prior permission. 15 1.1 fredette ; Hewlett-Packard Company makes no representations about the 16 1.1 fredette ; suitability of this software for any purpose. 17 1.1 fredette ; 18 1.1 fredette 19 1.1 fredette ; Standard Hardware Register Definitions for Use with Assembler 20 1.1 fredette ; version A.08.06 21 1.1 fredette ; - fr16-31 added at Utah 22 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 23 1.1 fredette ; Hardware General Registers 24 1.1 fredette r0: .equ 0 25 1.1 fredette 26 1.1 fredette r1: .equ 1 27 1.1 fredette 28 1.1 fredette r2: .equ 2 29 1.1 fredette 30 1.1 fredette r3: .equ 3 31 1.1 fredette 32 1.1 fredette r4: .equ 4 33 1.1 fredette 34 1.1 fredette r5: .equ 5 35 1.1 fredette 36 1.1 fredette r6: .equ 6 37 1.1 fredette 38 1.1 fredette r7: .equ 7 39 1.1 fredette 40 1.1 fredette r8: .equ 8 41 1.1 fredette 42 1.1 fredette r9: .equ 9 43 1.1 fredette 44 1.1 fredette r10: .equ 10 45 1.1 fredette 46 1.1 fredette r11: .equ 11 47 1.1 fredette 48 1.1 fredette r12: .equ 12 49 1.1 fredette 50 1.1 fredette r13: .equ 13 51 1.1 fredette 52 1.1 fredette r14: .equ 14 53 1.1 fredette 54 1.1 fredette r15: .equ 15 55 1.1 fredette 56 1.1 fredette r16: .equ 16 57 1.1 fredette 58 1.1 fredette r17: .equ 17 59 1.1 fredette 60 1.1 fredette r18: .equ 18 61 1.1 fredette 62 1.1 fredette r19: .equ 19 63 1.1 fredette 64 1.1 fredette r20: .equ 20 65 1.1 fredette 66 1.1 fredette r21: .equ 21 67 1.1 fredette 68 1.1 fredette r22: .equ 22 69 1.1 fredette 70 1.1 fredette r23: .equ 23 71 1.1 fredette 72 1.1 fredette r24: .equ 24 73 1.1 fredette 74 1.1 fredette r25: .equ 25 75 1.1 fredette 76 1.1 fredette r26: .equ 26 77 1.1 fredette 78 1.1 fredette r27: .equ 27 79 1.1 fredette 80 1.1 fredette r28: .equ 28 81 1.1 fredette 82 1.1 fredette r29: .equ 29 83 1.1 fredette 84 1.1 fredette r30: .equ 30 85 1.1 fredette 86 1.1 fredette r31: .equ 31 87 1.1 fredette 88 1.1 fredette ; Hardware Space Registers 89 1.1 fredette sr0: .equ 0 90 1.1 fredette 91 1.1 fredette sr1: .equ 1 92 1.1 fredette 93 1.1 fredette sr2: .equ 2 94 1.1 fredette 95 1.1 fredette sr3: .equ 3 96 1.1 fredette 97 1.1 fredette sr4: .equ 4 98 1.1 fredette 99 1.1 fredette sr5: .equ 5 100 1.1 fredette 101 1.1 fredette sr6: .equ 6 102 1.1 fredette 103 1.1 fredette sr7: .equ 7 104 1.1 fredette 105 1.1 fredette ; Hardware Floating Point Registers 106 1.1 fredette fr0: .equ 0 107 1.1 fredette 108 1.1 fredette fr1: .equ 1 109 1.1 fredette 110 1.1 fredette fr2: .equ 2 111 1.1 fredette 112 1.1 fredette fr3: .equ 3 113 1.1 fredette 114 1.1 fredette fr4: .equ 4 115 1.1 fredette 116 1.1 fredette fr5: .equ 5 117 1.1 fredette 118 1.1 fredette fr6: .equ 6 119 1.1 fredette 120 1.1 fredette fr7: .equ 7 121 1.1 fredette 122 1.1 fredette fr8: .equ 8 123 1.1 fredette 124 1.1 fredette fr9: .equ 9 125 1.1 fredette 126 1.1 fredette fr10: .equ 10 127 1.1 fredette 128 1.1 fredette fr11: .equ 11 129 1.1 fredette 130 1.1 fredette fr12: .equ 12 131 1.1 fredette 132 1.1 fredette fr13: .equ 13 133 1.1 fredette 134 1.1 fredette fr14: .equ 14 135 1.1 fredette 136 1.1 fredette fr15: .equ 15 137 1.1 fredette 138 1.1 fredette fr16: .equ 16 139 1.1 fredette 140 1.1 fredette fr17: .equ 17 141 1.1 fredette 142 1.1 fredette fr18: .equ 18 143 1.1 fredette 144 1.1 fredette fr19: .equ 19 145 1.1 fredette 146 1.1 fredette fr20: .equ 20 147 1.1 fredette 148 1.1 fredette fr21: .equ 21 149 1.1 fredette 150 1.1 fredette fr22: .equ 22 151 1.1 fredette 152 1.1 fredette fr23: .equ 23 153 1.1 fredette 154 1.1 fredette fr24: .equ 24 155 1.1 fredette 156 1.1 fredette fr25: .equ 25 157 1.1 fredette 158 1.1 fredette fr26: .equ 26 159 1.1 fredette 160 1.1 fredette fr27: .equ 27 161 1.1 fredette 162 1.1 fredette fr28: .equ 28 163 1.1 fredette 164 1.1 fredette fr29: .equ 29 165 1.1 fredette 166 1.1 fredette fr30: .equ 30 167 1.1 fredette 168 1.1 fredette fr31: .equ 31 169 1.1 fredette 170 1.1 fredette ; Hardware Control Registers 171 1.1 fredette cr0: .equ 0 172 1.1 fredette 173 1.1 fredette rctr: .equ 0 ; Recovery Counter Register 174 1.1 fredette 175 1.1 fredette cr8: .equ 8 ; Protection ID 1 176 1.1 fredette 177 1.1 fredette pidr1: .equ 8 178 1.1 fredette 179 1.1 fredette cr9: .equ 9 ; Protection ID 2 180 1.1 fredette 181 1.1 fredette pidr2: .equ 9 182 1.1 fredette 183 1.1 fredette cr10: .equ 10 184 1.1 fredette 185 1.2 andvar ccr: .equ 10 ; Coprocessor Configuration Register 186 1.1 fredette 187 1.1 fredette cr11: .equ 11 188 1.1 fredette 189 1.1 fredette sar: .equ 11 ; Shift Amount Register 190 1.1 fredette 191 1.1 fredette cr12: .equ 12 192 1.1 fredette 193 1.1 fredette pidr3: .equ 12 ; Protection ID 3 194 1.1 fredette 195 1.1 fredette cr13: .equ 13 196 1.1 fredette 197 1.1 fredette pidr4: .equ 13 ; Protection ID 4 198 1.1 fredette 199 1.1 fredette cr14: .equ 14 200 1.1 fredette 201 1.1 fredette iva: .equ 14 ; Interrupt Vector Address 202 1.1 fredette 203 1.1 fredette cr15: .equ 15 204 1.1 fredette 205 1.1 fredette eiem: .equ 15 ; External Interrupt Enable Mask 206 1.1 fredette 207 1.1 fredette cr16: .equ 16 208 1.1 fredette 209 1.1 fredette itmr: .equ 16 ; Interval Timer 210 1.1 fredette 211 1.1 fredette cr17: .equ 17 212 1.1 fredette 213 1.1 fredette pcsq: .equ 17 ; Program Counter Space queue 214 1.1 fredette 215 1.1 fredette cr18: .equ 18 216 1.1 fredette 217 1.1 fredette pcoq: .equ 18 ; Program Counter Offset queue 218 1.1 fredette 219 1.1 fredette cr19: .equ 19 220 1.1 fredette 221 1.1 fredette iir: .equ 19 ; Interruption Instruction Register 222 1.1 fredette 223 1.1 fredette cr20: .equ 20 224 1.1 fredette 225 1.1 fredette isr: .equ 20 ; Interruption Space Register 226 1.1 fredette 227 1.1 fredette cr21: .equ 21 228 1.1 fredette 229 1.1 fredette ior: .equ 21 ; Interruption Offset Register 230 1.1 fredette 231 1.1 fredette cr22: .equ 22 232 1.1 fredette 233 1.2 andvar ipsw: .equ 22 ; Interruption Processor Status Word 234 1.1 fredette 235 1.1 fredette cr23: .equ 23 236 1.1 fredette 237 1.1 fredette eirr: .equ 23 ; External Interrupt Request 238 1.1 fredette 239 1.1 fredette cr24: .equ 24 240 1.1 fredette 241 1.2 andvar ppda: .equ 24 ; Physical Page Directory Address 242 1.1 fredette 243 1.1 fredette tr0: .equ 24 ; Temporary register 0 244 1.1 fredette 245 1.1 fredette cr25: .equ 25 246 1.1 fredette 247 1.1 fredette hta: .equ 25 ; Hash Table Address 248 1.1 fredette 249 1.1 fredette tr1: .equ 25 ; Temporary register 1 250 1.1 fredette 251 1.1 fredette cr26: .equ 26 252 1.1 fredette 253 1.1 fredette tr2: .equ 26 ; Temporary register 2 254 1.1 fredette 255 1.1 fredette cr27: .equ 27 256 1.1 fredette 257 1.1 fredette tr3: .equ 27 ; Temporary register 3 258 1.1 fredette 259 1.1 fredette cr28: .equ 28 260 1.1 fredette 261 1.1 fredette tr4: .equ 28 ; Temporary register 4 262 1.1 fredette 263 1.1 fredette cr29: .equ 29 264 1.1 fredette 265 1.1 fredette tr5: .equ 29 ; Temporary register 5 266 1.1 fredette 267 1.1 fredette cr30: .equ 30 268 1.1 fredette 269 1.1 fredette tr6: .equ 30 ; Temporary register 6 270 1.1 fredette 271 1.1 fredette cr31: .equ 31 272 1.1 fredette 273 1.1 fredette tr7: .equ 31 ; Temporary register 7 274 1.1 fredette 275 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 276 1.1 fredette ; Procedure Call Convention ~ 277 1.1 fredette ; Register Definitions for Use with Assembler ~ 278 1.1 fredette ; version A.08.06 ~ 279 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 280 1.1 fredette ; Software Architecture General Registers 281 1.1 fredette rp: .equ r2 ; return pointer 282 1.1 fredette 283 1.1 fredette mrp: .equ r31 ; millicode return pointer 284 1.1 fredette 285 1.1 fredette ret0: .equ r28 ; return value 286 1.1 fredette 287 1.1 fredette ret1: .equ r29 ; return value (high part of double) 288 1.1 fredette 289 1.1 fredette sl: .equ r29 ; static link 290 1.1 fredette 291 1.1 fredette sp: .equ r30 ; stack pointer 292 1.1 fredette 293 1.1 fredette dp: .equ r27 ; data pointer 294 1.1 fredette 295 1.1 fredette arg0: .equ r26 ; argument 296 1.1 fredette 297 1.1 fredette arg1: .equ r25 ; argument or high part of double argument 298 1.1 fredette 299 1.1 fredette arg2: .equ r24 ; argument 300 1.1 fredette 301 1.1 fredette arg3: .equ r23 ; argument or high part of double argument 302 1.1 fredette 303 1.1 fredette ;_____________________________________________________________________________ 304 1.1 fredette ; Software Architecture Space Registers 305 1.1 fredette ; sr0 ; return link form BLE 306 1.1 fredette sret: .equ sr1 ; return value 307 1.1 fredette 308 1.1 fredette sarg: .equ sr1 ; argument 309 1.1 fredette 310 1.1 fredette ; sr4 ; PC SPACE tracker 311 1.1 fredette ; sr5 ; process private data 312 1.1 fredette ;_____________________________________________________________________________ 313 1.1 fredette ; Software Architecture Pseudo Registers 314 1.1 fredette previous_sp: .equ 64 ; old stack pointer (locates previous frame) 315 1.1 fredette 316 1.1 fredette ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 317 1.1 fredette ; Standard space and subspace definitions. version A.08.06 318 1.1 fredette ; These are generally suitable for programs on HP_UX and HPE. 319 1.1 fredette ; Statements commented out are used when building such things as operating 320 1.1 fredette ; system kernels. 321 1.1 fredette ;;;;;;;;;;;;;;;; 322 1.1 fredette ; Additional code subspaces should have ALIGN=8 for an interspace BV 323 1.1 fredette ; and should have SORT=24. 324 1.1 fredette ; 325 1.1 fredette ; For an incomplete executable (program bound to shared libraries), 326 1.1 fredette ; sort keys $GLOBAL$ -1 and $GLOBAL$ -2 are reserved for the $DLT$ 327 1.1 fredette ; and $PLT$ subspaces respectively. 328 1.1 fredette ;;;;;;;;;;;;;;; 329 1.1 fredette 330 1.1 fredette .text 331 1.1 fredette .EXPORT $$remI,millicode 332 1.1 fredette ; .IMPORT cerror 333 1.1 fredette $$remI: 334 1.1 fredette .PROC 335 1.1 fredette .CALLINFO NO_CALLS 336 1.1 fredette .ENTRY 337 1.1 fredette addit,= 0,arg1,r0 338 1.1 fredette add,>= r0,arg0,ret1 339 1.1 fredette sub r0,ret1,ret1 340 1.1 fredette sub r0,arg1,r1 341 1.1 fredette ds r0,r1,r0 342 1.1 fredette or r0,r0,r1 343 1.1 fredette add ret1,ret1,ret1 344 1.1 fredette ds r1,arg1,r1 345 1.1 fredette addc ret1,ret1,ret1 346 1.1 fredette ds r1,arg1,r1 347 1.1 fredette addc ret1,ret1,ret1 348 1.1 fredette ds r1,arg1,r1 349 1.1 fredette addc ret1,ret1,ret1 350 1.1 fredette ds r1,arg1,r1 351 1.1 fredette addc ret1,ret1,ret1 352 1.1 fredette ds r1,arg1,r1 353 1.1 fredette addc ret1,ret1,ret1 354 1.1 fredette ds r1,arg1,r1 355 1.1 fredette addc ret1,ret1,ret1 356 1.1 fredette ds r1,arg1,r1 357 1.1 fredette addc ret1,ret1,ret1 358 1.1 fredette ds r1,arg1,r1 359 1.1 fredette addc ret1,ret1,ret1 360 1.1 fredette ds r1,arg1,r1 361 1.1 fredette addc ret1,ret1,ret1 362 1.1 fredette ds r1,arg1,r1 363 1.1 fredette addc ret1,ret1,ret1 364 1.1 fredette ds r1,arg1,r1 365 1.1 fredette addc ret1,ret1,ret1 366 1.1 fredette ds r1,arg1,r1 367 1.1 fredette addc ret1,ret1,ret1 368 1.1 fredette ds r1,arg1,r1 369 1.1 fredette addc ret1,ret1,ret1 370 1.1 fredette ds r1,arg1,r1 371 1.1 fredette addc ret1,ret1,ret1 372 1.1 fredette ds r1,arg1,r1 373 1.1 fredette addc ret1,ret1,ret1 374 1.1 fredette ds r1,arg1,r1 375 1.1 fredette addc ret1,ret1,ret1 376 1.1 fredette ds r1,arg1,r1 377 1.1 fredette addc ret1,ret1,ret1 378 1.1 fredette ds r1,arg1,r1 379 1.1 fredette addc ret1,ret1,ret1 380 1.1 fredette ds r1,arg1,r1 381 1.1 fredette addc ret1,ret1,ret1 382 1.1 fredette ds r1,arg1,r1 383 1.1 fredette addc ret1,ret1,ret1 384 1.1 fredette ds r1,arg1,r1 385 1.1 fredette addc ret1,ret1,ret1 386 1.1 fredette ds r1,arg1,r1 387 1.1 fredette addc ret1,ret1,ret1 388 1.1 fredette ds r1,arg1,r1 389 1.1 fredette addc ret1,ret1,ret1 390 1.1 fredette ds r1,arg1,r1 391 1.1 fredette addc ret1,ret1,ret1 392 1.1 fredette ds r1,arg1,r1 393 1.1 fredette addc ret1,ret1,ret1 394 1.1 fredette ds r1,arg1,r1 395 1.1 fredette addc ret1,ret1,ret1 396 1.1 fredette ds r1,arg1,r1 397 1.1 fredette addc ret1,ret1,ret1 398 1.1 fredette ds r1,arg1,r1 399 1.1 fredette addc ret1,ret1,ret1 400 1.1 fredette ds r1,arg1,r1 401 1.1 fredette addc ret1,ret1,ret1 402 1.1 fredette ds r1,arg1,r1 403 1.1 fredette addc ret1,ret1,ret1 404 1.1 fredette ds r1,arg1,r1 405 1.1 fredette addc ret1,ret1,ret1 406 1.1 fredette ds r1,arg1,r1 407 1.1 fredette addc ret1,ret1,ret1 408 1.1 fredette movb,>=,n r1,ret1,remI300 409 1.1 fredette add,< arg1,r0,r0 410 1.1 fredette add,tr r1,arg1,ret1 411 1.1 fredette sub r1,arg1,ret1 412 1.1 fredette remI300: add,>= arg0,r0,r0 413 1.1 fredette 414 1.1 fredette sub r0,ret1,ret1 415 1.1 fredette bv r0(r31) 416 1.1 fredette nop 417 1.1 fredette .EXIT 418 1.1 fredette .PROCEND 419 1.1 fredette 420 1.1 fredette bit1: .equ 1 421 1.1 fredette 422 1.1 fredette bit30: .equ 30 423 1.1 fredette bit31: .equ 31 424 1.1 fredette 425 1.1 fredette len2: .equ 2 426 1.1 fredette 427 1.1 fredette len4: .equ 4 428 1.1 fredette 429 1.1 fredette #if 0 430 1.1 fredette $$dyncall: 431 1.1 fredette .proc 432 1.1 fredette .callinfo NO_CALLS 433 1.1 fredette .export $$dyncall,MILLICODE 434 1.1 fredette 435 1.1 fredette bb,>=,n 22,bit30,noshlibs 436 1.1 fredette 437 1.1 fredette depi 0,bit31,len2,22 438 1.1 fredette ldw 4(22),19 439 1.1 fredette ldw 0(22),22 440 1.1 fredette noshlibs: 441 1.1 fredette ldsid (22),r1 442 1.1 fredette mtsp r1,sr0 443 1.1 fredette be 0(sr0,r22) 444 1.1 fredette stw rp,-24(sp) 445 1.1 fredette .procend 446 1.1 fredette 447 1.1 fredette $$sh_func_adrs: 448 1.1 fredette .proc 449 1.1 fredette .callinfo NO_CALLS 450 1.1 fredette .export $$sh_func_adrs, millicode 451 1.1 fredette ldo 0(r26),ret1 452 1.1 fredette dep r0,30,1,r26 453 1.1 fredette probew (r26),r31,r22 454 1.1 fredette extru,= r22,31,1,r22 455 1.1 fredette bv r0(r31) 456 1.1 fredette ldws 0(r26),ret1 457 1.1 fredette .procend 458 1.3 skrll #endif 459 1.1 fredette 460 1.1 fredette temp: .EQU r1 461 1.1 fredette 462 1.1 fredette retreg: .EQU ret1 ; r29 463 1.1 fredette 464 1.1 fredette .export $$divU,millicode 465 1.1 fredette .import $$divU_3,millicode 466 1.1 fredette .import $$divU_5,millicode 467 1.1 fredette .import $$divU_6,millicode 468 1.1 fredette .import $$divU_7,millicode 469 1.1 fredette .import $$divU_9,millicode 470 1.1 fredette .import $$divU_10,millicode 471 1.1 fredette .import $$divU_12,millicode 472 1.1 fredette .import $$divU_14,millicode 473 1.1 fredette .import $$divU_15,millicode 474 1.1 fredette $$divU: 475 1.1 fredette .proc 476 1.1 fredette .callinfo NO_CALLS 477 1.1 fredette ; The subtract is not nullified since it does no harm and can be used 478 1.1 fredette ; by the two cases that branch back to "normal". 479 1.1 fredette comib,>= 15,arg1,special_divisor 480 1.1 fredette sub r0,arg1,temp ; clear carry, negate the divisor 481 1.1 fredette ds r0,temp,r0 ; set V-bit to 1 482 1.1 fredette normal: 483 1.1 fredette add arg0,arg0,retreg ; shift msb bit into carry 484 1.1 fredette ds r0,arg1,temp ; 1st divide step, if no carry 485 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 486 1.1 fredette ds temp,arg1,temp ; 2nd divide step 487 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 488 1.1 fredette ds temp,arg1,temp ; 3rd divide step 489 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 490 1.1 fredette ds temp,arg1,temp ; 4th divide step 491 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 492 1.1 fredette ds temp,arg1,temp ; 5th divide step 493 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 494 1.1 fredette ds temp,arg1,temp ; 6th divide step 495 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 496 1.1 fredette ds temp,arg1,temp ; 7th divide step 497 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 498 1.1 fredette ds temp,arg1,temp ; 8th divide step 499 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 500 1.1 fredette ds temp,arg1,temp ; 9th divide step 501 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 502 1.1 fredette ds temp,arg1,temp ; 10th divide step 503 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 504 1.1 fredette ds temp,arg1,temp ; 11th divide step 505 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 506 1.1 fredette ds temp,arg1,temp ; 12th divide step 507 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 508 1.1 fredette ds temp,arg1,temp ; 13th divide step 509 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 510 1.1 fredette ds temp,arg1,temp ; 14th divide step 511 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 512 1.1 fredette ds temp,arg1,temp ; 15th divide step 513 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 514 1.1 fredette ds temp,arg1,temp ; 16th divide step 515 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 516 1.1 fredette ds temp,arg1,temp ; 17th divide step 517 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 518 1.1 fredette ds temp,arg1,temp ; 18th divide step 519 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 520 1.1 fredette ds temp,arg1,temp ; 19th divide step 521 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 522 1.1 fredette ds temp,arg1,temp ; 20th divide step 523 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 524 1.1 fredette ds temp,arg1,temp ; 21st divide step 525 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 526 1.1 fredette ds temp,arg1,temp ; 22nd divide step 527 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 528 1.1 fredette ds temp,arg1,temp ; 23rd divide step 529 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 530 1.1 fredette ds temp,arg1,temp ; 24th divide step 531 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 532 1.1 fredette ds temp,arg1,temp ; 25th divide step 533 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 534 1.1 fredette ds temp,arg1,temp ; 26th divide step 535 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 536 1.1 fredette ds temp,arg1,temp ; 27th divide step 537 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 538 1.1 fredette ds temp,arg1,temp ; 28th divide step 539 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 540 1.1 fredette ds temp,arg1,temp ; 29th divide step 541 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 542 1.1 fredette ds temp,arg1,temp ; 30th divide step 543 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 544 1.1 fredette ds temp,arg1,temp ; 31st divide step 545 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 546 1.1 fredette ds temp,arg1,temp ; 32nd divide step, 547 1.1 fredette bv 0(r31) 548 1.1 fredette addc retreg,retreg,retreg ; shift last retreg bit into retreg 549 1.1 fredette ;_____________________________________________________________________________ 550 1.1 fredette ; handle the cases where divisor is a small constant or has high bit on 551 1.1 fredette special_divisor: 552 1.1 fredette blr arg1,r0 553 1.1 fredette comib,>,n 0,arg1,big_divisor ; nullify previous instruction 554 1.1 fredette zero_divisor: ; this label is here to provide external visibility 555 1.1 fredette 556 1.1 fredette addit,= 0,arg1,0 ; trap for zero dvr 557 1.1 fredette nop 558 1.1 fredette bv 0(r31) ; divisor == 1 559 1.1 fredette copy arg0,retreg 560 1.1 fredette bv 0(r31) ; divisor == 2 561 1.1 fredette extru arg0,30,31,retreg 562 1.1 fredette b,n $$divU_3 ; divisor == 3 563 1.1 fredette nop 564 1.1 fredette bv 0(r31) ; divisor == 4 565 1.1 fredette extru arg0,29,30,retreg 566 1.1 fredette b,n $$divU_5 ; divisor == 5 567 1.1 fredette nop 568 1.1 fredette b,n $$divU_6 ; divisor == 6 569 1.1 fredette nop 570 1.1 fredette b,n $$divU_7 ; divisor == 7 571 1.1 fredette nop 572 1.1 fredette bv 0(r31) ; divisor == 8 573 1.1 fredette extru arg0,28,29,retreg 574 1.1 fredette b,n $$divU_9 ; divisor == 9 575 1.1 fredette nop 576 1.1 fredette b,n $$divU_10 ; divisor == 10 577 1.1 fredette nop 578 1.1 fredette b normal ; divisor == 11 579 1.1 fredette ds r0,temp,r0 ; set V-bit to 1 580 1.1 fredette b,n $$divU_12 ; divisor == 12 581 1.1 fredette nop 582 1.1 fredette b normal ; divisor == 13 583 1.1 fredette ds r0,temp,r0 ; set V-bit to 1 584 1.1 fredette b,n $$divU_14 ; divisor == 14 585 1.1 fredette nop 586 1.1 fredette b,n $$divU_15 ; divisor == 15 587 1.1 fredette nop 588 1.1 fredette ;_____________________________________________________________________________ 589 1.1 fredette ; Handle the case where the high bit is on in the divisor. 590 1.1 fredette ; Compute: if( dividend>=divisor) quotient=1; else quotient=0; 591 1.1 fredette ; Note: dividend>==divisor iff dividend-divisor does not borrow 592 1.1 fredette ; and not borrow iff carry 593 1.1 fredette big_divisor: 594 1.1 fredette sub arg0,arg1,r0 595 1.1 fredette bv 0(r31) 596 1.1 fredette addc r0,r0,retreg 597 1.1 fredette .procend 598 1.1 fredette .end 599 1.1 fredette 600 1.1 fredette t2: .EQU r1 601 1.1 fredette 602 1.1 fredette ; x2 .EQU arg0 ; r26 603 1.1 fredette t1: .EQU arg1 ; r25 604 1.1 fredette 605 1.1 fredette ; x1 .EQU ret1 ; r29 606 1.1 fredette ;_____________________________________________________________________________ 607 1.1 fredette 608 1.1 fredette $$divide_by_constant: 609 1.1 fredette .PROC 610 1.1 fredette .CALLINFO NO_CALLS 611 1.1 fredette .export $$divide_by_constant,millicode 612 1.1 fredette ; Provides a "nice" label for the code covered by the unwind descriptor 613 1.1 fredette ; for things like gprof. 614 1.1 fredette 615 1.1 fredette $$divI_2: 616 1.1 fredette .EXPORT $$divI_2,MILLICODE 617 1.1 fredette COMCLR,>= arg0,0,0 618 1.1 fredette ADDI 1,arg0,arg0 619 1.1 fredette bv 0(r31) 620 1.1 fredette EXTRS arg0,30,31,ret1 621 1.1 fredette 622 1.1 fredette $$divI_4: 623 1.1 fredette .EXPORT $$divI_4,MILLICODE 624 1.1 fredette COMCLR,>= arg0,0,0 625 1.1 fredette ADDI 3,arg0,arg0 626 1.1 fredette bv 0(r31) 627 1.1 fredette EXTRS arg0,29,30,ret1 628 1.1 fredette 629 1.1 fredette $$divI_8: 630 1.1 fredette .EXPORT $$divI_8,MILLICODE 631 1.1 fredette COMCLR,>= arg0,0,0 632 1.1 fredette ADDI 7,arg0,arg0 633 1.1 fredette bv 0(r31) 634 1.1 fredette EXTRS arg0,28,29,ret1 635 1.1 fredette 636 1.1 fredette $$divI_16: 637 1.1 fredette .EXPORT $$divI_16,MILLICODE 638 1.1 fredette COMCLR,>= arg0,0,0 639 1.1 fredette ADDI 15,arg0,arg0 640 1.1 fredette bv 0(r31) 641 1.1 fredette EXTRS arg0,27,28,ret1 642 1.1 fredette 643 1.1 fredette $$divI_3: 644 1.1 fredette .EXPORT $$divI_3,MILLICODE 645 1.1 fredette COMB,<,N arg0,0,$neg3 646 1.1 fredette 647 1.1 fredette ADDI 1,arg0,arg0 648 1.1 fredette EXTRU arg0,1,2,ret1 649 1.1 fredette SH2ADD arg0,arg0,arg0 650 1.1 fredette B $pos 651 1.1 fredette ADDC ret1,0,ret1 652 1.1 fredette 653 1.1 fredette $neg3: 654 1.1 fredette SUBI 1,arg0,arg0 655 1.1 fredette EXTRU arg0,1,2,ret1 656 1.1 fredette SH2ADD arg0,arg0,arg0 657 1.1 fredette B $neg 658 1.1 fredette ADDC ret1,0,ret1 659 1.1 fredette 660 1.1 fredette $$divU_3: 661 1.1 fredette .EXPORT $$divU_3,MILLICODE 662 1.1 fredette ADDI 1,arg0,arg0 663 1.1 fredette ADDC 0,0,ret1 664 1.1 fredette SHD ret1,arg0,30,t1 665 1.1 fredette SH2ADD arg0,arg0,arg0 666 1.1 fredette B $pos 667 1.1 fredette ADDC ret1,t1,ret1 668 1.1 fredette 669 1.1 fredette $$divI_5: 670 1.1 fredette .EXPORT $$divI_5,MILLICODE 671 1.1 fredette COMB,<,N arg0,0,$neg5 672 1.1 fredette ADDI 3,arg0,t1 673 1.1 fredette SH1ADD arg0,t1,arg0 674 1.1 fredette B $pos 675 1.1 fredette ADDC 0,0,ret1 676 1.1 fredette 677 1.1 fredette $neg5: 678 1.1 fredette SUB 0,arg0,arg0 679 1.1 fredette ADDI 1,arg0,arg0 680 1.1 fredette SHD 0,arg0,31,ret1 681 1.1 fredette SH1ADD arg0,arg0,arg0 682 1.1 fredette B $neg 683 1.1 fredette ADDC ret1,0,ret1 684 1.1 fredette 685 1.1 fredette $$divU_5: 686 1.1 fredette .EXPORT $$divU_5,MILLICODE 687 1.1 fredette ADDI 1,arg0,arg0 688 1.1 fredette ADDC 0,0,ret1 689 1.1 fredette SHD ret1,arg0,31,t1 690 1.1 fredette SH1ADD arg0,arg0,arg0 691 1.1 fredette B $pos 692 1.1 fredette ADDC t1,ret1,ret1 693 1.1 fredette 694 1.1 fredette $$divI_6: 695 1.1 fredette .EXPORT $$divI_6,MILLICODE 696 1.1 fredette COMB,<,N arg0,0,$neg6 697 1.1 fredette EXTRU arg0,30,31,arg0 698 1.1 fredette ADDI 5,arg0,t1 699 1.1 fredette SH2ADD arg0,t1,arg0 700 1.1 fredette B $pos 701 1.1 fredette ADDC 0,0,ret1 702 1.1 fredette 703 1.1 fredette $neg6: 704 1.1 fredette SUBI 2,arg0,arg0 705 1.1 fredette EXTRU arg0,30,31,arg0 706 1.1 fredette SHD 0,arg0,30,ret1 707 1.1 fredette SH2ADD arg0,arg0,arg0 708 1.1 fredette B $neg 709 1.1 fredette ADDC ret1,0,ret1 710 1.1 fredette 711 1.1 fredette $$divU_6: 712 1.1 fredette .EXPORT $$divU_6,MILLICODE 713 1.1 fredette EXTRU arg0,30,31,arg0 714 1.1 fredette ADDI 1,arg0,arg0 715 1.1 fredette SHD 0,arg0,30,ret1 716 1.1 fredette SH2ADD arg0,arg0,arg0 717 1.1 fredette B $pos 718 1.1 fredette ADDC ret1,0,ret1 719 1.1 fredette 720 1.1 fredette $$divU_10: 721 1.1 fredette .EXPORT $$divU_10,MILLICODE 722 1.1 fredette EXTRU arg0,30,31,arg0 723 1.1 fredette ADDI 3,arg0,t1 724 1.1 fredette SH1ADD arg0,t1,arg0 725 1.1 fredette ADDC 0,0,ret1 726 1.1 fredette $pos: 727 1.1 fredette SHD ret1,arg0,28,t1 728 1.1 fredette SHD arg0,0,28,t2 729 1.1 fredette ADD arg0,t2,arg0 730 1.1 fredette ADDC ret1,t1,ret1 731 1.1 fredette $pos_for_17: 732 1.1 fredette SHD ret1,arg0,24,t1 733 1.1 fredette SHD arg0,0,24,t2 734 1.1 fredette ADD arg0,t2,arg0 735 1.1 fredette ADDC ret1,t1,ret1 736 1.1 fredette 737 1.1 fredette SHD ret1,arg0,16,t1 738 1.1 fredette SHD arg0,0,16,t2 739 1.1 fredette ADD arg0,t2,arg0 740 1.1 fredette bv 0(r31) 741 1.1 fredette ADDC ret1,t1,ret1 742 1.1 fredette 743 1.1 fredette $$divI_10: 744 1.1 fredette .EXPORT $$divI_10,MILLICODE 745 1.1 fredette COMB,< arg0,0,$neg10 746 1.1 fredette COPY 0,ret1 747 1.1 fredette EXTRU arg0,30,31,arg0 748 1.1 fredette ADDIB,TR 1,arg0,$pos 749 1.1 fredette SH1ADD arg0,arg0,arg0 750 1.1 fredette 751 1.1 fredette $neg10: 752 1.1 fredette SUBI 2,arg0,arg0 753 1.1 fredette EXTRU arg0,30,31,arg0 754 1.1 fredette SH1ADD arg0,arg0,arg0 755 1.1 fredette $neg: 756 1.1 fredette SHD ret1,arg0,28,t1 757 1.1 fredette SHD arg0,0,28,t2 758 1.1 fredette ADD arg0,t2,arg0 759 1.1 fredette ADDC ret1,t1,ret1 760 1.1 fredette $neg_for_17: 761 1.1 fredette SHD ret1,arg0,24,t1 762 1.1 fredette SHD arg0,0,24,t2 763 1.1 fredette ADD arg0,t2,arg0 764 1.1 fredette ADDC ret1,t1,ret1 765 1.1 fredette 766 1.1 fredette SHD ret1,arg0,16,t1 767 1.1 fredette SHD arg0,0,16,t2 768 1.1 fredette ADD arg0,t2,arg0 769 1.1 fredette ADDC ret1,t1,ret1 770 1.1 fredette bv 0(r31) 771 1.1 fredette SUB 0,ret1,ret1 772 1.1 fredette 773 1.1 fredette $$divI_12: 774 1.1 fredette .EXPORT $$divI_12,MILLICODE 775 1.1 fredette COMB,< arg0,0,$neg12 776 1.1 fredette COPY 0,ret1 777 1.1 fredette EXTRU arg0,29,30,arg0 778 1.1 fredette ADDIB,TR 1,arg0,$pos 779 1.1 fredette SH2ADD arg0,arg0,arg0 780 1.1 fredette 781 1.1 fredette $neg12: 782 1.1 fredette SUBI 4,arg0,arg0 783 1.1 fredette EXTRU arg0,29,30,arg0 784 1.1 fredette B $neg 785 1.1 fredette SH2ADD arg0,arg0,arg0 786 1.1 fredette 787 1.1 fredette $$divU_12: 788 1.1 fredette .EXPORT $$divU_12,MILLICODE 789 1.1 fredette EXTRU arg0,29,30,arg0 790 1.1 fredette ADDI 5,arg0,t1 791 1.1 fredette SH2ADD arg0,t1,arg0 792 1.1 fredette B $pos 793 1.1 fredette ADDC 0,0,ret1 794 1.1 fredette 795 1.1 fredette $$divI_15: 796 1.1 fredette .EXPORT $$divI_15,MILLICODE 797 1.1 fredette COMB,< arg0,0,$neg15 798 1.1 fredette COPY 0,ret1 799 1.1 fredette ADDIB,TR 1,arg0,$pos+4 800 1.1 fredette SHD ret1,arg0,28,t1 801 1.1 fredette 802 1.1 fredette $neg15: 803 1.1 fredette B $neg 804 1.1 fredette SUBI 1,arg0,arg0 805 1.1 fredette 806 1.1 fredette $$divU_15: 807 1.1 fredette .EXPORT $$divU_15,MILLICODE 808 1.1 fredette ADDI 1,arg0,arg0 809 1.1 fredette B $pos 810 1.1 fredette ADDC 0,0,ret1 811 1.1 fredette 812 1.1 fredette $$divI_17: 813 1.1 fredette .EXPORT $$divI_17,MILLICODE 814 1.1 fredette COMB,<,N arg0,0,$neg17 815 1.1 fredette ADDI 1,arg0,arg0 816 1.1 fredette SHD 0,arg0,28,t1 817 1.1 fredette SHD arg0,0,28,t2 818 1.1 fredette SUB t2,arg0,arg0 819 1.1 fredette B $pos_for_17 820 1.1 fredette SUBB t1,0,ret1 821 1.1 fredette 822 1.1 fredette $neg17: 823 1.1 fredette SUBI 1,arg0,arg0 824 1.1 fredette SHD 0,arg0,28,t1 825 1.1 fredette SHD arg0,0,28,t2 826 1.1 fredette SUB t2,arg0,arg0 827 1.1 fredette B $neg_for_17 828 1.1 fredette SUBB t1,0,ret1 829 1.1 fredette 830 1.1 fredette $$divU_17: 831 1.1 fredette .EXPORT $$divU_17,MILLICODE 832 1.1 fredette ADDI 1,arg0,arg0 833 1.1 fredette ADDC 0,0,ret1 834 1.1 fredette SHD ret1,arg0,28,t1 835 1.1 fredette $u17: 836 1.1 fredette SHD arg0,0,28,t2 837 1.1 fredette SUB t2,arg0,arg0 838 1.1 fredette B $pos_for_17 839 1.1 fredette SUBB t1,ret1,ret1 840 1.1 fredette 841 1.1 fredette $$divI_7: 842 1.1 fredette .EXPORT $$divI_7,MILLICODE 843 1.1 fredette COMB,<,N arg0,0,$neg7 844 1.1 fredette $7: 845 1.1 fredette ADDI 1,arg0,arg0 846 1.1 fredette SHD 0,arg0,29,ret1 847 1.1 fredette SH3ADD arg0,arg0,arg0 848 1.1 fredette ADDC ret1,0,ret1 849 1.1 fredette $pos7: 850 1.1 fredette SHD ret1,arg0,26,t1 851 1.1 fredette SHD arg0,0,26,t2 852 1.1 fredette ADD arg0,t2,arg0 853 1.1 fredette ADDC ret1,t1,ret1 854 1.1 fredette 855 1.1 fredette SHD ret1,arg0,20,t1 856 1.1 fredette SHD arg0,0,20,t2 857 1.1 fredette ADD arg0,t2,arg0 858 1.1 fredette ADDC ret1,t1,t1 859 1.1 fredette 860 1.1 fredette COPY 0,ret1 861 1.1 fredette SHD,= t1,arg0,24,t1 862 1.1 fredette $1: 863 1.1 fredette ADDB,TR t1,ret1,$2 864 1.1 fredette EXTRU arg0,31,24,arg0 865 1.1 fredette 866 1.1 fredette bv,n 0(r31) 867 1.1 fredette 868 1.1 fredette $2: 869 1.1 fredette ADDB,TR t1,arg0,$1 870 1.1 fredette EXTRU,= arg0,7,8,t1 871 1.1 fredette 872 1.1 fredette $neg7: 873 1.1 fredette SUBI 1,arg0,arg0 874 1.1 fredette $8: 875 1.1 fredette SHD 0,arg0,29,ret1 876 1.1 fredette SH3ADD arg0,arg0,arg0 877 1.1 fredette ADDC ret1,0,ret1 878 1.1 fredette 879 1.1 fredette $neg7_shift: 880 1.1 fredette SHD ret1,arg0,26,t1 881 1.1 fredette SHD arg0,0,26,t2 882 1.1 fredette ADD arg0,t2,arg0 883 1.1 fredette ADDC ret1,t1,ret1 884 1.1 fredette 885 1.1 fredette SHD ret1,arg0,20,t1 886 1.1 fredette SHD arg0,0,20,t2 887 1.1 fredette ADD arg0,t2,arg0 888 1.1 fredette ADDC ret1,t1,t1 889 1.1 fredette 890 1.1 fredette COPY 0,ret1 891 1.1 fredette SHD,= t1,arg0,24,t1 892 1.1 fredette $3: 893 1.1 fredette ADDB,TR t1,ret1,$4 894 1.1 fredette EXTRU arg0,31,24,arg0 895 1.1 fredette 896 1.1 fredette bv 0(r31) 897 1.1 fredette SUB 0,ret1,ret1 898 1.1 fredette 899 1.1 fredette $4: 900 1.1 fredette ADDB,TR t1,arg0,$3 901 1.1 fredette EXTRU,= arg0,7,8,t1 902 1.1 fredette 903 1.1 fredette $$divU_7: 904 1.1 fredette .EXPORT $$divU_7,MILLICODE 905 1.1 fredette ADDI 1,arg0,arg0 906 1.1 fredette ADDC 0,0,ret1 907 1.1 fredette SHD ret1,arg0,29,t1 908 1.1 fredette SH3ADD arg0,arg0,arg0 909 1.1 fredette B $pos7 910 1.1 fredette ADDC t1,ret1,ret1 911 1.1 fredette 912 1.1 fredette $$divI_9: 913 1.1 fredette .EXPORT $$divI_9,MILLICODE 914 1.1 fredette COMB,<,N arg0,0,$neg9 915 1.1 fredette ADDI 1,arg0,arg0 916 1.1 fredette SHD 0,arg0,29,t1 917 1.1 fredette SHD arg0,0,29,t2 918 1.1 fredette SUB t2,arg0,arg0 919 1.1 fredette B $pos7 920 1.1 fredette SUBB t1,0,ret1 921 1.1 fredette 922 1.1 fredette $neg9: 923 1.1 fredette SUBI 1,arg0,arg0 924 1.1 fredette SHD 0,arg0,29,t1 925 1.1 fredette SHD arg0,0,29,t2 926 1.1 fredette SUB t2,arg0,arg0 927 1.1 fredette B $neg7_shift 928 1.1 fredette SUBB t1,0,ret1 929 1.1 fredette 930 1.1 fredette $$divU_9: 931 1.1 fredette .EXPORT $$divU_9,MILLICODE 932 1.1 fredette ADDI 1,arg0,arg0 933 1.1 fredette ADDC 0,0,ret1 934 1.1 fredette SHD ret1,arg0,29,t1 935 1.1 fredette SHD arg0,0,29,t2 936 1.1 fredette SUB t2,arg0,arg0 937 1.1 fredette B $pos7 938 1.1 fredette SUBB t1,ret1,ret1 939 1.1 fredette 940 1.1 fredette $$divI_14: 941 1.1 fredette .EXPORT $$divI_14,MILLICODE 942 1.1 fredette COMB,<,N arg0,0,$neg14 943 1.1 fredette $$divU_14: 944 1.1 fredette .EXPORT $$divU_14,MILLICODE 945 1.1 fredette B $7 946 1.1 fredette EXTRU arg0,30,31,arg0 947 1.1 fredette 948 1.1 fredette $neg14: 949 1.1 fredette SUBI 2,arg0,arg0 950 1.1 fredette B $8 951 1.1 fredette EXTRU arg0,30,31,arg0 952 1.1 fredette 953 1.1 fredette .PROCEND 954 1.1 fredette .END 955 1.1 fredette 956 1.1 fredette rmndr: .EQU ret1 ; r29 957 1.1 fredette 958 1.1 fredette .export $$remU,millicode 959 1.1 fredette $$remU: 960 1.1 fredette .proc 961 1.1 fredette .callinfo NO_CALLS 962 1.1 fredette .entry 963 1.1 fredette 964 1.1 fredette comib,>=,n 0,arg1,special_case 965 1.1 fredette sub r0,arg1,rmndr ; clear carry, negate the divisor 966 1.1 fredette ds r0,rmndr,r0 ; set V-bit to 1 967 1.1 fredette add arg0,arg0,temp ; shift msb bit into carry 968 1.1 fredette ds r0,arg1,rmndr ; 1st divide step, if no carry 969 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 970 1.1 fredette ds rmndr,arg1,rmndr ; 2nd divide step 971 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 972 1.1 fredette ds rmndr,arg1,rmndr ; 3rd divide step 973 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 974 1.1 fredette ds rmndr,arg1,rmndr ; 4th divide step 975 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 976 1.1 fredette ds rmndr,arg1,rmndr ; 5th divide step 977 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 978 1.1 fredette ds rmndr,arg1,rmndr ; 6th divide step 979 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 980 1.1 fredette ds rmndr,arg1,rmndr ; 7th divide step 981 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 982 1.1 fredette ds rmndr,arg1,rmndr ; 8th divide step 983 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 984 1.1 fredette ds rmndr,arg1,rmndr ; 9th divide step 985 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 986 1.1 fredette ds rmndr,arg1,rmndr ; 10th divide step 987 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 988 1.1 fredette ds rmndr,arg1,rmndr ; 11th divide step 989 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 990 1.1 fredette ds rmndr,arg1,rmndr ; 12th divide step 991 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 992 1.1 fredette ds rmndr,arg1,rmndr ; 13th divide step 993 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 994 1.1 fredette ds rmndr,arg1,rmndr ; 14th divide step 995 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 996 1.1 fredette ds rmndr,arg1,rmndr ; 15th divide step 997 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 998 1.1 fredette ds rmndr,arg1,rmndr ; 16th divide step 999 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1000 1.1 fredette ds rmndr,arg1,rmndr ; 17th divide step 1001 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1002 1.1 fredette ds rmndr,arg1,rmndr ; 18th divide step 1003 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1004 1.1 fredette ds rmndr,arg1,rmndr ; 19th divide step 1005 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1006 1.1 fredette ds rmndr,arg1,rmndr ; 20th divide step 1007 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1008 1.1 fredette ds rmndr,arg1,rmndr ; 21st divide step 1009 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1010 1.1 fredette ds rmndr,arg1,rmndr ; 22nd divide step 1011 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1012 1.1 fredette ds rmndr,arg1,rmndr ; 23rd divide step 1013 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1014 1.1 fredette ds rmndr,arg1,rmndr ; 24th divide step 1015 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1016 1.1 fredette ds rmndr,arg1,rmndr ; 25th divide step 1017 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1018 1.1 fredette ds rmndr,arg1,rmndr ; 26th divide step 1019 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1020 1.1 fredette ds rmndr,arg1,rmndr ; 27th divide step 1021 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1022 1.1 fredette ds rmndr,arg1,rmndr ; 28th divide step 1023 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1024 1.1 fredette ds rmndr,arg1,rmndr ; 29th divide step 1025 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1026 1.1 fredette ds rmndr,arg1,rmndr ; 30th divide step 1027 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1028 1.1 fredette ds rmndr,arg1,rmndr ; 31st divide step 1029 1.1 fredette addc temp,temp,temp ; shift temp with/into carry 1030 1.1 fredette ds rmndr,arg1,rmndr ; 32nd divide step, 1031 1.1 fredette comiclr,<= 0,rmndr,r0 1032 1.1 fredette add rmndr,arg1,rmndr ; correction 1033 1.1 fredette ; .exit 1034 1.1 fredette bv,n 0(r31) 1035 1.1 fredette nop 1036 1.1 fredette ; Putting >= on the last DS and deleting COMICLR does not work! 1037 1.1 fredette ;_____________________________________________________________________________ 1038 1.1 fredette special_case: 1039 1.1 fredette addit,= 0,arg1,r0 ; trap on div by zero 1040 1.1 fredette sub,>>= arg0,arg1,rmndr 1041 1.1 fredette copy arg0,rmndr 1042 1.1 fredette .exit 1043 1.1 fredette bv,n 0(r31) 1044 1.1 fredette nop 1045 1.1 fredette .procend 1046 1.1 fredette .end 1047 1.1 fredette 1048 1.1 fredette ; Use bv 0(r31) and bv,n 0(r31) instead. 1049 1.1 fredette ; #define return bv 0(%mrp) 1050 1.1 fredette ; #define return_n bv,n 0(%mrp) 1051 1.1 fredette 1052 1.1 fredette .align 16 1053 1.1 fredette $$mulI: 1054 1.1 fredette 1055 1.1 fredette .proc 1056 1.1 fredette .callinfo NO_CALLS 1057 1.1 fredette .export $$mulI, millicode 1058 1.1 fredette combt,<<= %r25,%r26,l4 ; swap args if unsigned %r25>%r26 1059 1.1 fredette copy 0,%r29 ; zero out the result 1060 1.1 fredette xor %r26,%r25,%r26 ; swap %r26 & %r25 using the 1061 1.1 fredette xor %r26,%r25,%r25 ; old xor trick 1062 1.1 fredette xor %r26,%r25,%r26 1063 1.1 fredette l4: combt,<= 0,%r26,l3 ; if %r26>=0 then proceed like unsigned 1064 1.1 fredette 1065 1.1 fredette zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 ********* 1066 1.1 fredette sub,> 0,%r25,%r1 ; otherwise negate both and 1067 1.1 fredette combt,<=,n %r26,%r1,l2 ; swap back if |%r26|<|%r25| 1068 1.1 fredette sub 0,%r26,%r25 1069 1.1 fredette movb,tr,n %r1,%r26,l2 ; 10th inst. 1070 1.1 fredette 1071 1.1 fredette l0: add %r29,%r1,%r29 ; add in this partial product 1072 1.1 fredette 1073 1.1 fredette l1: zdep %r26,23,24,%r26 ; %r26 <<= 8 ****************** 1074 1.1 fredette 1075 1.1 fredette l2: zdep %r25,30,8,%r1 ; %r1 = (%r25&0xff)<<1 ********* 1076 1.1 fredette 1077 1.1 fredette l3: blr %r1,0 ; case on these 8 bits ****** 1078 1.1 fredette 1079 1.1 fredette extru %r25,23,24,%r25 ; %r25 >>= 8 ****************** 1080 1.1 fredette 1081 1.1 fredette ;16 insts before this. 1082 1.1 fredette ; %r26 <<= 8 ************************** 1083 1.1 fredette x0: comb,<> %r25,0,l2 ! zdep %r26,23,24,%r26 ! bv,n 0(r31) ! nop 1084 1.1 fredette 1085 1.1 fredette x1: comb,<> %r25,0,l1 ! add %r29,%r26,%r29 ! bv,n 0(r31) ! nop 1086 1.1 fredette 1087 1.1 fredette x2: comb,<> %r25,0,l1 ! sh1add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1088 1.1 fredette 1089 1.1 fredette x3: comb,<> %r25,0,l0 ! sh1add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1090 1.1 fredette 1091 1.1 fredette x4: comb,<> %r25,0,l1 ! sh2add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1092 1.1 fredette 1093 1.1 fredette x5: comb,<> %r25,0,l0 ! sh2add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1094 1.1 fredette 1095 1.1 fredette x6: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1096 1.1 fredette 1097 1.1 fredette x7: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r26,%r29,%r29 ! b,n ret_t0 1098 1.1 fredette 1099 1.1 fredette x8: comb,<> %r25,0,l1 ! sh3add %r26,%r29,%r29 ! bv,n 0(r31) ! nop 1100 1.1 fredette 1101 1.1 fredette x9: comb,<> %r25,0,l0 ! sh3add %r26,%r26,%r1 ! bv 0(r31) ! add %r29,%r1,%r29 1102 1.1 fredette 1103 1.1 fredette x10: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1104 1.1 fredette 1105 1.1 fredette x11: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0 1106 1.1 fredette 1107 1.1 fredette x12: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1108 1.1 fredette 1109 1.1 fredette x13: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r29,%r29 ! b,n ret_t0 1110 1.1 fredette 1111 1.1 fredette x14: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1112 1.1 fredette 1113 1.1 fredette x15: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r1,%r1 ! b,n ret_t0 1114 1.1 fredette 1115 1.1 fredette x16: zdep %r26,27,28,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1116 1.1 fredette 1117 1.1 fredette x17: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r26,%r1,%r1 ! b,n ret_t0 1118 1.1 fredette 1119 1.1 fredette x18: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh1add %r1,%r29,%r29 ! bv,n 0(r31) 1120 1.1 fredette 1121 1.1 fredette x19: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh1add %r1,%r26,%r1 ! b,n ret_t0 1122 1.1 fredette 1123 1.1 fredette x20: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1124 1.1 fredette 1125 1.1 fredette x21: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1126 1.1 fredette 1127 1.1 fredette x22: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1128 1.1 fredette 1129 1.1 fredette x23: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1130 1.1 fredette 1131 1.1 fredette x24: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1132 1.1 fredette 1133 1.1 fredette x25: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0 1134 1.1 fredette 1135 1.1 fredette x26: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1136 1.1 fredette 1137 1.1 fredette x27: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r1,%r1 ! b,n ret_t0 1138 1.1 fredette 1139 1.1 fredette x28: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1140 1.1 fredette 1141 1.1 fredette x29: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1142 1.1 fredette 1143 1.1 fredette x30: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1144 1.1 fredette 1145 1.1 fredette x31: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1146 1.1 fredette 1147 1.1 fredette x32: zdep %r26,26,27,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1148 1.1 fredette 1149 1.1 fredette x33: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1150 1.1 fredette 1151 1.1 fredette x34: zdep %r26,27,28,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1152 1.1 fredette 1153 1.1 fredette x35: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r26,%r1,%r1 1154 1.1 fredette 1155 1.1 fredette x36: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh2add %r1,%r29,%r29 ! bv,n 0(r31) 1156 1.1 fredette 1157 1.1 fredette x37: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r26,%r1 ! b,n ret_t0 1158 1.1 fredette 1159 1.1 fredette x38: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1160 1.1 fredette 1161 1.1 fredette x39: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1162 1.1 fredette 1163 1.1 fredette x40: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1164 1.1 fredette 1165 1.1 fredette x41: sh2add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0 1166 1.1 fredette 1167 1.1 fredette x42: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1168 1.1 fredette 1169 1.1 fredette x43: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1170 1.1 fredette 1171 1.1 fredette x44: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1172 1.1 fredette 1173 1.1 fredette x45: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! sh2add %r1,%r1,%r1 ! b,n ret_t0 1174 1.1 fredette 1175 1.1 fredette x46: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! add %r1,%r26,%r1 1176 1.1 fredette 1177 1.1 fredette x47: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1178 1.1 fredette 1179 1.1 fredette x48: sh1add %r26,%r26,%r1 ! comb,<> %r25,0,l0 ! zdep %r1,27,28,%r1 ! b,n ret_t0 1180 1.1 fredette 1181 1.1 fredette x49: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r26,%r1,%r1 1182 1.1 fredette 1183 1.1 fredette x50: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1184 1.1 fredette 1185 1.1 fredette x51: sh3add %r26,%r26,%r1 ! sh3add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1186 1.1 fredette 1187 1.1 fredette x52: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1188 1.1 fredette 1189 1.1 fredette x53: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1190 1.1 fredette 1191 1.1 fredette x54: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1192 1.1 fredette 1193 1.1 fredette x55: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1194 1.1 fredette 1195 1.1 fredette x56: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1196 1.1 fredette 1197 1.1 fredette x57: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1198 1.1 fredette 1199 1.1 fredette x58: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1200 1.1 fredette 1201 1.1 fredette x59: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1202 1.1 fredette 1203 1.1 fredette x60: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1204 1.1 fredette 1205 1.1 fredette x61: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1206 1.1 fredette 1207 1.1 fredette x62: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1208 1.1 fredette 1209 1.1 fredette x63: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1210 1.1 fredette 1211 1.1 fredette x64: zdep %r26,25,26,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1212 1.1 fredette 1213 1.1 fredette x65: sh3add %r26,0,%r1 ! comb,<> %r25,0,l0 ! sh3add %r1,%r26,%r1 ! b,n ret_t0 1214 1.1 fredette 1215 1.1 fredette x66: zdep %r26,26,27,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1216 1.1 fredette 1217 1.1 fredette x67: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1218 1.1 fredette 1219 1.1 fredette x68: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1220 1.1 fredette 1221 1.1 fredette x69: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1222 1.1 fredette 1223 1.1 fredette x70: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1224 1.1 fredette 1225 1.1 fredette x71: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1226 1.1 fredette 1227 1.1 fredette x72: sh3add %r26,%r26,%r1 ! comb,<> %r25,0,l1 ! sh3add %r1,%r29,%r29 ! bv,n 0(r31) 1228 1.1 fredette 1229 1.1 fredette x73: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! add %r29,%r1,%r29 1230 1.1 fredette 1231 1.1 fredette x74: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1232 1.1 fredette 1233 1.1 fredette x75: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1234 1.1 fredette 1235 1.1 fredette x76: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1236 1.1 fredette 1237 1.1 fredette x77: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1238 1.1 fredette 1239 1.1 fredette x78: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1240 1.1 fredette 1241 1.1 fredette x79: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1242 1.1 fredette 1243 1.1 fredette x80: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29 1244 1.1 fredette 1245 1.1 fredette x81: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! add %r29,%r1,%r29 1246 1.1 fredette 1247 1.1 fredette x82: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1248 1.1 fredette 1249 1.1 fredette x83: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1250 1.1 fredette 1251 1.1 fredette x84: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1252 1.1 fredette 1253 1.1 fredette x85: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1254 1.1 fredette 1255 1.1 fredette x86: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1256 1.1 fredette 1257 1.1 fredette x87: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r26,%r1,%r1 1258 1.1 fredette 1259 1.1 fredette x88: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1260 1.1 fredette 1261 1.1 fredette x89: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1262 1.1 fredette 1263 1.1 fredette x90: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1264 1.1 fredette 1265 1.1 fredette x91: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1266 1.1 fredette 1267 1.1 fredette x92: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1268 1.1 fredette 1269 1.1 fredette x93: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1270 1.1 fredette 1271 1.1 fredette x94: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r26,%r1,%r1 1272 1.1 fredette 1273 1.1 fredette x95: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1274 1.1 fredette 1275 1.1 fredette x96: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1276 1.1 fredette 1277 1.1 fredette x97: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1278 1.1 fredette 1279 1.1 fredette x98: zdep %r26,26,27,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh1add %r26,%r1,%r1 1280 1.1 fredette 1281 1.1 fredette x99: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1282 1.1 fredette 1283 1.1 fredette x100: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1284 1.1 fredette 1285 1.1 fredette x101: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1286 1.1 fredette 1287 1.1 fredette x102: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1288 1.1 fredette 1289 1.1 fredette x103: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r26,%r1 1290 1.1 fredette 1291 1.1 fredette x104: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1292 1.1 fredette 1293 1.1 fredette x105: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1294 1.1 fredette 1295 1.1 fredette x106: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1296 1.1 fredette 1297 1.1 fredette x107: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh3add %r1,%r26,%r1 1298 1.1 fredette 1299 1.1 fredette x108: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1300 1.1 fredette 1301 1.1 fredette x109: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1302 1.1 fredette 1303 1.1 fredette x110: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1304 1.1 fredette 1305 1.1 fredette x111: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1306 1.1 fredette 1307 1.1 fredette x112: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! zdep %r1,27,28,%r1 1308 1.1 fredette 1309 1.1 fredette x113: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1310 1.1 fredette 1311 1.1 fredette x114: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1312 1.1 fredette 1313 1.1 fredette x115: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1314 1.1 fredette 1315 1.1 fredette x116: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1316 1.1 fredette 1317 1.1 fredette x117: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1318 1.1 fredette 1319 1.1 fredette x118: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0a0 ! sh3add %r1,%r1,%r1 1320 1.1 fredette 1321 1.1 fredette x119: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1 1322 1.1 fredette 1323 1.1 fredette x120: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1324 1.1 fredette 1325 1.1 fredette x121: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1326 1.1 fredette 1327 1.1 fredette x122: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1328 1.1 fredette 1329 1.1 fredette x123: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1330 1.1 fredette 1331 1.1 fredette x124: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1332 1.1 fredette 1333 1.1 fredette x125: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1334 1.1 fredette 1335 1.1 fredette x126: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1336 1.1 fredette 1337 1.1 fredette x127: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1338 1.1 fredette 1339 1.1 fredette x128: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l1 ! add %r29,%r1,%r29 ! bv,n 0(r31) 1340 1.1 fredette 1341 1.1 fredette x129: zdep %r26,24,25,%r1 ! comb,<> %r25,0,l0 ! add %r1,%r26,%r1 ! b,n ret_t0 1342 1.1 fredette 1343 1.1 fredette x130: zdep %r26,25,26,%r1 ! add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1344 1.1 fredette 1345 1.1 fredette x131: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1346 1.1 fredette 1347 1.1 fredette x132: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1348 1.1 fredette 1349 1.1 fredette x133: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1350 1.1 fredette 1351 1.1 fredette x134: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1352 1.1 fredette 1353 1.1 fredette x135: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1354 1.1 fredette 1355 1.1 fredette x136: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1356 1.1 fredette 1357 1.1 fredette x137: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1358 1.1 fredette 1359 1.1 fredette x138: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1360 1.1 fredette 1361 1.1 fredette x139: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1 1362 1.1 fredette 1363 1.1 fredette x140: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r1,%r1 1364 1.1 fredette 1365 1.1 fredette x141: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1366 1.1 fredette 1367 1.1 fredette x142: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_2t0 ! sub %r1,%r26,%r1 1368 1.1 fredette 1369 1.1 fredette x143: zdep %r26,27,28,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1370 1.1 fredette 1371 1.1 fredette x144: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1372 1.1 fredette 1373 1.1 fredette x145: sh3add %r26,%r26,%r1 ! sh3add %r1,0,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1374 1.1 fredette 1375 1.1 fredette x146: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1376 1.1 fredette 1377 1.1 fredette x147: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1378 1.1 fredette 1379 1.1 fredette x148: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1380 1.1 fredette 1381 1.1 fredette x149: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1382 1.1 fredette 1383 1.1 fredette x150: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1384 1.1 fredette 1385 1.1 fredette x151: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1386 1.1 fredette 1387 1.1 fredette x152: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1388 1.1 fredette 1389 1.1 fredette x153: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1390 1.1 fredette 1391 1.1 fredette x154: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1392 1.1 fredette 1393 1.1 fredette x155: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1394 1.1 fredette 1395 1.1 fredette x156: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1396 1.1 fredette 1397 1.1 fredette x157: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1398 1.1 fredette 1399 1.1 fredette x158: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sub %r1,%r26,%r1 1400 1.1 fredette 1401 1.1 fredette x159: zdep %r26,26,27,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1402 1.1 fredette 1403 1.1 fredette x160: sh2add %r26,%r26,%r1 ! sh2add %r1,0,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1404 1.1 fredette 1405 1.1 fredette x161: sh3add %r26,0,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1406 1.1 fredette 1407 1.1 fredette x162: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1408 1.1 fredette 1409 1.1 fredette x163: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r26,%r1 1410 1.1 fredette 1411 1.1 fredette x164: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1412 1.1 fredette 1413 1.1 fredette x165: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1414 1.1 fredette 1415 1.1 fredette x166: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1416 1.1 fredette 1417 1.1 fredette x167: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1418 1.1 fredette 1419 1.1 fredette x168: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1420 1.1 fredette 1421 1.1 fredette x169: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1422 1.1 fredette 1423 1.1 fredette x170: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1424 1.1 fredette 1425 1.1 fredette x171: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1426 1.1 fredette 1427 1.1 fredette x172: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1428 1.1 fredette 1429 1.1 fredette x173: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! sh3add %r1,%r1,%r1 1430 1.1 fredette 1431 1.1 fredette x174: zdep %r26,26,27,%r1 ! sh1add %r26,%r1,%r1 ! b e_t04a0 ! sh2add %r1,%r1,%r1 1432 1.1 fredette 1433 1.1 fredette x175: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1434 1.1 fredette 1435 1.1 fredette x176: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1436 1.1 fredette 1437 1.1 fredette x177: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1 1438 1.1 fredette 1439 1.1 fredette x178: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1 1440 1.1 fredette 1441 1.1 fredette x179: sh2add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r26,%r1 1442 1.1 fredette 1443 1.1 fredette x180: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1444 1.1 fredette 1445 1.1 fredette x181: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1446 1.1 fredette 1447 1.1 fredette x182: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh1add %r1,%r26,%r1 1448 1.1 fredette 1449 1.1 fredette x183: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh1add %r1,%r26,%r1 1450 1.1 fredette 1451 1.1 fredette x184: sh2add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! add %r1,%r26,%r1 1452 1.1 fredette 1453 1.1 fredette x185: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1454 1.1 fredette 1455 1.1 fredette x186: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1456 1.1 fredette 1457 1.1 fredette x187: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1458 1.1 fredette 1459 1.1 fredette x188: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r26,%r1,%r1 1460 1.1 fredette 1461 1.1 fredette x189: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r1,%r1 1462 1.1 fredette 1463 1.1 fredette x190: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1464 1.1 fredette 1465 1.1 fredette x191: zdep %r26,25,26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sub %r1,%r26,%r1 1466 1.1 fredette 1467 1.1 fredette x192: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1468 1.1 fredette 1469 1.1 fredette x193: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1470 1.1 fredette 1471 1.1 fredette x194: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1472 1.1 fredette 1473 1.1 fredette x195: sh3add %r26,0,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1474 1.1 fredette 1475 1.1 fredette x196: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1476 1.1 fredette 1477 1.1 fredette x197: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1478 1.1 fredette 1479 1.1 fredette x198: zdep %r26,25,26,%r1 ! sh1add %r26,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1480 1.1 fredette 1481 1.1 fredette x199: sh3add %r26,0,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1482 1.1 fredette 1483 1.1 fredette x200: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1484 1.1 fredette 1485 1.1 fredette x201: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1486 1.1 fredette 1487 1.1 fredette x202: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1488 1.1 fredette 1489 1.1 fredette x203: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r26,%r1 1490 1.1 fredette 1491 1.1 fredette x204: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1 1492 1.1 fredette 1493 1.1 fredette x205: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1494 1.1 fredette 1495 1.1 fredette x206: zdep %r26,25,26,%r1 ! sh2add %r26,%r1,%r1 ! b e_t02a0 ! sh1add %r1,%r1,%r1 1496 1.1 fredette 1497 1.1 fredette x207: sh3add %r26,0,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1 1498 1.1 fredette 1499 1.1 fredette x208: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1500 1.1 fredette 1501 1.1 fredette x209: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_8t0a0 ! add %r1,%r26,%r1 1502 1.1 fredette 1503 1.1 fredette x210: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1504 1.1 fredette 1505 1.1 fredette x211: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1 1506 1.1 fredette 1507 1.1 fredette x212: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1508 1.1 fredette 1509 1.1 fredette x213: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_4t0a0 ! sh2add %r1,%r26,%r1 1510 1.1 fredette 1511 1.1 fredette x214: sh3add %r26,%r26,%r1 ! sh2add %r26,%r1,%r1 ! b e2t04a0 ! sh3add %r1,%r26,%r1 1512 1.1 fredette 1513 1.1 fredette x215: sh2add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1514 1.1 fredette 1515 1.1 fredette x216: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1516 1.1 fredette 1517 1.1 fredette x217: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1518 1.1 fredette 1519 1.1 fredette x218: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r26,%r1 1520 1.1 fredette 1521 1.1 fredette x219: sh3add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1522 1.1 fredette 1523 1.1 fredette x220: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0 ! sh1add %r1,%r26,%r1 1524 1.1 fredette 1525 1.1 fredette x221: sh1add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_4t0a0 ! sh1add %r1,%r26,%r1 1526 1.1 fredette 1527 1.1 fredette x222: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1528 1.1 fredette 1529 1.1 fredette x223: sh3add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1530 1.1 fredette 1531 1.1 fredette x224: sh3add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_8t0 ! add %r1,%r26,%r1 1532 1.1 fredette 1533 1.1 fredette x225: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0 ! sh2add %r1,%r1,%r1 1534 1.1 fredette 1535 1.1 fredette x226: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_t02a0 ! zdep %r1,26,27,%r1 1536 1.1 fredette 1537 1.1 fredette x227: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_t02a0 ! sh2add %r1,%r1,%r1 1538 1.1 fredette 1539 1.1 fredette x228: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0 ! sh1add %r1,%r1,%r1 1540 1.1 fredette 1541 1.1 fredette x229: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_4t0a0 ! sh1add %r1,%r1,%r1 1542 1.1 fredette 1543 1.1 fredette x230: sh3add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_5t0 ! add %r1,%r26,%r1 1544 1.1 fredette 1545 1.1 fredette x231: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_3t0 ! sh2add %r1,%r26,%r1 1546 1.1 fredette 1547 1.1 fredette x232: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0 ! sh2add %r1,%r26,%r1 1548 1.1 fredette 1549 1.1 fredette x233: sh1add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e_8t0a0 ! sh2add %r1,%r26,%r1 1550 1.1 fredette 1551 1.1 fredette x234: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0 ! sh3add %r1,%r1,%r1 1552 1.1 fredette 1553 1.1 fredette x235: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e_2t0a0 ! sh3add %r1,%r1,%r1 1554 1.1 fredette 1555 1.1 fredette x236: sh3add %r26,%r26,%r1 ! sh1add %r1,%r26,%r1 ! b e4t08a0 ! sh1add %r1,%r1,%r1 1556 1.1 fredette 1557 1.1 fredette x237: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_3t0 ! sub %r1,%r26,%r1 1558 1.1 fredette 1559 1.1 fredette x238: sh1add %r26,%r26,%r1 ! sh2add %r1,%r26,%r1 ! b e2t04a0 ! sh3add %r1,%r1,%r1 1560 1.1 fredette 1561 1.1 fredette x239: zdep %r26,27,28,%r1 ! sh2add %r1,%r1,%r1 ! b e_t0ma0 ! sh1add %r1,%r1,%r1 1562 1.1 fredette 1563 1.1 fredette x240: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0 ! sh1add %r1,%r1,%r1 1564 1.1 fredette 1565 1.1 fredette x241: sh3add %r26,%r26,%r1 ! add %r1,%r26,%r1 ! b e_8t0a0 ! sh1add %r1,%r1,%r1 1566 1.1 fredette 1567 1.1 fredette x242: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_2t0 ! sh3add %r1,%r26,%r1 1568 1.1 fredette 1569 1.1 fredette x243: sh3add %r26,%r26,%r1 ! sh3add %r1,%r1,%r1 ! b e_t0 ! sh1add %r1,%r1,%r1 1570 1.1 fredette 1571 1.1 fredette x244: sh2add %r26,%r26,%r1 ! sh1add %r1,%r1,%r1 ! b e_4t0 ! sh2add %r1,%r26,%r1 1572 1.1 fredette 1573 1.1 fredette x245: sh3add %r26,0,%r1 ! sh1add %r1,%r1,%r1 ! b e_5t0 ! sh1add %r1,%r26,%r1 1574 1.1 fredette 1575 1.1 fredette x246: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0 ! sh1add %r1,%r1,%r1 1576 1.1 fredette 1577 1.1 fredette x247: sh2add %r26,%r26,%r1 ! sh3add %r1,%r26,%r1 ! b e_2t0a0 ! sh1add %r1,%r1,%r1 1578 1.1 fredette 1579 1.1 fredette x248: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh3add %r1,%r29,%r29 1580 1.1 fredette 1581 1.1 fredette x249: zdep %r26,26,27,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh3add %r1,%r26,%r1 1582 1.1 fredette 1583 1.1 fredette x250: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0 ! sh2add %r1,%r1,%r1 1584 1.1 fredette 1585 1.1 fredette x251: sh2add %r26,%r26,%r1 ! sh2add %r1,%r1,%r1 ! b e_2t0a0 ! sh2add %r1,%r1,%r1 1586 1.1 fredette 1587 1.1 fredette x252: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh2add %r1,%r29,%r29 1588 1.1 fredette 1589 1.1 fredette x253: zdep %r26,25,26,%r1 ! sub %r1,%r26,%r1 ! b e_t0 ! sh2add %r1,%r26,%r1 1590 1.1 fredette 1591 1.1 fredette x254: zdep %r26,24,25,%r1 ! sub %r1,%r26,%r1 ! b e_shift ! sh1add %r1,%r29,%r29 1592 1.1 fredette 1593 1.1 fredette x255: zdep %r26,23,24,%r1 ! comb,<> %r25,0,l0 ! sub %r1,%r26,%r1 ! b,n ret_t0 1594 1.1 fredette 1595 1.1 fredette ;1040 insts before this. 1596 1.1 fredette ret_t0: bv 0(r31) 1597 1.1 fredette 1598 1.1 fredette e_t0: add %r29,%r1,%r29 1599 1.1 fredette 1600 1.1 fredette e_shift: comb,<> %r25,0,l2 1601 1.1 fredette 1602 1.1 fredette zdep %r26,23,24,%r26 ; %r26 <<= 8 *********** 1603 1.1 fredette bv,n 0(r31) 1604 1.1 fredette e_t0ma0: comb,<> %r25,0,l0 1605 1.1 fredette 1606 1.1 fredette sub %r1,%r26,%r1 1607 1.1 fredette bv 0(r31) 1608 1.1 fredette add %r29,%r1,%r29 1609 1.1 fredette e_t0a0: comb,<> %r25,0,l0 1610 1.1 fredette 1611 1.1 fredette add %r1,%r26,%r1 1612 1.1 fredette bv 0(r31) 1613 1.1 fredette add %r29,%r1,%r29 1614 1.1 fredette e_t02a0: comb,<> %r25,0,l0 1615 1.1 fredette 1616 1.1 fredette sh1add %r26,%r1,%r1 1617 1.1 fredette bv 0(r31) 1618 1.1 fredette add %r29,%r1,%r29 1619 1.1 fredette e_t04a0: comb,<> %r25,0,l0 1620 1.1 fredette 1621 1.1 fredette sh2add %r26,%r1,%r1 1622 1.1 fredette bv 0(r31) 1623 1.1 fredette add %r29,%r1,%r29 1624 1.1 fredette e_2t0: comb,<> %r25,0,l1 1625 1.1 fredette 1626 1.1 fredette sh1add %r1,%r29,%r29 1627 1.1 fredette bv,n 0(r31) 1628 1.1 fredette e_2t0a0: comb,<> %r25,0,l0 1629 1.1 fredette 1630 1.1 fredette sh1add %r1,%r26,%r1 1631 1.1 fredette bv 0(r31) 1632 1.1 fredette add %r29,%r1,%r29 1633 1.1 fredette e2t04a0: sh1add %r26,%r1,%r1 1634 1.1 fredette 1635 1.1 fredette comb,<> %r25,0,l1 1636 1.1 fredette sh1add %r1,%r29,%r29 1637 1.1 fredette bv,n 0(r31) 1638 1.1 fredette e_3t0: comb,<> %r25,0,l0 1639 1.1 fredette 1640 1.1 fredette sh1add %r1,%r1,%r1 1641 1.1 fredette bv 0(r31) 1642 1.1 fredette add %r29,%r1,%r29 1643 1.1 fredette e_4t0: comb,<> %r25,0,l1 1644 1.1 fredette 1645 1.1 fredette sh2add %r1,%r29,%r29 1646 1.1 fredette bv,n 0(r31) 1647 1.1 fredette e_4t0a0: comb,<> %r25,0,l0 1648 1.1 fredette 1649 1.1 fredette sh2add %r1,%r26,%r1 1650 1.1 fredette bv 0(r31) 1651 1.1 fredette add %r29,%r1,%r29 1652 1.1 fredette e4t08a0: sh1add %r26,%r1,%r1 1653 1.1 fredette 1654 1.1 fredette comb,<> %r25,0,l1 1655 1.1 fredette sh2add %r1,%r29,%r29 1656 1.1 fredette bv,n 0(r31) 1657 1.1 fredette e_5t0: comb,<> %r25,0,l0 1658 1.1 fredette 1659 1.1 fredette sh2add %r1,%r1,%r1 1660 1.1 fredette bv 0(r31) 1661 1.1 fredette add %r29,%r1,%r29 1662 1.1 fredette e_8t0: comb,<> %r25,0,l1 1663 1.1 fredette 1664 1.1 fredette sh3add %r1,%r29,%r29 1665 1.1 fredette bv,n 0(r31) 1666 1.1 fredette e_8t0a0: comb,<> %r25,0,l0 1667 1.1 fredette 1668 1.1 fredette sh3add %r1,%r26,%r1 1669 1.1 fredette bv 0(r31) 1670 1.1 fredette add %r29,%r1,%r29 1671 1.1 fredette 1672 1.1 fredette .procend 1673 1.1 fredette .end 1674 1.1 fredette 1675 1.1 fredette .import $$divI_2,millicode 1676 1.1 fredette .import $$divI_3,millicode 1677 1.1 fredette .import $$divI_4,millicode 1678 1.1 fredette .import $$divI_5,millicode 1679 1.1 fredette .import $$divI_6,millicode 1680 1.1 fredette .import $$divI_7,millicode 1681 1.1 fredette .import $$divI_8,millicode 1682 1.1 fredette .import $$divI_9,millicode 1683 1.1 fredette .import $$divI_10,millicode 1684 1.1 fredette .import $$divI_12,millicode 1685 1.1 fredette .import $$divI_14,millicode 1686 1.1 fredette .import $$divI_15,millicode 1687 1.1 fredette .export $$divI,millicode 1688 1.1 fredette .export $$divoI,millicode 1689 1.1 fredette $$divoI: 1690 1.1 fredette .proc 1691 1.1 fredette .callinfo NO_CALLS 1692 1.1 fredette comib,=,n -1,arg1,negative1 ; when divisor == -1 1693 1.1 fredette $$divI: 1694 1.1 fredette comib,>>=,n 15,arg1,small_divisor 1695 1.1 fredette add,>= 0,arg0,retreg ; move dividend, if retreg < 0, 1696 1.1 fredette normal1: 1697 1.1 fredette sub 0,retreg,retreg ; make it positive 1698 1.1 fredette sub 0,arg1,temp ; clear carry, 1699 1.1 fredette ; negate the divisor 1700 1.1 fredette ds 0,temp,0 ; set V-bit to the comple- 1701 1.1 fredette ; ment of the divisor sign 1702 1.1 fredette add retreg,retreg,retreg ; shift msb bit into carry 1703 1.1 fredette ds r0,arg1,temp ; 1st divide step, if no carry 1704 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1705 1.1 fredette ds temp,arg1,temp ; 2nd divide step 1706 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1707 1.1 fredette ds temp,arg1,temp ; 3rd divide step 1708 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1709 1.1 fredette ds temp,arg1,temp ; 4th divide step 1710 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1711 1.1 fredette ds temp,arg1,temp ; 5th divide step 1712 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1713 1.1 fredette ds temp,arg1,temp ; 6th divide step 1714 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1715 1.1 fredette ds temp,arg1,temp ; 7th divide step 1716 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1717 1.1 fredette ds temp,arg1,temp ; 8th divide step 1718 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1719 1.1 fredette ds temp,arg1,temp ; 9th divide step 1720 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1721 1.1 fredette ds temp,arg1,temp ; 10th divide step 1722 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1723 1.1 fredette ds temp,arg1,temp ; 11th divide step 1724 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1725 1.1 fredette ds temp,arg1,temp ; 12th divide step 1726 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1727 1.1 fredette ds temp,arg1,temp ; 13th divide step 1728 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1729 1.1 fredette ds temp,arg1,temp ; 14th divide step 1730 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1731 1.1 fredette ds temp,arg1,temp ; 15th divide step 1732 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1733 1.1 fredette ds temp,arg1,temp ; 16th divide step 1734 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1735 1.1 fredette ds temp,arg1,temp ; 17th divide step 1736 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1737 1.1 fredette ds temp,arg1,temp ; 18th divide step 1738 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1739 1.1 fredette ds temp,arg1,temp ; 19th divide step 1740 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1741 1.1 fredette ds temp,arg1,temp ; 20th divide step 1742 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1743 1.1 fredette ds temp,arg1,temp ; 21st divide step 1744 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1745 1.1 fredette ds temp,arg1,temp ; 22nd divide step 1746 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1747 1.1 fredette ds temp,arg1,temp ; 23rd divide step 1748 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1749 1.1 fredette ds temp,arg1,temp ; 24th divide step 1750 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1751 1.1 fredette ds temp,arg1,temp ; 25th divide step 1752 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1753 1.1 fredette ds temp,arg1,temp ; 26th divide step 1754 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1755 1.1 fredette ds temp,arg1,temp ; 27th divide step 1756 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1757 1.1 fredette ds temp,arg1,temp ; 28th divide step 1758 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1759 1.1 fredette ds temp,arg1,temp ; 29th divide step 1760 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1761 1.1 fredette ds temp,arg1,temp ; 30th divide step 1762 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1763 1.1 fredette ds temp,arg1,temp ; 31st divide step 1764 1.1 fredette addc retreg,retreg,retreg ; shift retreg with/into carry 1765 1.1 fredette ds temp,arg1,temp ; 32nd divide step, 1766 1.1 fredette addc retreg,retreg,retreg ; shift last retreg bit into retreg 1767 1.1 fredette xor,>= arg0,arg1,0 ; get correct sign of quotient 1768 1.1 fredette sub 0,retreg,retreg ; based on operand signs 1769 1.1 fredette bv,n 0(r31) 1770 1.1 fredette nop 1771 1.1 fredette ;______________________________________________________________________ 1772 1.1 fredette small_divisor: 1773 1.1 fredette blr,n arg1,r0 1774 1.1 fredette nop 1775 1.1 fredette ; table for divisor == 0,1, ... ,15 1776 1.1 fredette addit,= 0,arg1,r0 ; trap if divisor == 0 1777 1.1 fredette nop 1778 1.1 fredette bv 0(r31) ; divisor == 1 1779 1.1 fredette copy arg0,retreg 1780 1.1 fredette b,n $$divI_2 ; divisor == 2 1781 1.1 fredette nop 1782 1.1 fredette b,n $$divI_3 ; divisor == 3 1783 1.1 fredette nop 1784 1.1 fredette b,n $$divI_4 ; divisor == 4 1785 1.1 fredette nop 1786 1.1 fredette b,n $$divI_5 ; divisor == 5 1787 1.1 fredette nop 1788 1.1 fredette b,n $$divI_6 ; divisor == 6 1789 1.1 fredette nop 1790 1.1 fredette b,n $$divI_7 ; divisor == 7 1791 1.1 fredette nop 1792 1.1 fredette b,n $$divI_8 ; divisor == 8 1793 1.1 fredette nop 1794 1.1 fredette b,n $$divI_9 ; divisor == 9 1795 1.1 fredette nop 1796 1.1 fredette b,n $$divI_10 ; divisor == 10 1797 1.1 fredette nop 1798 1.1 fredette b normal1 ; divisor == 11 1799 1.1 fredette add,>= 0,arg0,retreg 1800 1.1 fredette b,n $$divI_12 ; divisor == 12 1801 1.1 fredette nop 1802 1.1 fredette b normal1 ; divisor == 13 1803 1.1 fredette add,>= 0,arg0,retreg 1804 1.1 fredette b,n $$divI_14 ; divisor == 14 1805 1.1 fredette nop 1806 1.1 fredette b,n $$divI_15 ; divisor == 15 1807 1.1 fredette nop 1808 1.1 fredette ;______________________________________________________________________ 1809 1.1 fredette negative1: 1810 1.1 fredette sub 0,arg0,retreg ; result is negation of dividend 1811 1.1 fredette bv 0(r31) 1812 1.1 fredette addo arg0,arg1,r0 ; trap iff dividend==0x80000000 && divisor==-1 1813 1.1 fredette .procend 1814 1.1 fredette .end 1815