configure.host: Add SH support.

* configure.host: Add SH support.
        * sysdep/sh/locks.h: New file.

From-SVN: r55922
This commit is contained in:
Kaz Kojima 2002-08-01 05:34:54 +00:00
parent 4ba126e468
commit d8278e27fe
3 changed files with 85 additions and 0 deletions

View File

@ -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.

View File

@ -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
View 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__ */