home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Black Box 4
/
BlackBox.cdr
/
progasm
/
sprcbnch.arj
/
MUL.S
< prev
next >
Wrap
Text File
|
1991-11-01
|
2KB
|
132 lines
!
! test mulscc insn
!
! small case
mov 723,%o0
call .umul
mov 123,%o1
bne,a .+0x8
unimp 0
set 88929,%l0
cmp %o0,%l0
bne,a .+0x80
unimp 0
tst %o1
bne,a .+0x80
unimp 0
! medium-size case
set 12345,%o0
set 6789,%o1
call .umul
nop
bne,a .+0x8
unimp 0
set 83810205,%l0
cmp %o0,%l0
bne,a .+0x80
unimp 0
tst %o1
bne,a .+0x80
unimp 0
! large case
set 0x12345678,%o0
set 0x98765432,%o1
call .umul
nop
be,a .+0x8
unimp 0
set 0xd5e84370,%l0
set 0xad77d73,%l1
cmp %o0,%l0
bne,a .+0x80
unimp 0
cmp %o1,%l1
bne,a .+0x80
unimp 0
exit:
mov 1,%g1
clr %o0
ta 0
nop
!
! The following was taken verbatim from Appendix E of the SPARC
! Architecture Manual, Rev. A, 22 Oct. 1987
!
.umul:
or %o0, %o1, %o4
mov %o0, %y
andncc %o4, 0xfff, %o5
be mul_shortway
andcc %g0, %g0, %o4
!
! long multiply
!
mulscc %o4, %o1, %o4 ! First iteration of 33
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 ! 32nd iteration
mulscc %o4, %g0, %o4 ! last iteration only shifts
tst %o1
bge L1
nop
add %o4, %o0, %o4
L1:
rd %y, %o0
retl
addcc %o4, %g0, %o1 ! return high
! bits and set zero bit appropriately
mul_shortway:
mulscc %o4, %o1, %o4 ! first iteration of 13
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 ! 12th iteration
mulscc %o4, %g0, %o4 ! last iteration only shifts
rd %y, %o5
sll %o4, 12, %o4
srl %o5, 20, %o5
or %o5, %o4, %o0
retl
addcc %g0, %g0, %o1
nop