Commit b8b7ac24 by Jim Wilson

(ashiftrt_r4_*): Rewrite for efficiency.

(ashrsi3, lshrsi3, lshrsi3): Add.

From-SVN: r9521
parent 2a3c15b5
......@@ -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
......@@ -480,4 +958,3 @@ ret: rts
mov r4,r0
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment