summaryrefslogtreecommitdiff
path: root/linux/dev/include/asm-i386/segment.h
diff options
context:
space:
mode:
Diffstat (limited to 'linux/dev/include/asm-i386/segment.h')
-rw-r--r--linux/dev/include/asm-i386/segment.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/linux/dev/include/asm-i386/segment.h b/linux/dev/include/asm-i386/segment.h
index 73952b0..db06caa 100644
--- a/linux/dev/include/asm-i386/segment.h
+++ b/linux/dev/include/asm-i386/segment.h
@@ -92,6 +92,7 @@ static inline unsigned long __get_user(const void * y, int size)
}
}
+#if defined(__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
static inline void __generic_memcpy_tofs(void * to, const void * from, unsigned long n)
{
__asm__ volatile
@@ -272,6 +273,29 @@ __asm__("cld\n\t" \
__constant_memcpy_tofs((to),(from),(n)) : \
__generic_memcpy_tofs((to),(from),(n)))
+
+#else /* code for gcc-2.95.x and newer follows */
+
+static inline void memcpy_fromfs(void * to, const void * from, unsigned long n)
+{
+ char *d = (char *)to;
+ const char *s = (const char *)from;
+ while (n-- > 0) {
+ *d++ = __get_user(s++, 1);
+ }
+}
+
+static inline void memcpy_tofs(void * to, const void * from, unsigned long n)
+{
+ char *d = (char *)to;
+ const char *s = (const char *)from;
+ while (n-- > 0) {
+ __put_user(*s++, d++, 1);
+ }
+}
+
+#endif /* not gcc-2.95 */
+
/*
* These are deprecated..
*