Commit | Line | Data |
---|---|---|
a71a29de YS |
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 |