summaryrefslogtreecommitdiff
path: root/gcc/config/sh/lib1funcs.asm
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1995-04-27 18:08:43 -0700
committerJim Wilson <wilson@gcc.gnu.org>1995-04-27 18:08:43 -0700
commitb8b7ac24e3892e13e7bb7738c7d06d4ca9def6a9 (patch)
tree89a352ad42ad3e1580b45af11f094e5cdb093d40 /gcc/config/sh/lib1funcs.asm
parent2a3c15b553af7e9a5c3ae07c54c88d3ce0ad3332 (diff)
downloadgcc-b8b7ac24e3892e13e7bb7738c7d06d4ca9def6a9.tar.gz
(ashiftrt_r4_*): Rewrite for efficiency.
(ashrsi3, lshrsi3, lshrsi3): Add. From-SVN: r9521
Diffstat (limited to 'gcc/config/sh/lib1funcs.asm')
-rw-r--r--gcc/config/sh/lib1funcs.asm515
1 files changed, 496 insertions, 19 deletions
diff --git a/gcc/config/sh/lib1funcs.asm b/gcc/config/sh/lib1funcs.asm
index 1472d82b116..be24f76a8f4 100644
--- a/gcc/config/sh/lib1funcs.asm
+++ b/gcc/config/sh/lib1funcs.asm
@@ -34,6 +34,9 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
!! Contributed by Steve Chamberlain.
!! sac@cygnus.com
+!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
+!! recoded in assembly by Toshiyasu Morita
+!! tm@netcom.com
#ifdef L_ashiftrt
.global ___ashiftrt_r4_0
@@ -70,10 +73,13 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
.global ___ashiftrt_r4_31
.global ___ashiftrt_r4_32
+ .align 1
___ashiftrt_r4_32:
- shar r4
___ashiftrt_r4_31:
- shar r4
+ rotcl r4
+ rts
+ subc r4,r4
+
___ashiftrt_r4_30:
shar r4
___ashiftrt_r4_29:
@@ -87,7 +93,11 @@ ___ashiftrt_r4_26:
___ashiftrt_r4_25:
shar r4
___ashiftrt_r4_24:
- shar r4
+ shlr16 r4
+ shlr8 r4
+ rts
+ exts.b r4,r4
+
___ashiftrt_r4_23:
shar r4
___ashiftrt_r4_22:
@@ -103,7 +113,10 @@ ___ashiftrt_r4_18:
___ashiftrt_r4_17:
shar r4
___ashiftrt_r4_16:
- shar r4
+ shlr16 r4
+ rts
+ exts.w r4,r4
+
___ashiftrt_r4_15:
shar r4
___ashiftrt_r4_14:
@@ -141,6 +154,471 @@ ___ashiftrt_r4_0:
nop
#endif
+#ifdef L_ashiftrt_n
+
+!
+! ___ashrsi3
+!
+! Entry:
+!
+! r4: Value to shift
+! r5: Shifts
+!
+! Exit:
+!
+! r0: Result
+!
+! Destroys:
+!
+! r1
+!
+
+ .global ___ashrsi3
+ .align 2
+___ashrsi3:
+ mov #31,r0
+ cmp/hi r0,r5
+ bt L_ashrsi3_31
+ mov r5,r1 ! Remove later
+ mova L_ashrsi3_table,r0
+ shll r1 ! Remove later
+ mov.w @(r0,r1),r1 ! Change to mov.b @(r0,r5),r1
+ add r1,r0
+ jmp @r0
+ mov r4,r0
+
+L_ashrsi3_table:
+ .word L_ashrsi3_0-L_ashrsi3_table ! Change to .bytes
+ .word L_ashrsi3_1-L_ashrsi3_table
+ .word L_ashrsi3_2-L_ashrsi3_table
+ .word L_ashrsi3_3-L_ashrsi3_table
+ .word L_ashrsi3_4-L_ashrsi3_table
+ .word L_ashrsi3_5-L_ashrsi3_table
+ .word L_ashrsi3_6-L_ashrsi3_table
+ .word L_ashrsi3_7-L_ashrsi3_table
+ .word L_ashrsi3_8-L_ashrsi3_table
+ .word L_ashrsi3_9-L_ashrsi3_table
+ .word L_ashrsi3_10-L_ashrsi3_table
+ .word L_ashrsi3_11-L_ashrsi3_table
+ .word L_ashrsi3_12-L_ashrsi3_table
+ .word L_ashrsi3_13-L_ashrsi3_table
+ .word L_ashrsi3_14-L_ashrsi3_table
+ .word L_ashrsi3_15-L_ashrsi3_table
+ .word L_ashrsi3_16-L_ashrsi3_table
+ .word L_ashrsi3_17-L_ashrsi3_table
+ .word L_ashrsi3_18-L_ashrsi3_table
+ .word L_ashrsi3_19-L_ashrsi3_table
+ .word L_ashrsi3_20-L_ashrsi3_table
+ .word L_ashrsi3_21-L_ashrsi3_table
+ .word L_ashrsi3_22-L_ashrsi3_table
+ .word L_ashrsi3_23-L_ashrsi3_table
+ .word L_ashrsi3_24-L_ashrsi3_table
+ .word L_ashrsi3_25-L_ashrsi3_table
+ .word L_ashrsi3_26-L_ashrsi3_table
+ .word L_ashrsi3_27-L_ashrsi3_table
+ .word L_ashrsi3_28-L_ashrsi3_table
+ .word L_ashrsi3_29-L_ashrsi3_table
+ .word L_ashrsi3_30-L_ashrsi3_table
+ .word L_ashrsi3_31-L_ashrsi3_table
+
+L_ashrsi3_31:
+ rotcl r0
+ rts
+ subc r0,r0
+
+L_ashrsi3_30:
+ shar r0
+L_ashrsi3_29:
+ shar r0
+L_ashrsi3_28:
+ shar r0
+L_ashrsi3_27:
+ shar r0
+L_ashrsi3_26:
+ shar r0
+L_ashrsi3_25:
+ shar r0
+L_ashrsi3_24:
+ shlr16 r0
+ shlr8 r0
+ rts
+ exts.b r0,r0
+
+L_ashrsi3_23:
+ shar r0
+L_ashrsi3_22:
+ shar r0
+L_ashrsi3_21:
+ shar r0
+L_ashrsi3_20:
+ shar r0
+L_ashrsi3_19:
+ shar r0
+L_ashrsi3_18:
+ shar r0
+L_ashrsi3_17:
+ shar r0
+L_ashrsi3_16:
+ shlr16 r0
+ rts
+ exts.w r0,r0
+
+L_ashrsi3_15:
+ shar r0
+L_ashrsi3_14:
+ shar r0
+L_ashrsi3_13:
+ shar r0
+L_ashrsi3_12:
+ shar r0
+L_ashrsi3_11:
+ shar r0
+L_ashrsi3_10:
+ shar r0
+L_ashrsi3_9:
+ shar r0
+L_ashrsi3_8:
+ shar r0
+L_ashrsi3_7:
+ shar r0
+L_ashrsi3_6:
+ shar r0
+L_ashrsi3_5:
+ shar r0
+L_ashrsi3_4:
+ shar r0
+L_ashrsi3_3:
+ shar r0
+L_ashrsi3_2:
+ shar r0
+L_ashrsi3_1:
+ rts
+ shar r0
+
+L_ashrsi3_0:
+ rts
+ nop
+
+#endif
+
+#ifdef L_ashiftlt
+
+!
+! ___ashlsi3
+!
+! Entry:
+!
+! r4: Value to shift
+! r5: Shifts
+!
+! Exit:
+!
+! r0: Result
+!
+! Destroys:
+!
+! r1
+!
+ .global ___ashlsi3
+ .align 2
+___ashlsi3:
+ mov #31,r0
+ cmp/hi r0,r5
+ bt L_ashlsi3_32
+ mov r5,r1 ! Remove later
+ mova L_ashlsi3_table,r0
+ shll r1 ! Remove later
+ mov.w @(r0,r1),r1 ! Change to mov.b @(r0,r5),r1
+ add r1,r0
+ jmp @r0
+ mov r4,r0
+
+L_ashlsi3_table:
+ .word L_ashlsi3_0-L_ashlsi3_table ! Change to .bytes
+ .word L_ashlsi3_1-L_ashlsi3_table
+ .word L_ashlsi3_2-L_ashlsi3_table
+ .word L_ashlsi3_3-L_ashlsi3_table
+ .word L_ashlsi3_4-L_ashlsi3_table
+ .word L_ashlsi3_5-L_ashlsi3_table
+ .word L_ashlsi3_6-L_ashlsi3_table
+ .word L_ashlsi3_7-L_ashlsi3_table
+ .word L_ashlsi3_8-L_ashlsi3_table
+ .word L_ashlsi3_9-L_ashlsi3_table
+ .word L_ashlsi3_10-L_ashlsi3_table
+ .word L_ashlsi3_11-L_ashlsi3_table
+ .word L_ashlsi3_12-L_ashlsi3_table
+ .word L_ashlsi3_13-L_ashlsi3_table
+ .word L_ashlsi3_14-L_ashlsi3_table
+ .word L_ashlsi3_15-L_ashlsi3_table
+ .word L_ashlsi3_16-L_ashlsi3_table
+ .word L_ashlsi3_17-L_ashlsi3_table
+ .word L_ashlsi3_18-L_ashlsi3_table
+ .word L_ashlsi3_19-L_ashlsi3_table
+ .word L_ashlsi3_20-L_ashlsi3_table
+ .word L_ashlsi3_21-L_ashlsi3_table
+ .word L_ashlsi3_22-L_ashlsi3_table
+ .word L_ashlsi3_23-L_ashlsi3_table
+ .word L_ashlsi3_24-L_ashlsi3_table
+ .word L_ashlsi3_25-L_ashlsi3_table
+ .word L_ashlsi3_26-L_ashlsi3_table
+ .word L_ashlsi3_27-L_ashlsi3_table
+ .word L_ashlsi3_28-L_ashlsi3_table
+ .word L_ashlsi3_29-L_ashlsi3_table
+ .word L_ashlsi3_30-L_ashlsi3_table
+ .word L_ashlsi3_31-L_ashlsi3_table
+
+L_ashlsi3_6:
+ shll2 r0
+L_ashlsi3_4:
+ shll2 r0
+L_ashlsi3_2:
+ rts
+ shll2 r0
+
+L_ashlsi3_7:
+ shll2 r0
+L_ashlsi3_5:
+ shll2 r0
+L_ashlsi3_3:
+ shll2 r0
+L_ashlsi3_1:
+ rts
+ shll r0
+
+L_ashlsi3_14:
+ shll2 r0
+L_ashlsi3_12:
+ shll2 r0
+L_ashlsi3_10:
+ shll2 r0
+L_ashlsi3_8:
+ rts
+ shll8 r0
+
+L_ashlsi3_15:
+ shll2 r0
+L_ashlsi3_13:
+ shll2 r0
+L_ashlsi3_11:
+ shll2 r0
+L_ashlsi3_9:
+ shll8 r0
+ rts
+ shll r0
+
+L_ashlsi3_22:
+ shll2 r0
+L_ashlsi3_20:
+ shll2 r0
+L_ashlsi3_18:
+ shll2 r0
+L_ashlsi3_16:
+ rts
+ shll16 r0
+
+L_ashlsi3_23:
+ shll2 r0
+L_ashlsi3_21:
+ shll2 r0
+L_ashlsi3_19:
+ shll2 r0
+L_ashlsi3_17:
+ shll16 r0
+ rts
+ shll r0
+
+L_ashlsi3_30:
+ shll2 r0
+L_ashlsi3_28:
+ shll2 r0
+L_ashlsi3_26:
+ shll2 r0
+L_ashlsi3_24:
+ shll16 r0
+ rts
+ shll8 r0
+
+L_ashlsi3_31:
+ shll2 r0
+L_ashlsi3_29:
+ shll2 r0
+L_ashlsi3_27:
+ shll2 r0
+L_ashlsi3_25:
+ shll16 r0
+ shll8 r0
+ rts
+ shll r0
+
+L_ashlsi3_32:
+ rts
+ mov #0,r0
+
+L_ashlsi3_0:
+ rts
+ nop
+
+#endif
+
+#ifdef L_lshiftrt
+
+!
+! ___lshrsi3
+!
+! Entry:
+!
+! r4: Value to shift
+! r5: Shifts
+!
+! Exit:
+!
+! r0: Result
+!
+! Destroys:
+!
+! r1
+!
+ .global ___lshrsi3
+ .align 2
+___lshrsi3:
+ mov #31,r0
+ cmp/hi r0,r5
+ bt L_lshrsi3_32
+ mov r5,r1 ! Remove later
+ mova L_lshrsi3_table,r0
+ shll r1 ! Remove later
+ mov.w @(r0,r1),r1 ! Change to mov.b @(r0,r5),r1
+ add r1,r0
+ jmp @r0
+ mov r4,r0
+
+L_lshrsi3_table:
+ .word L_lshrsi3_0-L_lshrsi3_table ! Change to .bytes
+ .word L_lshrsi3_1-L_lshrsi3_table
+ .word L_lshrsi3_2-L_lshrsi3_table
+ .word L_lshrsi3_3-L_lshrsi3_table
+ .word L_lshrsi3_4-L_lshrsi3_table
+ .word L_lshrsi3_5-L_lshrsi3_table
+ .word L_lshrsi3_6-L_lshrsi3_table
+ .word L_lshrsi3_7-L_lshrsi3_table
+ .word L_lshrsi3_8-L_lshrsi3_table
+ .word L_lshrsi3_9-L_lshrsi3_table
+ .word L_lshrsi3_10-L_lshrsi3_table
+ .word L_lshrsi3_11-L_lshrsi3_table
+ .word L_lshrsi3_12-L_lshrsi3_table
+ .word L_lshrsi3_13-L_lshrsi3_table
+ .word L_lshrsi3_14-L_lshrsi3_table
+ .word L_lshrsi3_15-L_lshrsi3_table
+ .word L_lshrsi3_16-L_lshrsi3_table
+ .word L_lshrsi3_17-L_lshrsi3_table
+ .word L_lshrsi3_18-L_lshrsi3_table
+ .word L_lshrsi3_19-L_lshrsi3_table
+ .word L_lshrsi3_20-L_lshrsi3_table
+ .word L_lshrsi3_21-L_lshrsi3_table
+ .word L_lshrsi3_22-L_lshrsi3_table
+ .word L_lshrsi3_23-L_lshrsi3_table
+ .word L_lshrsi3_24-L_lshrsi3_table
+ .word L_lshrsi3_25-L_lshrsi3_table
+ .word L_lshrsi3_26-L_lshrsi3_table
+ .word L_lshrsi3_27-L_lshrsi3_table
+ .word L_lshrsi3_28-L_lshrsi3_table
+ .word L_lshrsi3_29-L_lshrsi3_table
+ .word L_lshrsi3_30-L_lshrsi3_table
+ .word L_lshrsi3_31-L_lshrsi3_table
+
+L_lshrsi3_6:
+ shlr2 r0
+L_lshrsi3_4:
+ shlr2 r0
+L_lshrsi3_2:
+ rts
+ shlr2 r0
+
+L_lshrsi3_7:
+ shlr2 r0
+L_lshrsi3_5:
+ shlr2 r0
+L_lshrsi3_3:
+ shlr2 r0
+L_lshrsi3_1:
+ rts
+ shlr r0
+
+L_lshrsi3_14:
+ shlr2 r0
+L_lshrsi3_12:
+ shlr2 r0
+L_lshrsi3_10:
+ shlr2 r0
+L_lshrsi3_8:
+ rts
+ shlr8 r0
+
+L_lshrsi3_15:
+ shlr2 r0
+L_lshrsi3_13:
+ shlr2 r0
+L_lshrsi3_11:
+ shlr2 r0
+L_lshrsi3_9:
+ shlr8 r0
+ rts
+ shlr r0
+
+L_lshrsi3_22:
+ shlr2 r0
+L_lshrsi3_20:
+ shlr2 r0
+L_lshrsi3_18:
+ shlr2 r0
+L_lshrsi3_16:
+ rts
+ shlr16 r0
+
+L_lshrsi3_23:
+ shlr2 r0
+L_lshrsi3_21:
+ shlr2 r0
+L_lshrsi3_19:
+ shlr2 r0
+L_lshrsi3_17:
+ shlr16 r0
+ rts
+ shlr r0
+
+L_lshrsi3_30:
+ shlr2 r0
+L_lshrsi3_28:
+ shlr2 r0
+L_lshrsi3_26:
+ shlr2 r0
+L_lshrsi3_24:
+ shlr16 r0
+ rts
+ shlr8 r0
+
+L_lshrsi3_31:
+ shlr2 r0
+L_lshrsi3_29:
+ shlr2 r0
+L_lshrsi3_27:
+ shlr2 r0
+L_lshrsi3_25:
+ shlr16 r0
+ shlr8 r0
+ rts
+ shlr r0
+
+L_lshrsi3_32:
+ rts
+ mov #0,r0
+
+L_lshrsi3_0:
+ rts
+ nop
+
+#endif
+
#ifdef L_movstr
.text
! done all the large groups, do the remainder
@@ -152,7 +630,7 @@ done:
shll2 r6
add r6,r0
jmp @r0
- add #64,r4
+ add #64,r4
.align 4
.global ___movstrSI64
___movstrSI64:
@@ -305,7 +783,7 @@ ___mulsi3:
swap.w r4,r2 ! r2 = bbaa
xtrct r2,r3 ! r3 = aacc
tst r3,r3 ! msws zero ?
- bf hiset
+ bf hiset
rts ! yes - then weve got the answer
sts macl,r0
@@ -313,14 +791,14 @@ hiset: sts macl,r0 ! r0 = bb*dd
mulu r2,r5 | brewing macl = aa*dd
sts macl,r1
mulu r3,r4 | brewing macl = cc*bb
- sts macl,r2
+ sts macl,r2
add r1,r2
shll16 r2
rts
add r2,r0
-
-
-#endif
+
+
+#endif
#ifdef L_sdivsi3
.title "SH DIVIDE"
!! 4 byte integer Divide code for the Hitachi SH
@@ -336,7 +814,7 @@ hiset: sts macl,r0 ! r0 = bb*dd
___sdivsi3:
mov r4,r1
mov r5,r0
-
+
tst r0,r0
bt div0
mov #0,r2
@@ -410,10 +888,10 @@ ___sdivsi3:
div1 r0,r3
rotcl r1
addc r2,r1
- rts
+ rts
mov r1,r0
-
+
div0: rts
mov #0,r0
@@ -426,7 +904,7 @@ div0: rts
!! Steve Chamberlain
!! sac@cygnus.com
!!
-!!
+!!
!! args in r4 and r5, result in r0, clobbers r4, pr, and t bit
.global ___udivsi3
@@ -434,12 +912,12 @@ div0: rts
___udivsi3:
longway:
mov #0,r0
- div0u
- ! get one bit from the msb of the numerator into the T
+ div0u
+ ! get one bit from the msb of the numerator into the T
! bit and divide it by whats in r5. Put the answer bit
! into the T bit so it can come out again at the bottom
- rotcl r4 ; div1 r5,r0
+ rotcl r4 ; div1 r5,r0
rotcl r4 ; div1 r5,r0
rotcl r4 ; div1 r5,r0
rotcl r4 ; div1 r5,r0
@@ -475,9 +953,8 @@ vshortway:
rotcl r4 ; div1 r5,r0
rotcl r4 ; div1 r5,r0
rotcl r4 ; div1 r5,r0
- rotcl r4
+ rotcl r4
ret: rts
mov r4,r0
#endif
-