root/arch/h8300/lib/mulsi3.S

/* [<][>][^][v][top][bottom][index][help] */
   1 ; SPDX-License-Identifier: GPL-2.0
   2 ;
   3 ; mulsi3 for H8/300H - based on Renesas SH implementation
   4 ;
   5 ; by Toshiyasu Morita
   6 ;
   7 ; Old code:
   8 ;
   9 ; 16b * 16b = 372 states (worst case)
  10 ; 32b * 32b = 724 states (worst case)
  11 ;
  12 ; New code:
  13 ;
  14 ; 16b * 16b =  48 states
  15 ; 16b * 32b =  72 states
  16 ; 32b * 32b =  92 states
  17 ;
  18 
  19         .global __mulsi3
  20 __mulsi3:
  21         mov.w   r1,r2   ; ( 2 states) b * d
  22         mulxu   r0,er2  ; (22 states)
  23 
  24         mov.w   e0,r3   ; ( 2 states) a * d
  25         beq     L_skip1 ; ( 4 states)
  26         mulxu   r1,er3  ; (22 states)
  27         add.w   r3,e2   ; ( 2 states)
  28 
  29 L_skip1:
  30         mov.w   e1,r3   ; ( 2 states) c * b
  31         beq     L_skip2 ; ( 4 states)
  32         mulxu   r0,er3  ; (22 states)
  33         add.w   r3,e2   ; ( 2 states)
  34 
  35 L_skip2:
  36         mov.l   er2,er0 ; ( 2 states)
  37         rts             ; (10 states)
  38 
  39         .end

/* [<][>][^][v][top][bottom][index][help] */