mirror of https://gitee.com/openkylin/linux.git
ARCv2: lib: memset: Don't assume 64-bit load/stores
There are configurations which may not have LDD/STD Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
This commit is contained in:
parent
21481f2cfe
commit
262137bca7
|
@ -10,12 +10,6 @@
|
|||
|
||||
#undef PREALLOC_NOT_AVAIL
|
||||
|
||||
#ifdef PREALLOC_NOT_AVAIL
|
||||
#define PREWRITE(A,B) prefetchw [(A),(B)]
|
||||
#else
|
||||
#define PREWRITE(A,B) prealloc [(A),(B)]
|
||||
#endif
|
||||
|
||||
ENTRY(memset)
|
||||
prefetchw [r0] ; Prefetch the write location
|
||||
mov.f 0, r2
|
||||
|
@ -51,9 +45,15 @@ ENTRY(memset)
|
|||
|
||||
;;; Convert len to Dwords, unfold x8
|
||||
lsr.f lp_count, lp_count, 6
|
||||
|
||||
lpnz @.Lset64bytes
|
||||
;; LOOP START
|
||||
PREWRITE(r3, 64) ;Prefetch the next write location
|
||||
#ifdef PREALLOC_NOT_AVAIL
|
||||
prefetchw [r3, 64] ;Prefetch the next write location
|
||||
#else
|
||||
prealloc [r3, 64]
|
||||
#endif
|
||||
#ifdef CONFIG_ARC_HAS_LL64
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
|
@ -62,16 +62,45 @@ ENTRY(memset)
|
|||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
#else
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
#endif
|
||||
.Lset64bytes:
|
||||
|
||||
lsr.f lp_count, r2, 5 ;Last remaining max 124 bytes
|
||||
lpnz .Lset32bytes
|
||||
;; LOOP START
|
||||
prefetchw [r3, 32] ;Prefetch the next write location
|
||||
#ifdef CONFIG_ARC_HAS_LL64
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
std.ab r4, [r3, 8]
|
||||
#else
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
st.ab r4, [r3, 4]
|
||||
#endif
|
||||
.Lset32bytes:
|
||||
|
||||
and.f lp_count, r2, 0x1F ;Last remaining 31 bytes
|
||||
|
|
Loading…
Reference in New Issue