* libc/machine/sh/memset.S: Avoid clobbering volatile
objects following a tiny to-be-set array in the same quadword.
This commit is contained in:
parent
8f8d09c041
commit
6f48c0ae7a
|
@ -1,3 +1,8 @@
|
||||||
|
2003-04-09 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* libc/machine/sh/memset.S: Avoid clobbering volatile
|
||||||
|
objects following a tiny to-be-set array in the same quadword.
|
||||||
|
|
||||||
2001-04-09 Corinna Vinschen <corinna@vinschen.de>
|
2001-04-09 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* libc/include/wchar.h: Add definitions for wcswidth and wcwidth.
|
* libc/include/wchar.h: Add definitions for wcswidth and wcwidth.
|
||||||
|
|
|
@ -12,9 +12,7 @@
|
||||||
ENTRY(memset)
|
ENTRY(memset)
|
||||||
#if __SHMEDIA__
|
#if __SHMEDIA__
|
||||||
pta/l multiquad, tr0
|
pta/l multiquad, tr0
|
||||||
mshflo.b r3,r3,r3
|
|
||||||
ptabs r18, tr2
|
ptabs r18, tr2
|
||||||
mperm.w r3, r63, r3 // Fill pattern now in every byte of r3
|
|
||||||
|
|
||||||
andi r2, -8, r25
|
andi r2, -8, r25
|
||||||
add r2, r4, r5
|
add r2, r4, r5
|
||||||
|
@ -23,16 +21,40 @@ ENTRY(memset)
|
||||||
cmveq r4, r25, r20
|
cmveq r4, r25, r20
|
||||||
bne/u r25, r20, tr0 // multiquad
|
bne/u r25, r20, tr0 // multiquad
|
||||||
|
|
||||||
ldlo.q r2, 0, r7
|
! This sequence could clobber volatile objects that are in the same
|
||||||
shlli r4, 2, r4
|
! quadword as a very short char array.
|
||||||
movi -1, r8
|
! ldlo.q r2, 0, r7
|
||||||
SHHI r8, r4, r8
|
! shlli r4, 2, r4
|
||||||
SHHI r8, r4, r8
|
! movi -1, r8
|
||||||
mcmv r7, r8, r3
|
! SHHI r8, r4, r8
|
||||||
stlo.q r2, 0, r3
|
! SHHI r8, r4, r8
|
||||||
|
! mcmv r7, r8, r3
|
||||||
|
! stlo.q r2, 0, r3
|
||||||
|
|
||||||
|
pta/l setlongs, tr0
|
||||||
|
movi 4, r8
|
||||||
|
bgeu/u r4, r8, tr0
|
||||||
|
pta/l endset, tr0
|
||||||
|
beqi/u r4, 0, tr0
|
||||||
|
st.b r2, 0, r3
|
||||||
|
beqi/u r4, 1, tr0
|
||||||
|
nop
|
||||||
|
st.b r2, 1, r3
|
||||||
|
beqi/l r4, 2, tr0
|
||||||
|
st.b r2,2,r3
|
||||||
|
endset: blink tr2, r63
|
||||||
|
setlongs:
|
||||||
|
mshflo.b r3, r3, r3
|
||||||
|
mperm.w r3, r63, r3 // Fill pattern now in every byte of r3
|
||||||
|
stlo.l r2, 0, r3
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
sthi.l r5, -1, r3
|
||||||
blink tr2, r63
|
blink tr2, r63
|
||||||
|
|
||||||
multiquad:
|
multiquad:
|
||||||
|
mshflo.b r3, r3, r3
|
||||||
|
mperm.w r3, r63, r3 // Fill pattern now in every byte of r3
|
||||||
pta/l lastquad, tr0
|
pta/l lastquad, tr0
|
||||||
stlo.q r2, 0, r3
|
stlo.q r2, 0, r3
|
||||||
sub r20, r25, r24
|
sub r20, r25, r24
|
||||||
|
|
Loading…
Reference in New Issue