From d04aacfc87503addc886a6a0ee9e69d73ffc280f Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
Date: Wed, 1 Aug 2012 09:36:01 +0000
Subject: lib2funcs.c (__clrsbhi2): New function.

	* config/m32c/lib2funcs.c (__clrsbhi2): New function.
	Implements __clrsb for an HImode argument.

From-SVN: r190032
---
 libgcc/ChangeLog               |  5 +++++
 libgcc/config/m32c/lib2funcs.c | 16 +++++++++++++++-
 2 files changed, 20 insertions(+), 1 deletion(-)

(limited to 'libgcc')

diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 9d629e6..62f9446 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-01  Nick Clifton  <nickc@redhat.com>
+
+	* config/m32c/lib2funcs.c (__clrsbhi2): New function.
+	Implements __clrsb for an HImode argument.
+
 2012-07-31  Nick Clifton  <nickc@redhat.com>
 
 	* config/stormy16/lib2funcs.c (__clrsbhi2): New function.
diff --git a/libgcc/config/m32c/lib2funcs.c b/libgcc/config/m32c/lib2funcs.c
index 274affc..76b237c 100644
--- a/libgcc/config/m32c/lib2funcs.c
+++ b/libgcc/config/m32c/lib2funcs.c
@@ -1,5 +1,5 @@
 /* libgcc routines for R8C/M16C/M32C
-   Copyright (C) 2005, 2009
+   Copyright (C) 2005, 2009, 2012
    Free Software Foundation, Inc.
    Contributed by Red Hat.
 
@@ -132,3 +132,17 @@ __umoddi3 (uint32_type a, uint32_type b)
 {
   return udivmodsi4 (a, b, 1);
 }
+
+/* Returns the number of leading redundant sign bits in X.
+   I.e. the number of bits following the most significant bit which are
+   identical to it.  There are no special cases for 0 or other values.  */
+
+int
+__clrsbhi2 (word_type x)
+{
+  if (x < 0)
+    x = ~x;
+  if (x == 0)
+    return 15;
+  return __builtin_clz (x) - 1;
+}
-- 
cgit v1.1