These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / arch / h8300 / lib / mulsi3.S
1 ;
2 ; mulsi3 for H8/300H - based on Renesas SH implementation
3 ;
4 ; by Toshiyasu Morita
5 ;
6 ; Old code:
7 ;
8 ; 16b * 16b = 372 states (worst case)
9 ; 32b * 32b = 724 states (worst case)
10 ;
11 ; New code:
12 ;
13 ; 16b * 16b =  48 states
14 ; 16b * 32b =  72 states
15 ; 32b * 32b =  92 states
16 ;
17
18         .global __mulsi3
19 __mulsi3:
20         mov.w   r1,r2   ; ( 2 states) b * d
21         mulxu   r0,er2  ; (22 states)
22
23         mov.w   e0,r3   ; ( 2 states) a * d
24         beq     L_skip1 ; ( 4 states)
25         mulxu   r1,er3  ; (22 states)
26         add.w   r3,e2   ; ( 2 states)
27
28 L_skip1:
29         mov.w   e1,r3   ; ( 2 states) c * b
30         beq     L_skip2 ; ( 4 states)
31         mulxu   r0,er3  ; (22 states)
32         add.w   r3,e2   ; ( 2 states)
33
34 L_skip2:
35         mov.l   er2,er0 ; ( 2 states)
36         rts             ; (10 states)
37
38         .end