diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..a76dc24
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,6 @@
+
+Bionic support for SuperH
+-------------------------
+Bionic support for SuperH architecture is written by
+Shin-ichiro KAWASAKI <shinichiro.kawasaki.mg@hitachi.com>
+and Contributed to Android by Hitachi, Ltd. and Renesas Solutions Corp.
diff --git a/libc/README b/libc/README
index 4e29f12..d92d85d 100644
--- a/libc/README
+++ b/libc/README
@@ -1,4 +1,5 @@
-Welcome to Bionic, Android small and custom C library for the Android platform
+Welcome to Bionic, Android's small and custom C library for the Android
+platform.
 
 Bionic is mainly a port of the BSD C library to our Linux kernel with the
 following additions/changes:
diff --git a/libc/arch-arm/bionic/atomics_arm.S b/libc/arch-arm/bionic/atomics_arm.S
index f8b23e6..0cd0b92 100644
--- a/libc/arch-arm/bionic/atomics_arm.S
+++ b/libc/arch-arm/bionic/atomics_arm.S
@@ -138,8 +138,18 @@
 #endif
 
 /* r0(new) r1(addr) -> r0(old) */
+/* replaced swp instruction with ldrex/strex for ARMv6 & ARMv7 */
 __atomic_swap:
+#if defined (_ARM_HAVE_LDREX_STREX)
+1:  ldrex   r2, [r1]
+    strex   r3, r0, [r1]
+    teq     r3, #0
+    bne     1b
+    mov     r0, r2
+    mcr     p15, 0, r0, c7, c10, 5 /* or, use dmb */
+#else
     swp     r0, r0, [r1]
+#endif
     bx      lr
 
 /* __futex_wait(*ftx, val, *timespec) */
diff --git a/libc/arch-arm/include/machine/cpu-features.h b/libc/arch-arm/include/machine/cpu-features.h
index f836006..ecf6ff6 100644
--- a/libc/arch-arm/include/machine/cpu-features.h
+++ b/libc/arch-arm/include/machine/cpu-features.h
@@ -149,6 +149,13 @@
 #  define __ARM_HAVE_PC_INTERWORK
 #endif
 
+/* define _ARM_HAVE_LDREX_STREX for ARMv6 and ARMv7 architecure to be
+ * used in replacement of depricated swp instruction
+ */
+#if __ARM_ARCH__ >= 6
+#  define _ARM_HAVE_LDREX_STREX
+#endif
+
 
 /* Assembly-only macros */
 
diff --git a/libc/bionic/logd_write.c b/libc/bionic/logd_write.c
index 211b527..3336428 100644
--- a/libc/bionic/logd_write.c
+++ b/libc/bionic/logd_write.c
@@ -46,62 +46,80 @@
 #define LOG_BUF_SIZE	1024
 
 typedef enum {
-    LOG_ID_MAIN = 0,
+    LOG_ID_NONE = 0,
+    LOG_ID_MAIN,
     LOG_ID_RADIO,
     LOG_ID_MAX
 } log_id_t;
 
-static int __write_to_log_init(log_id_t, struct iovec *vec);
-static int (*write_to_log)(log_id_t, struct iovec *vec) = __write_to_log_init;
+/* logger handles writing to object, pointed by log channel id */
+typedef int (*logger_function_t)(log_id_t log_id, struct iovec *vec);
+
+typedef struct {
+    logger_function_t logger;
+    int               fd;
+    const char        *path;
+} log_channel_t;
+
+static int __write_to_log_init(log_id_t log_id, struct iovec *vec);
+static int __write_to_log_null(log_id_t log_id, struct iovec *vec);
+
 static pthread_mutex_t log_init_lock = PTHREAD_MUTEX_INITIALIZER;
 
-static int log_fds[(int)LOG_ID_MAX] = { -1, -1 };
+log_channel_t log_channels[LOG_ID_MAX] = {
+    { __write_to_log_null, -1, NULL },
+    { __write_to_log_init, -1, "/dev/"LOGGER_LOG_MAIN },
+    { __write_to_log_init, -1, "/dev/"LOGGER_LOG_RADIO }
+};
 
-static int __write_to_log_null(log_id_t log_fd, struct iovec *vec)
+static int __write_to_log_null(log_id_t log_id, struct iovec *vec)
 {
-    return -1;
+    /* 
+     * ALTERED behaviour from previous version
+     * always returns successful result
+     */
+    int    i = 0;
+    size_t res = 0;
+
+    for ( ; i < 3; ++i) {
+        res += vec[i].iov_len;
+    }
+
+    return (int)res;
 }
 
+/*
+ *  it's supposed, that log_id contains valid id always.
+ *  this check must be performed in higher level functions
+ */
 static int __write_to_log_kernel(log_id_t log_id, struct iovec *vec)
 {
     ssize_t ret;
-    int log_fd;
-
-    if ((int)log_id >= 0 && (int)log_id < (int)LOG_ID_MAX) {
-        log_fd = log_fds[(int)log_id];
-    } else {
-        return EBADF;
-    }
 
     do {
-        ret = writev(log_fd, vec, 3);
-    } while (ret < 0 && errno == EINTR);
+        ret = writev(log_channels[log_id].fd, vec, 3);
+    } while ((ret < 0) && (errno == EINTR));
 
     return ret;
 }
 
 static int __write_to_log_init(log_id_t log_id, struct iovec *vec)
 {
-    pthread_mutex_lock(&log_init_lock);
+    if ((LOG_ID_NONE < log_id) && (log_id < LOG_ID_MAX)) {
+        pthread_mutex_lock(&log_init_lock);
 
-    if (write_to_log == __write_to_log_init) {
-        log_fds[LOG_ID_MAIN] = open("/dev/"LOGGER_LOG_MAIN, O_WRONLY);
-        log_fds[LOG_ID_RADIO] = open("/dev/"LOGGER_LOG_RADIO, O_WRONLY);
+        int fd = open(log_channels[log_id].path, O_WRONLY);
 
-        write_to_log = __write_to_log_kernel;
+        log_channels[log_id].logger =
+            (fd < 0) ? __write_to_log_null : __write_to_log_kernel;
 
-        if (log_fds[LOG_ID_MAIN] < 0 || log_fds[LOG_ID_RADIO] < 0) {
-            close(log_fds[LOG_ID_MAIN]);
-            close(log_fds[LOG_ID_RADIO]);
-            log_fds[LOG_ID_MAIN] = -1;
-            log_fds[LOG_ID_RADIO] = -1;
-            write_to_log = __write_to_log_null;
-        }
+        pthread_mutex_unlock(&log_init_lock);
+
+        return log_channels[log_id].logger(log_id, vec);
     }
 
-    pthread_mutex_unlock(&log_init_lock);
-
-    return write_to_log(log_id, vec);
+    /* log_id is invalid */
+    return -1;
 }
 
 static int __android_log_write(int prio, const char *tag, const char *msg)
@@ -109,7 +127,7 @@
     struct iovec vec[3];
     log_id_t log_id = LOG_ID_MAIN;
 
-    if (!tag)
+    if (tag == NULL)
         tag = "";
 
     if (!strcmp(tag, "HTC_RIL"))
@@ -122,7 +140,7 @@
     vec[2].iov_base   = (void *) msg;
     vec[2].iov_len    = strlen(msg) + 1;
 
-    return write_to_log(log_id, vec);
+    return log_channels[log_id].logger(log_id, vec);
 }
 
 
diff --git a/libc/bionic/pthread.c b/libc/bionic/pthread.c
index d8a3166..26e27ce 100644
--- a/libc/bionic/pthread.c
+++ b/libc/bionic/pthread.c
@@ -1241,22 +1241,12 @@
                             pthread_mutex_t * mutex,
                             unsigned msecs)
 {
-    int oldvalue;
     struct timespec ts;
-    int status;
 
     ts.tv_sec = msecs / 1000;
     ts.tv_nsec = (msecs % 1000) * 1000000;
 
-    oldvalue = cond->value;
-
-    pthread_mutex_unlock(mutex);
-    status = __futex_wait(&cond->value, oldvalue, &ts);
-    pthread_mutex_lock(mutex);
-
-    if(status == (-ETIMEDOUT)) return ETIMEDOUT;
-
-    return 0;
+    return __pthread_cond_timedwait_relative(cond, mutex, &ts);
 }
 
 
diff --git a/libc/include/stdint.h b/libc/include/stdint.h
index 39a8ab8..237baa2 100644
--- a/libc/include/stdint.h
+++ b/libc/include/stdint.h
@@ -46,13 +46,17 @@
 #  define  __STDINT_MACROS
 #endif
 
+#if !defined __STRICT_ANSI__ || __STDC_VERSION__ >= 199901L
+#  define __STDC_INT64__
+#endif
+
 typedef __int8_t      int8_t;
 typedef __uint8_t     uint8_t;
 typedef __int16_t     int16_t;
 typedef __uint16_t    uint16_t;
 typedef __int32_t     int32_t;
 typedef __uint32_t    uint32_t;
-#if !defined(__STRICT_ANSI__)
+#if defined(__STDC_INT64__)
 typedef __int64_t     int64_t;
 typedef __uint64_t    uint64_t;
 #endif
@@ -157,7 +161,7 @@
 #  define UINT_FAST32_C(c) UINT32_C(c)
 #endif
 
-#if !defined(__STRICT_ANSI__)
+#if defined(__STDC_INT64__)
 /*
  *  int64_t
  */
@@ -198,7 +202,7 @@
 #  define __PRIFAST_RANK ""
 #  define __PRIPTR_RANK  ""
 
-#endif /* !__STRICT_ANSI__ */
+#endif /* __STDC_INT64__ */
 
 /*
  * intptr_t & uintptr_t
@@ -221,7 +225,7 @@
  *  intmax_t & uintmax_t
  */
 
-#if !defined(__STRICT_ANSI__)
+#if defined(__STDC_INT64__)
 
 typedef uint64_t uintmax_t;
 typedef int64_t  intmax_t;
@@ -233,7 +237,7 @@
 #define INTMAX_C(c)	INT64_C(c)
 #define UINTMAX_C(c)	UINT64_C(c)
 
-#else /* __STRICT_ANSI__ */
+#else /* !__STDC_INT64__ */
 
 typedef uint32_t  uintmax_t;
 typedef int32_t   intmax_t;
@@ -245,7 +249,7 @@
 #define INTMAX_C(c)	INT32_C(c)
 #define UINTMAX_C(c)	UINT32_C(c)
 
-#endif /* __STRICT_ANSI__ */
+#endif /* !__STDC_INT64__ */
 
 
 /* size_t is defined by the GCC-specific <stddef.h> */
diff --git a/libc/include/strings.h b/libc/include/strings.h
index 1f73e21..fee7dc4 100644
--- a/libc/include/strings.h
+++ b/libc/include/strings.h
@@ -39,6 +39,7 @@
 #ifndef _STRINGS_H_
 #define _STRINGS_H_
 
+#include <sys/types.h>
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
diff --git a/libc/netbsd/net/getservent.c b/libc/netbsd/net/getservent.c
index 65fbd7e..9f6ec32 100644
--- a/libc/netbsd/net/getservent.c
+++ b/libc/netbsd/net/getservent.c
@@ -27,7 +27,7 @@
  */
 #include <sys/cdefs.h>
 #include <sys/types.h>
-#include <sys/endian.h>
+#include <endian.h>
 #include <netdb.h>
 #include "servent.h"
 #include "services.h"
diff --git a/libc/private/bionic_tls.h b/libc/private/bionic_tls.h
index 82c8cd9..742ef8c 100644
--- a/libc/private/bionic_tls.h
+++ b/libc/private/bionic_tls.h
@@ -87,8 +87,10 @@
 extern int __set_tls(void *ptr);
 
 /* get the TLS */
+/* Linux kernel helpers for its TLS implementation */
 #ifdef __arm__
-#  define __get_tls() ( *((volatile void **) 0xffff0ff0) )
+typedef void* (__kernel_get_tls_t)(void);
+#define __get_tls (*(__kernel_get_tls_t *)0xffff0fe0)
 #else
 extern void*  __get_tls( void );
 #endif
diff --git a/libdl/Android.mk b/libdl/Android.mk
index 150f704..8d56f9a 100644
--- a/libdl/Android.mk
+++ b/libdl/Android.mk
@@ -36,6 +36,21 @@
 LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
 LOCAL_SYSTEM_SHARED_LIBRARIES := 
 
+ifeq ($(TARGET_ARCH),sh)
+# for SuperH, additional code is necessary to handle .ctors section.
+GEN_SOBEGIN := $(TARGET_OUT_STATIC_LIBRARIES)/sobegin.o
+$(GEN_SOBEGIN): $(LOCAL_PATH)/arch-sh/sobegin.S
+	@mkdir -p $(dir $@)
+	$(TARGET_CC) -o $@ -c $<
+
+GEN_SOEND := $(TARGET_OUT_STATIC_LIBRARIES)/soend.o
+$(GEN_SOEND): $(LOCAL_PATH)/arch-sh/soend.S
+	@mkdir -p $(dir $@)
+	$(TARGET_CC) -o $@ -c $<
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(GEN_SOBEGIN) $(GEN_SOEND)
+endif
+
 include $(BUILD_SHARED_LIBRARY)
 
 BUILD_DLTEST:=0
diff --git a/libdl/arch-sh/sobegin.S b/libdl/arch-sh/sobegin.S
new file mode 100644
index 0000000..976b1a6
--- /dev/null
+++ b/libdl/arch-sh/sobegin.S
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2009 The Android Open Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+    .text
+    .align 4
+    .type  _init,#function
+    .globl _init
+
+# The toolchain for SH-Linux does not produce INIT_ARRAY information which
+# bionic linker relies on.  Instead of it, The toolchain for SH-Linux produces
+# INIT information when it find the function whose name is '_init'.
+#
+_init:
+    sts.l   pr, @-r15
+    mov.l   r8, @-r15
+    mov.l   0f, r8      /* first entry is invalid */
+.L_loop:
+    add     #4, r8
+    mov.l   @r8, r0
+    cmp/eq  #0, r0      /* Zero terimnated. See 'soend.so'. */
+    bt      .L_end
+    jsr     @r0         /* invoke a constructor */
+    nop
+    bra     .L_loop
+    nop
+.L_end:
+    mov.l   @r15+, r8
+    lds.l   @r15+, pr
+
+    rts
+    nop
+
+    .balign 4
+0:  .long   __CTOR_LIST__
+
+# the .ctors section contains a list of pointers to "constructor"
+# functions that need to be called in order during C library initialization,
+# just before the program is being run. This is a C++ requirement
+#
+# the last entry shall be 0, and is defined in crtend.S
+#
+    .section .ctors, "aw"
+    .globl __CTOR_LIST__
+__CTOR_LIST__:
+    .long   -1
+
diff --git a/libdl/arch-sh/soend.S b/libdl/arch-sh/soend.S
new file mode 100644
index 0000000..7fa98a4
--- /dev/null
+++ b/libdl/arch-sh/soend.S
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 The Android Open Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+    .section .ctors, "aw"
+    .long 0
+
diff --git a/libdl/libdl.c b/libdl/libdl.c
index 52707f1..7971942 100644
--- a/libdl/libdl.c
+++ b/libdl/libdl.c
@@ -24,7 +24,7 @@
 
 #ifdef __arm__
 void *dl_unwind_find_exidx(void *pc, int *pcount) { return 0; }
-#elif defined(__i386__)
+#elif defined(__i386__) || defined(__sh__)
 /* we munge the cb definition so we don't have to include any headers here.
  * It won't affect anything since these are just symbols anyway */
 int dl_iterate_phdr(int (*cb)(void *info, void *size, void *data),
diff --git a/libm/Android.mk b/libm/Android.mk
index 8f0c3b1..fa73aff 100644
--- a/libm/Android.mk
+++ b/libm/Android.mk
@@ -170,7 +170,17 @@
 
     libm_common_includes = $(LOCAL_PATH)/i386 $(LOCAL_PATH)/i387
   else
-    $(error "Unknown architecture")
+    ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-sh)
+      libm_common_src_files += \
+		sh/fenv.c \
+		src/s_scalbln.c \
+		src/s_scalbn.c \
+		src/s_scalbnf.c
+
+      libm_common_includes = $(LOCAL_PATH)/sh
+    else
+      $(error "Unknown architecture")
+    endif
   endif
 endif
 
diff --git a/libm/sh/_fpmath.h b/libm/sh/_fpmath.h
new file mode 100644
index 0000000..f75ec7b
--- /dev/null
+++ b/libm/sh/_fpmath.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2009 Android Open Source Project, All rights reserved.
+ *   Derived from "bionic/libm/arm/_fpmath.h"
+ *   Copyright (c) 2002, 2003 David Schultz <das@FreeBSD.ORG>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Assumes that 'long double' on SH-linux is just an alias for 'double'.
+ */
+union IEEEl2bits {
+	long double	e;
+	struct {
+#if  __BYTE_ORDER == __LITTLE_ENDIAN
+		unsigned int	manl	:32;
+		unsigned int	manh	:20;
+		unsigned int	exp	:11;
+		unsigned int	sign	:1;
+#elif __BYTE_ORDER == __BIG_ENDIAN
+		unsigned int	sign	:1;
+		unsigned int	exp	:11;
+		unsigned int	manh	:20;
+		unsigned int	manl	:32;
+#endif
+	} bits;
+};
+
+/*
+ * LDBL_NBIT is a mask indicating the position of the integer
+ * bit in a long double.  But SH4 does not support it.
+ */
+#define	LDBL_NBIT	0
+#define	mask_nbit_l(u)	((void)0)
+
+#define	LDBL_MANH_SIZE	20
+#define	LDBL_MANL_SIZE	32
diff --git a/libm/sh/fenv.c b/libm/sh/fenv.c
new file mode 100644
index 0000000..ca8f476
--- /dev/null
+++ b/libm/sh/fenv.c
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2009 Android Open Source Project, All rights reserved.
+ *   Derived from "bionic/libm/arm/fenv.c"
+ *   Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+long __fpscr_values[2] = { 0L, 0x80000L };
diff --git a/libm/sh/fenv.h b/libm/sh/fenv.h
new file mode 100644
index 0000000..e872f47
--- /dev/null
+++ b/libm/sh/fenv.h
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2009 Android Open Source Project, All rights reserved.
+ *   Derived from "bionic/libm/arm/fenv.h"
+ *   Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _FENV_H_
+#define _FENV_H_
+
+#include <stdio.h>
+#include <sys/types.h>
+
+typedef	uint32_t	fenv_t;
+typedef	uint32_t	fexcept_t;
+
+/* Exception flags */
+#define	FE_INVALID		0x0010
+#define	FE_DIVBYZERO	0x0008
+#define	FE_OVERFLOW		0x0004
+#define	FE_UNDERFLOW	0x0002
+#define	FE_INEXACT		0x0001
+#define	FE_ALL_EXCEPT	(FE_DIVBYZERO | FE_INEXACT | \
+				 FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
+
+/* Rounding modes */
+#define	FE_TONEAREST	0x0000
+#define	FE_TOWARDZERO	0x0001
+#define	FE_UPWARD	0x0002 /* not supporetd */
+#define	FE_DOWNWARD	0x0003 /* not supporetd */
+#define	_ROUND_MASK	(FE_TONEAREST | FE_DOWNWARD | \
+				 FE_UPWARD | FE_TOWARDZERO)
+
+/* bit shift for FPSCR mapping */
+#define	_FPUE_CAUSE_SHIFT	12
+#define	_FPUE_ENABLE_SHIFT	17
+#define	_FPUE_FLAG_SHIFT	 2
+
+/* bit shifters */
+#define	_FPUE_CAUSE(_EXCS)	((_EXCS) << _FPUE_CAUSE_SHIFT)
+#define	_FPUE_ENABLE(_EXCS)	((_EXCS) << _FPUE_ENABLE_SHIFT)
+#define	_FPUE_FLAG(_EXCS)	((_EXCS) << _FPUE_FLAG_SHIFT)
+
+#define	_GET_FPUE_CAUSE(_FPUE)		(((_FPUE) >> _FPUE_CAUSE_SHIFT) & FE_ALL_EXCEPT)
+#define	_GET_FPUE_ENABLE(_FPUE)	(((_FPUE) >> _FPUE_ENABLE_SHIFT)& FE_ALL_EXCEPT)
+#define	_GET_FPUE_FLAG(_FPUE)		(((_FPUE) >> _FPUE_FLAG_SHIFT) & FE_ALL_EXCEPT)
+
+
+/* FPSCR register accessors */
+#ifdef	__SH4_NOFPU__
+#define	__read_fpscr(_ptr)
+#define	__write_fpscr(_val)
+#else
+#define	__read_fpscr(_ptr)	__asm __volatile("sts fpscr, %0" : "=r" (*(_ptr)))
+#define	__write_fpscr(_val)	__asm __volatile("lds %0, fpscr" : : "r" (_val))
+#endif
+
+
+/* functions for libm */
+static __inline int
+feclearexcept(int __excepts)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	__fpscr &= ~_FPUE_FLAG(__excepts);
+	__write_fpscr(__fpscr);
+	return (0);
+}
+
+static __inline int
+fegetexceptflag(fexcept_t *__flagp, int __excepts)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	*__flagp = _GET_FPUE_FLAG(__fpscr) & __excepts;
+	return (0);
+}
+
+
+static __inline int
+fesetexceptflag(const fexcept_t *__flagp, int __excepts)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	__fpscr &= ~_FPUE_FLAG(__excepts);
+	__fpscr |= ~_FPUE_FLAG(*__flagp & __excepts);
+	__write_fpscr(__fpscr);
+	return (0);
+}
+
+
+static __inline int
+feraiseexcept(int __excepts)
+{
+	fexcept_t __ex = __excepts;
+
+	fesetexceptflag(&__ex, __excepts);	/* XXX */
+	return (0);
+}
+
+
+static __inline int
+fetestexcept(int __excepts)
+{
+	fexcept_t __ex;
+
+	fegetexceptflag(&__ex,  __excepts);
+	return (__ex);
+}
+
+
+static __inline int
+fegetround(void)
+{
+	uint32_t __fpscr = 0;
+
+	__read_fpscr(&__fpscr);
+	return (__fpscr & _ROUND_MASK);	
+}
+
+static __inline int
+fesetround(int __round)
+{
+	uint32_t __fpscr = 0;
+
+	if (__round == FE_UPWARD || __round == FE_DOWNWARD) {
+		fprintf(stderr, "libm superh : "
+			"upward/downward rounding not supporetd.\n");
+		return -1;
+	}
+
+	__read_fpscr(&__fpscr);
+	__fpscr &= ~_ROUND_MASK;
+	__fpscr |= (__round & _ROUND_MASK);
+	__write_fpscr(__fpscr);
+	return (0);
+}
+
+static __inline int
+fegetenv(fenv_t *__envp)
+{
+	__read_fpscr(__envp);
+	return (0);
+}
+
+static __inline int
+feholdexcept(fenv_t *__envp)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	*__envp = __fpscr;
+	__fpscr &= ~_FPUE_FLAG(FE_ALL_EXCEPT);
+	__write_fpscr(__fpscr);
+	return (0);
+}
+
+
+static __inline int
+fesetenv(const fenv_t *__envp)
+{
+	__write_fpscr(*__envp);
+	return (0);
+}
+
+
+static __inline int
+feupdateenv(const fenv_t *__envp)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	__write_fpscr(*__envp);
+	feraiseexcept(_GET_FPUE_FLAG(__fpscr));
+	return (0);
+}
+
+#if __BSD_VISIBLE
+
+static __inline int
+feenableexcept(int __mask)
+{
+	uint32_t __old_fpscr, __new_fpscr;
+
+	__read_fpscr(&__old_fpscr);
+	__new_fpscr = __old_fpscr | _FPUE_ENABLE(__mask & FE_ALL_EXCEPT);
+	__write_fpscr(__new_fpscr);
+	return (_GET_FPUE_ENABLE(__old_fpscr));
+}
+
+static __inline int
+fedisableexcept(int __mask)
+{
+	uint32_t __old_fpscr, __new_fpscr;
+
+	__read_fpscr(&__old_fpscr);
+	__new_fpscr = __old_fpscr & ~(_FPUE_ENABLE(__mask & FE_ALL_EXCEPT));
+	__write_fpscr(__new_fpscr);
+	return (_GET_FPUE_ENABLE(__old_fpscr));
+}
+
+static __inline int
+fegetexcept(void)
+{
+	uint32_t __fpscr;
+
+	__read_fpscr(&__fpscr);
+	return (_GET_FPUE_ENABLE(__fpscr));
+}
+
+#endif /* __BSD_VISIBLE */
+
+
+#endif /* _FENV_H_ */
+
