configure.host: Add SH support.
* configure.host: Add SH support. * sysdep/sh/locks.h: New file. From-SVN: r55922
This commit is contained in:
parent
4ba126e468
commit
d8278e27fe
@ -1,3 +1,8 @@
|
||||
2002-08-01 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
* configure.host: Add SH support.
|
||||
* sysdep/sh/locks.h: New file.
|
||||
|
||||
2002-07-31 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
|
||||
|
||||
* java/awt/Frame.java (Frame): Remove println calls.
|
||||
|
@ -135,6 +135,14 @@ case "${host}" in
|
||||
enable_getenv_properties_default=no
|
||||
enable_main_args_default=no
|
||||
;;
|
||||
sh-* | sh[34]*-*)
|
||||
sysdeps_dir=sh
|
||||
libgcj_flags="${libgcj_flags} -mieee"
|
||||
libgcj_interpreter=yes
|
||||
CHECKREFSPEC=-fcheck-references
|
||||
EXCEPTIONSPEC=
|
||||
enable_hash_synchronization_default=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
# This case statement supports generic port properties and may refine
|
||||
|
72
libjava/sysdep/sh/locks.h
Normal file
72
libjava/sysdep/sh/locks.h
Normal file
@ -0,0 +1,72 @@
|
||||
// locks.h - Thread synchronization primitives. SuperH implementation.
|
||||
|
||||
/* Copyright (C) 2002 Free Software Foundation
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
#ifndef __SYSDEP_LOCKS_H__
|
||||
#define __SYSDEP_LOCKS_H__
|
||||
|
||||
typedef size_t obj_addr_t; /* Integer type big enough for object */
|
||||
/* address. */
|
||||
|
||||
static unsigned char __cas_lock = 0;
|
||||
|
||||
inline static void
|
||||
__cas_start_atomic (void)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
do
|
||||
__asm__ __volatile__ ("tas.b @%1; movt %0"
|
||||
: "=r" (val)
|
||||
: "r" (&__cas_lock)
|
||||
: "memory");
|
||||
while (val == 0);
|
||||
}
|
||||
|
||||
inline static void
|
||||
__cas_end_atomic (void)
|
||||
{
|
||||
__asm__ __volatile__ (" " : : : "memory");
|
||||
__cas_lock = 0;
|
||||
}
|
||||
|
||||
inline static bool
|
||||
compare_and_swap (volatile obj_addr_t *addr, obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
{
|
||||
bool ret;
|
||||
|
||||
__cas_start_atomic ();
|
||||
if (*addr != old)
|
||||
ret = false;
|
||||
else
|
||||
{
|
||||
*addr = new_val;
|
||||
ret = true;
|
||||
}
|
||||
__cas_end_atomic ();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
inline static void
|
||||
release_set (volatile obj_addr_t *addr, obj_addr_t new_val)
|
||||
{
|
||||
__asm__ __volatile__ (" " : : : "memory");
|
||||
*(addr) = new_val;
|
||||
}
|
||||
|
||||
inline static bool
|
||||
compare_and_swap_release (volatile obj_addr_t *addr, obj_addr_t old,
|
||||
obj_addr_t new_val)
|
||||
{
|
||||
return compare_and_swap (addr, old, new_val);
|
||||
}
|
||||
|
||||
#endif /* ! __SYSDEP_LOCKS_H__ */
|
Loading…
Reference in New Issue
Block a user