summary refs log tree commit diff
path: root/sysdeps/s390
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/s390')
-rw-r--r--sysdeps/s390/bits/byteswap.h (renamed from sysdeps/s390/s390-64/bits/byteswap.h)56
-rw-r--r--sysdeps/s390/bits/link.h13
-rw-r--r--sysdeps/s390/bits/setjmp.h (renamed from sysdeps/s390/s390-32/bits/setjmp.h)9
-rw-r--r--sysdeps/s390/bits/wordsize.h7
-rw-r--r--sysdeps/s390/s390-32/bits/byteswap.h91
-rw-r--r--sysdeps/s390/s390-32/bits/link.h5
-rw-r--r--sysdeps/s390/s390-64/bits/link.h5
-rw-r--r--sysdeps/s390/s390-64/bits/setjmp.h52
8 files changed, 81 insertions, 157 deletions
diff --git a/sysdeps/s390/s390-64/bits/byteswap.h b/sysdeps/s390/bits/byteswap.h
index b8cfdb2cb5..6a4b4ae425 100644
--- a/sysdeps/s390/s390-64/bits/byteswap.h
+++ b/sysdeps/s390/bits/byteswap.h
@@ -1,5 +1,5 @@
-/* Macros to swap the order of bytes in integer values.  64 bit S/390 version.
-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+/* Macros to swap the order of bytes in integer values.  s390 version.
+   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -22,6 +22,8 @@
 # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
 #endif
 
+#include <bits/wordsize.h>
+
 #ifndef _BITS_BYTESWAP_H
 #define _BITS_BYTESWAP_H 1
 
@@ -30,7 +32,8 @@
 
 /* Swap bytes in 16 bit value. */
 #if defined __GNUC__ && __GNUC__ >= 2
-# define __bswap_16(x) \
+# if __WORDSIZE == 64
+#  define __bswap_16(x) \
      (__extension__							      \
       ({ unsigned short int __v;		                              \
 	 if (__builtin_constant_p (x))					      \
@@ -42,6 +45,23 @@
               : "=&d" (__v) : "m" (__tmp) );                                  \
          }                                                                    \
 	 __v; }))
+# else
+#  define __bswap_16(x) \
+     (__extension__							      \
+      ({ unsigned short int __v;		                              \
+	 if (__builtin_constant_p (x))					      \
+	   __v = __bswap_constant_16 (x);				      \
+	 else {								      \
+           unsigned short int __tmp = (unsigned short int) (x);               \
+           __asm__ __volatile__ (                                             \
+              "sr   %0,%0\n"                                                  \
+              "la   1,%1\n"                                                   \
+              "icm  %0,2,1(1)\n"                                              \
+              "ic   %0,0(1)"                                                  \
+              : "=&d" (__v) : "m" (__tmp) : "1");                             \
+         }                                                                    \
+	 __v; }))
+# endif
 #else
 /* This is better than nothing.  */
 #define __bswap_16(x) __bswap_constant_16 (x)
@@ -53,6 +73,7 @@
       (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
 
 #if defined __GNUC__ && __GNUC__ >= 2
+# if __WORDSIZE == 64
 #  define __bswap_32(x) \
      (__extension__							      \
       ({ unsigned int __v;					              \
@@ -65,6 +86,24 @@
               : "=&d" (__v) : "m" (__tmp));                                   \
          }                                                                    \
 	 __v; }))
+# else
+#  define __bswap_32(x) \
+     (__extension__							      \
+      ({ unsigned int __v;				                      \
+	 if (__builtin_constant_p (x))					      \
+	   __v = __bswap_constant_32 (x);				      \
+	 else {								      \
+           unsigned int __tmp = (unsigned int) (x);                           \
+           __asm__ __volatile__ (                                             \
+              "la    1,%1\n"                                                  \
+              "icm   %0,8,3(1)\n"                                             \
+              "icm   %0,4,2(1)\n"                                             \
+              "icm   %0,2,1(1)\n"                                             \
+              "ic    %0,0(1)"                                                 \
+              : "=&d" (__v) : "m" (__tmp) : "1");                             \
+         }                                                                    \
+	 __v; }))
+# endif
 #else
 # define __bswap_32(x) __bswap_constant_32 (x)
 #endif
@@ -77,6 +116,7 @@
       (((x)&0x000000000000ff00) << 40) | (((x)&0x00000000000000ff) << 56))
 
 #if defined __GNUC__ && __GNUC__ >= 2
+# if __WORDSIZE == 64
 #  define __bswap_64(x) \
      (__extension__							      \
       ({ unsigned long __w;					              \
@@ -89,6 +129,16 @@
               : "=&d" (__w) : "m" (__tmp));                                   \
          }                                                                    \
 	 __w; }))
+# else
+#  define __bswap_64(x) \
+     __extension__					\
+       ({ union { unsigned long long int __ll;		\
+	          unsigned long int __l[2]; } __w, __r;	\
+          __w.__ll = (x);				\
+          __r.__l[0] = __bswap_32 (__w.__l[1]);		\
+          __r.__l[1] = __bswap_32 (__w.__l[0]);		\
+          __r.__ll; })
+# endif
 #else
 # define __bswap_64(x) __bswap_constant_64 (x)
 #endif
diff --git a/sysdeps/s390/bits/link.h b/sysdeps/s390/bits/link.h
new file mode 100644
index 0000000000..fc1fba363a
--- /dev/null
+++ b/sysdeps/s390/bits/link.h
@@ -0,0 +1,13 @@
+#if __WORDSIZE == 64
+struct link_map_machine
+  {
+    Elf64_Addr plt; /* Address of .plt + 0x2e */
+    Elf64_Addr gotplt; /* Address of .got + 0x18 */
+  };
+#else
+struct link_map_machine
+  {
+    Elf32_Addr plt; /* Address of .plt + 0x2c */
+    Elf32_Addr gotplt; /* Address of .got + 0x0c */
+  };
+#endif
diff --git a/sysdeps/s390/s390-32/bits/setjmp.h b/sysdeps/s390/bits/setjmp.h
index 607cdaf11a..35bc9a53f3 100644
--- a/sysdeps/s390/s390-32/bits/setjmp.h
+++ b/sysdeps/s390/bits/setjmp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -21,6 +21,8 @@
 #ifndef __S390_SETJMP_H__
 #define __S390_SETJMP_H__
 
+#include <bits/wordsize.h>
+
 #define __JB_GPR6	0
 #define __JB_GPR7	1
 #define __JB_GPR8	2
@@ -38,8 +40,13 @@ typedef struct {
     /* We save registers 6-15.  */
     long int __gregs[10];
 
+#if __WORDSIZE == 64
+   /* We save fpu registers 1, 3, 5 and 7.  */
+    long __fpregs[8];
+#else
     /* We save fpu registers 4 and 6.  */
     long __fpregs[4];
+#endif
 } __jmp_buf[1];
 
 #endif
diff --git a/sysdeps/s390/bits/wordsize.h b/sysdeps/s390/bits/wordsize.h
new file mode 100644
index 0000000000..4f50d8586c
--- /dev/null
+++ b/sysdeps/s390/bits/wordsize.h
@@ -0,0 +1,7 @@
+/* Determine the wordsize from the preprocessor defines.  */
+
+#if defined __s390x__
+# define __WORDSIZE	64
+#else
+# define __WORDSIZE	32
+#endif
diff --git a/sysdeps/s390/s390-32/bits/byteswap.h b/sysdeps/s390/s390-32/bits/byteswap.h
deleted file mode 100644
index ae128042f1..0000000000
--- a/sysdeps/s390/s390-32/bits/byteswap.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Macros to swap the order of bytes in integer values.  s390 version.
-   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
-   Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#if !defined _BYTESWAP_H && !defined _NETINET_IN_H
-# error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead."
-#endif
-
-#ifndef _BITS_BYTESWAP_H
-#define _BITS_BYTESWAP_H 1
-
-#define __bswap_constant_16(x) \
-     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
-
-/* Swap bytes in 16 bit value. */
-#if defined __GNUC__ && __GNUC__ >= 2
-# define __bswap_16(x) \
-     (__extension__							      \
-      ({ unsigned short int __v;		                              \
-	 if (__builtin_constant_p (x))					      \
-	   __v = __bswap_constant_16 (x);				      \
-	 else {								      \
-           unsigned short int __tmp = (unsigned short int) (x);               \
-           __asm__ __volatile__ (                                             \
-              "sr   %0,%0\n"                                                  \
-              "la   1,%1\n"                                                   \
-              "icm  %0,2,1(1)\n"                                              \
-              "ic   %0,0(1)"                                                  \
-              : "=&d" (__v) : "m" (__tmp) : "1");                             \
-         }                                                                    \
-	 __v; }))
-#else
-/* This is better than nothing.  */
-#define __bswap_16(x) __bswap_constant_16 (x)
-#endif
-
-/* Swap bytes in 32 bit value.  */
-#define __bswap_constant_32(x) \
-     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) |		      \
-      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
-
-#if defined __GNUC__ && __GNUC__ >= 2
-#  define __bswap_32(x) \
-     (__extension__							      \
-      ({ unsigned int __v;				                      \
-	 if (__builtin_constant_p (x))					      \
-	   __v = __bswap_constant_32 (x);				      \
-	 else {								      \
-           unsigned int __tmp = (unsigned int) (x);                           \
-           __asm__ __volatile__ (                                             \
-              "la    1,%1\n"                                                  \
-              "icm   %0,8,3(1)\n"                                             \
-              "icm   %0,4,2(1)\n"                                             \
-              "icm   %0,2,1(1)\n"                                             \
-              "ic    %0,0(1)"                                                 \
-              : "=&d" (__v) : "m" (__tmp) : "1");                             \
-         }                                                                    \
-	 __v; }))
-#else
-# define __bswap_32(x) __bswap_constant_32 (x)
-#endif
-
-#if defined __GNUC__ && __GNUC__ >= 2
-/* Swap bytes in 64 bit value.  */
-# define __bswap_64(x) \
-  __extension__						\
-  ({ union { unsigned long long int __ll;		\
-	     unsigned long int __l[2]; } __w, __r;	\
-     __w.__ll = (x);					\
-     __r.__l[0] = __bswap_32 (__w.__l[1]);		\
-     __r.__l[1] = __bswap_32 (__w.__l[0]);		\
-     __r.__ll; })
-#endif
-
-#endif /* _BITS_BYTESWAP_H */
diff --git a/sysdeps/s390/s390-32/bits/link.h b/sysdeps/s390/s390-32/bits/link.h
deleted file mode 100644
index 962cf56851..0000000000
--- a/sysdeps/s390/s390-32/bits/link.h
+++ /dev/null
@@ -1,5 +0,0 @@
-struct link_map_machine
-  {
-    Elf32_Addr plt; /* Address of .plt + 0x2c */
-    Elf32_Addr gotplt; /* Address of .got + 0x0c */
-  };
diff --git a/sysdeps/s390/s390-64/bits/link.h b/sysdeps/s390/s390-64/bits/link.h
deleted file mode 100644
index 34add4ffaa..0000000000
--- a/sysdeps/s390/s390-64/bits/link.h
+++ /dev/null
@@ -1,5 +0,0 @@
-struct link_map_machine
-  {
-    Elf64_Addr plt; /* Address of .plt + 0x2e */
-    Elf64_Addr gotplt; /* Address of .got + 0x18 */
-  };
diff --git a/sysdeps/s390/s390-64/bits/setjmp.h b/sysdeps/s390/s390-64/bits/setjmp.h
deleted file mode 100644
index 1bb3645f9c..0000000000
--- a/sysdeps/s390/s390-64/bits/setjmp.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-/* Define the machine-dependent type `jmp_buf'.  64 bit S/390 version.  */
-
-#ifndef __S390_SETJMP_H__
-#define __S390_SETJMP_H__
-
-#define	__JB_GPR6	0
-#define __JB_GPR7	1
-#define __JB_GPR8	2
-#define __JB_GPR9	3
-#define __JB_GPR10	4
-#define __JB_GPR11	5
-#define __JB_GPR12	6
-#define __JB_GPR13	7
-#define __JB_GPR14	8
-#define __JB_GPR15	9
-
-#ifndef	_ASM
-
-typedef struct {
-    /* We save registers 6-15.  */
-    long int __gregs[10];
-
-    /* We save fpu registers 4 and 6.  */
-    long __fpregs[8];
-} __jmp_buf[1];
-
-#endif
-
-/* Test if longjmp to JMPBUF would unwind the frame
-   containing a local variable at ADDRESS.  */
-#define _JMPBUF_UNWINDS(jmpbuf, address) \
-  ((void *) (address) < (void *) (jmpbuf)->__gregs[__JB_GPR15])
-
-#endif /* __S390_SETJMP_H__ */