!
! arith.s Takes care of standard arithmetic routines.
!
!**********************************************************************
!
! JCC mul (see appendice E)
!
!**********************************************************************
.seg "text"
.global .mul
.mul:
mov %o0, %y
andncc %o0, 0xfff, %g0
be mul.short
andcc %g0, %g0, %o4
mulscc %o4, %o1, %o4 ! iteration 1
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4 ! iteration 32
mulscc %o4, %g0, %o4 ! shifts only
tst %o0
rd %y, %o0
bge mul.1
tst %o0
sub %o4, %o1, %o4
mul.1:
bge mul.2
addcc %o4, %g0, %o1
retl
subcc %o4, -1, %g0
mul.short:
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4
mulscc %o4, %o1, %o4 ! iteration 12
mulscc %o4, %g0, %o4 ! shifts only
rd %y, %o5
sll %o4, 12, %o0
srl %o5, 20, %o5
orcc %o5, %o0, %o0
bge mul.3
sra %o4, 20, %o1
retl
subcc %o1, -1, %g0
mul.3:
retl
addcc %o1, %g0, %g0