home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / emulate / sparc / mul.s < prev    next >
Text File  |  1991-11-01  |  2KB  |  132 lines

  1. !
  2. ! test mulscc insn
  3. !
  4. ! small case
  5.     mov    723,%o0
  6.     call    .umul
  7.     mov    123,%o1
  8.     bne,a    .+0x8
  9.     unimp    0
  10.     set    88929,%l0
  11.     cmp    %o0,%l0
  12.     bne,a    .+0x80
  13.     unimp    0
  14.     tst    %o1
  15.     bne,a    .+0x80
  16.     unimp    0
  17. ! medium-size case
  18.     set    12345,%o0
  19.     set    6789,%o1
  20.     call    .umul
  21.     nop
  22.     bne,a    .+0x8
  23.     unimp    0
  24.     set    83810205,%l0
  25.     cmp    %o0,%l0
  26.     bne,a    .+0x80
  27.     unimp    0
  28.     tst    %o1
  29.     bne,a    .+0x80
  30.     unimp    0
  31. ! large case
  32.     set    0x12345678,%o0
  33.     set    0x98765432,%o1
  34.     call    .umul
  35.     nop
  36.     be,a    .+0x8
  37.     unimp    0
  38.     set    0xd5e84370,%l0
  39.     set    0xad77d73,%l1
  40.     cmp    %o0,%l0
  41.     bne,a    .+0x80
  42.     unimp    0
  43.     cmp    %o1,%l1
  44.     bne,a    .+0x80
  45.     unimp    0
  46. exit:
  47.     mov    1,%g1
  48.     clr    %o0
  49.     ta    0
  50.     nop
  51.  
  52. !
  53. !  The following was taken verbatim from Appendix E of the SPARC 
  54. !  Architecture Manual, Rev. A, 22 Oct. 1987
  55. !
  56. .umul:
  57.     or    %o0, %o1, %o4 
  58.     mov    %o0, %y
  59.     andncc    %o4, 0xfff, %o5
  60.     be    mul_shortway
  61.     andcc    %g0, %g0, %o4
  62. !
  63. ! long multiply
  64. !
  65.     mulscc    %o4, %o1, %o4  ! First iteration of 33
  66.     mulscc     %o4, %o1, %o4
  67.     mulscc     %o4, %o1, %o4
  68.     mulscc     %o4, %o1, %o4
  69.     mulscc     %o4, %o1, %o4
  70.     mulscc     %o4, %o1, %o4
  71.     mulscc     %o4, %o1, %o4
  72.     mulscc     %o4, %o1, %o4
  73.     mulscc     %o4, %o1, %o4
  74.     mulscc     %o4, %o1, %o4
  75.     mulscc     %o4, %o1, %o4
  76.     mulscc     %o4, %o1, %o4
  77.     mulscc     %o4, %o1, %o4
  78.     mulscc     %o4, %o1, %o4
  79.     mulscc     %o4, %o1, %o4
  80.     mulscc     %o4, %o1, %o4
  81.     mulscc     %o4, %o1, %o4
  82.     mulscc     %o4, %o1, %o4
  83.     mulscc     %o4, %o1, %o4
  84.     mulscc     %o4, %o1, %o4
  85.     mulscc     %o4, %o1, %o4
  86.     mulscc     %o4, %o1, %o4
  87.     mulscc     %o4, %o1, %o4
  88.     mulscc     %o4, %o1, %o4
  89.     mulscc     %o4, %o1, %o4
  90.     mulscc     %o4, %o1, %o4
  91.     mulscc     %o4, %o1, %o4
  92.     mulscc     %o4, %o1, %o4
  93.     mulscc     %o4, %o1, %o4
  94.     mulscc     %o4, %o1, %o4
  95.     mulscc     %o4, %o1, %o4
  96.     mulscc     %o4, %o1, %o4 ! 32nd iteration
  97.     mulscc     %o4, %g0, %o4 ! last iteration only shifts
  98.  
  99.     tst    %o1
  100.     bge    L1
  101.     nop
  102.     add    %o4, %o0, %o4
  103. L1:    
  104.     rd    %y, %o0
  105.     retl
  106.     addcc    %o4, %g0, %o1    ! return high
  107.                 ! bits and set zero bit appropriately
  108. mul_shortway:
  109.     mulscc     %o4, %o1, %o4     ! first iteration of 13
  110.     mulscc     %o4, %o1, %o4
  111.     mulscc     %o4, %o1, %o4
  112.     mulscc     %o4, %o1, %o4
  113.     mulscc     %o4, %o1, %o4
  114.     mulscc     %o4, %o1, %o4
  115.     mulscc     %o4, %o1, %o4
  116.     mulscc     %o4, %o1, %o4
  117.     mulscc     %o4, %o1, %o4
  118.     mulscc     %o4, %o1, %o4
  119.     mulscc     %o4, %o1, %o4
  120.     mulscc     %o4, %o1, %o4      ! 12th iteration
  121.     mulscc    %o4, %g0, %o4    ! last iteration only shifts
  122.  
  123.     rd     %y, %o5
  124.     sll    %o4, 12, %o4
  125.     srl    %o5, 20, %o5
  126.     or    %o5, %o4, %o0
  127.  
  128.     retl
  129.     addcc    %g0, %g0, %o1
  130.     nop
  131.  
  132.