gcconfig: Add machine type S390.

* include/private/gcconfig: Add machine type S390.  Add s390x support.
	* include/private/gc_locks.h (GC_test_and_set): Implement for s390.
	(GC_compare_and_exchange): Likewise.

From-SVN: r57592
This commit is contained in:
Ulrich Weigand 2002-09-27 20:40:06 +00:00 committed by Ulrich Weigand
parent fc5295fa6a
commit 10a197ee7c
3 changed files with 61 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2002-09-27 Ulrich Weigand <uweigand@de.ibm.com>
* include/private/gcconfig: Add machine type S390. Add s390x support.
* include/private/gc_locks.h (GC_test_and_set): Implement for s390.
(GC_compare_and_exchange): Likewise.
2002-09-24 Jason Thorpe <thorpej@wasabisystems.com>
* include/private/gcconfig.h: Fix NetBSD/mips parameters.

View File

@ -209,6 +209,19 @@
}
# define GC_TEST_AND_SET_DEFINED
# endif /* ARM32 */
# ifdef S390
inline static int GC_test_and_set(volatile unsigned int *addr) {
int ret;
__asm__ __volatile__ (
" l %0,0(%2)\n"
"0: cs %0,%1,0(%2)\n"
" jl 0b"
: "=&d" (ret)
: "d" (1), "a" (addr)
: "cc", "memory");
return ret;
}
# endif
# endif /* __GNUC__ */
# if (defined(ALPHA) && !defined(__GNUC__))
# define GC_test_and_set(addr) __cxx_test_and_set_atomic(addr, 1)
@ -330,6 +343,27 @@
}
# endif /* 0 */
# endif /* IA64 */
# if defined(S390)
# if !defined(GENERIC_COMPARE_AND_SWAP)
inline static GC_bool GC_compare_and_exchange(volatile C_word *addr,
GC_word old, GC_word new_val)
{
int retval;
__asm__ __volatile__ (
# ifndef __s390x__
" cs %1,%2,0(%3)\n"
# else
" csg %1,%2,0(%3)\n"
# endif
" ipm %0\n"
" srl %0,28\n"
: "=&d" (retval), "+d" (old)
: "d" (new_val), "a" (addr)
: "cc", "memory");
return retval == 0;
}
# endif
# endif
# if !defined(GENERIC_COMPARE_AND_SWAP)
/* Returns the original value of *addr. */
inline static GC_word GC_atomic_add(volatile GC_word *addr,

View File

@ -370,7 +370,7 @@
# define mach_type_known
# endif
# if defined(__s390__) && defined(LINUX)
# define S370
# define S390
# define mach_type_known
# endif
# if defined(__GNU__)
@ -419,7 +419,8 @@
/* (CX_UX and DGUX) */
/* S370 ==> 370-like machine */
/* running Amdahl UTS4 */
/* or a 390 running LINUX */
/* S390 ==> 390-like machine */
/* running LINUX */
/* ARM32 ==> Intel StrongARM */
/* IA64 ==> Intel IPF */
/* (e.g. Itanium) */
@ -1523,12 +1524,29 @@
# define DATAEND (_end)
# define HEURISTIC2
# endif
# endif
# ifdef S390
# define MACH_TYPE "S390"
# define USE_GENERIC_PUSH_REGS
# ifndef __s390x__
# define ALIGNMENT 4
# define CPP_WORDSZ 32
# else
# define ALIGNMENT 8
# define CPP_WORDSZ 64
# define HBLKSIZE 4096
# endif
# ifdef LINUX
# define OS_TYPE "LINUX"
# define HEURISTIC1
# define LINUX_STACKBOTTOM
# define DYNAMIC_LOADING
extern int __data_start[];
# define DATASTART ((ptr_t)(__data_start))
extern int _end[];
# define DATAEND (_end)
# define CACHE_LINE_SIZE 256
# define GETPAGESIZE() 4096
# endif
# endif