|
@@ -41,6 +41,10 @@
|
|
|
#endif
|
|
#endif
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+#if !defined(EX_LD) && !defined(EX_ST)
|
|
|
|
|
+#define NON_USER_COPY
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
#ifndef EX_LD
|
|
#ifndef EX_LD
|
|
|
#define EX_LD(x) x
|
|
#define EX_LD(x) x
|
|
|
#endif
|
|
#endif
|
|
@@ -197,9 +201,13 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */
|
|
|
mov EX_RETVAL(%o3), %o0
|
|
mov EX_RETVAL(%o3), %o0
|
|
|
|
|
|
|
|
.Llarge_src_unaligned:
|
|
.Llarge_src_unaligned:
|
|
|
|
|
+#ifdef NON_USER_COPY
|
|
|
|
|
+ VISEntryHalfFast(.Lmedium_vis_entry_fail)
|
|
|
|
|
+#else
|
|
|
|
|
+ VISEntryHalf
|
|
|
|
|
+#endif
|
|
|
andn %o2, 0x3f, %o4
|
|
andn %o2, 0x3f, %o4
|
|
|
sub %o2, %o4, %o2
|
|
sub %o2, %o4, %o2
|
|
|
- VISEntryHalf
|
|
|
|
|
alignaddr %o1, %g0, %g1
|
|
alignaddr %o1, %g0, %g1
|
|
|
add %o1, %o4, %o1
|
|
add %o1, %o4, %o1
|
|
|
EX_LD(LOAD(ldd, %g1 + 0x00, %f0))
|
|
EX_LD(LOAD(ldd, %g1 + 0x00, %f0))
|
|
@@ -240,6 +248,10 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len */
|
|
|
nop
|
|
nop
|
|
|
ba,a,pt %icc, .Lmedium_unaligned
|
|
ba,a,pt %icc, .Lmedium_unaligned
|
|
|
|
|
|
|
|
|
|
+#ifdef NON_USER_COPY
|
|
|
|
|
+.Lmedium_vis_entry_fail:
|
|
|
|
|
+ or %o0, %o1, %g2
|
|
|
|
|
+#endif
|
|
|
.Lmedium:
|
|
.Lmedium:
|
|
|
LOAD(prefetch, %o1 + 0x40, #n_reads_strong)
|
|
LOAD(prefetch, %o1 + 0x40, #n_reads_strong)
|
|
|
andcc %g2, 0x7, %g0
|
|
andcc %g2, 0x7, %g0
|