home *** CD-ROM | disk | FTP | other *** search
- !
- ! 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
-
-