Yoshinori Sato | a71a29d | 2015-01-28 02:48:15 +0900 | [diff] [blame] | 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 |