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:
parent
fc5295fa6a
commit
10a197ee7c
@ -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.
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user