dcavalca / rpms / grub2

Forked from rpms/grub2 3 years ago
Clone

Blame SOURCES/0142-Files-reorganization-and-include-some-libgcc-fuction.patch

0dc71c
From a4ea9134214da4801400129cdf7108a5f9e98a10 Mon Sep 17 00:00:00 2001
0dc71c
From: Paulo Flabiano Smorigo <pfsmorigo@linux.vnet.ibm.com>
0dc71c
Date: Wed, 13 Aug 2014 19:00:19 +0000
0dc71c
Subject: [PATCH 142/143] Files reorganization and include some libgcc fuctions
0dc71c
0dc71c
As we avoid libgcc dependency for powerpc64el, we moved some functions
0dc71c
to other files and add the necessary ones.
0dc71c
0dc71c
* Makefile.core.def: Include compiler-rt.S.
0dc71c
* misc.c: Add the necessary libgcc functions.
0dc71c
* compiler-rt.S: New file.
0dc71c
* libgcc.h: Move some content from here ...
0dc71c
* compiler.h: ... to here.
0dc71c
0dc71c
Also-By: Brent Baude <bbaude@redhat.com>
0dc71c
Also-By: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
0dc71c
---
0dc71c
 grub-core/Makefile.core.def          |   1 +
0dc71c
 grub-core/kern/misc.c                | 107 ++++++++++++++++++++++++++++
0dc71c
 grub-core/kern/powerpc/compiler-rt.S | 130 +++++++++++++++++++++++++++++++++++
0dc71c
 include/grub/compiler.h              |  61 ++++++++++++++++
0dc71c
 include/grub/libgcc.h                |  67 ------------------
0dc71c
 5 files changed, 299 insertions(+), 67 deletions(-)
0dc71c
 create mode 100644 grub-core/kern/powerpc/compiler-rt.S
0dc71c
0dc71c
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
0dc71c
index 7bf1c8a..9ff9ae5 100644
0dc71c
--- a/grub-core/Makefile.core.def
0dc71c
+++ b/grub-core/Makefile.core.def
0dc71c
@@ -252,6 +252,7 @@ kernel = {
0dc71c
 
0dc71c
   powerpc_ieee1275 = kern/powerpc/cache.S;
0dc71c
   powerpc_ieee1275 = kern/powerpc/dl.c;
0dc71c
+  powerpc_ieee1275 = kern/powerpc/compiler-rt.S;
0dc71c
 
0dc71c
   sparc64_ieee1275 = kern/sparc64/cache.S;
0dc71c
   sparc64_ieee1275 = kern/sparc64/dl.c;
0dc71c
diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
0dc71c
index a56cfe7..a3e5056 100644
0dc71c
--- a/grub-core/kern/misc.c
0dc71c
+++ b/grub-core/kern/misc.c
0dc71c
@@ -1345,3 +1345,110 @@ grub_real_boot_time (const char *file,
0dc71c
   grub_error_pop ();
0dc71c
 }
0dc71c
 #endif
0dc71c
+
0dc71c
+#if defined (NO_LIBGCC)
0dc71c
+
0dc71c
+/* Based on libgcc2.c from gcc suite.  */
0dc71c
+int
0dc71c
+__ucmpdi2 (grub_uint64_t a, grub_uint64_t b)
0dc71c
+{
0dc71c
+  union component64 ac, bc;
0dc71c
+  ac.full = a;
0dc71c
+  bc.full = b;
0dc71c
+
0dc71c
+  if (ac.high < bc.high)
0dc71c
+    return 0;
0dc71c
+  else if (ac.high > bc.high)
0dc71c
+    return 2;
0dc71c
+
0dc71c
+  if (ac.low < bc.low)
0dc71c
+    return 0;
0dc71c
+  else if (ac.low > bc.low)
0dc71c
+    return 2;
0dc71c
+  return 1;
0dc71c
+}
0dc71c
+
0dc71c
+
0dc71c
+/* Based on libgcc2.c from gcc suite.  */
0dc71c
+grub_uint64_t
0dc71c
+__lshrdi3 (grub_uint64_t u, int b)
0dc71c
+{
0dc71c
+  if (b == 0)
0dc71c
+    return u;
0dc71c
+
0dc71c
+  const union component64 uu = {.full = u};
0dc71c
+  const int bm = 32 - b;
0dc71c
+  union component64 w;
0dc71c
+
0dc71c
+  if (bm <= 0)
0dc71c
+    {
0dc71c
+      w.high = 0;
0dc71c
+      w.low = (grub_uint32_t) uu.high >> -bm;
0dc71c
+    }
0dc71c
+  else
0dc71c
+    {
0dc71c
+      const grub_uint32_t carries = (grub_uint32_t) uu.high << bm;
0dc71c
+
0dc71c
+      w.high = (grub_uint32_t) uu.high >> b;
0dc71c
+      w.low = ((grub_uint32_t) uu.low >> b) | carries;
0dc71c
+    }
0dc71c
+
0dc71c
+  return w.full;
0dc71c
+}
0dc71c
+
0dc71c
+/* Based on libgcc2.c from gcc suite.  */
0dc71c
+grub_uint64_t
0dc71c
+__ashrdi3 (grub_uint64_t u, int b)
0dc71c
+{
0dc71c
+  if (b == 0)
0dc71c
+    return u;
0dc71c
+
0dc71c
+  const union component64 uu = {.full = u};
0dc71c
+  const int bm = 32 - b;
0dc71c
+  union component64 w;
0dc71c
+
0dc71c
+  if (bm <= 0)
0dc71c
+    {
0dc71c
+      /* w.high = 1..1 or 0..0 */
0dc71c
+      w.high = uu.high >> (32 - 1);
0dc71c
+      w.low = uu.high >> -bm;
0dc71c
+    }
0dc71c
+  else
0dc71c
+    {
0dc71c
+      const grub_uint32_t carries = (grub_uint32_t) uu.high << bm;
0dc71c
+
0dc71c
+      w.high = uu.high >> b;
0dc71c
+      w.low = ((grub_uint32_t) uu.low >> b) | carries;
0dc71c
+    }
0dc71c
+
0dc71c
+  return w.full;
0dc71c
+}
0dc71c
+
0dc71c
+/* Based on libgcc2.c from gcc suite.  */
0dc71c
+grub_uint64_t
0dc71c
+__ashldi3 (grub_uint64_t u, int b)
0dc71c
+{
0dc71c
+  if (b == 0)
0dc71c
+    return u;
0dc71c
+
0dc71c
+  const union component64 uu = {.full = u};
0dc71c
+  const int bm = 32 - b;
0dc71c
+  union component64 w;
0dc71c
+
0dc71c
+  if (bm <= 0)
0dc71c
+    {
0dc71c
+      w.low = 0;
0dc71c
+      w.high = (grub_uint32_t) uu.low << -bm;
0dc71c
+    }
0dc71c
+  else
0dc71c
+    {
0dc71c
+      const grub_uint32_t carries = (grub_uint32_t) uu.low >> bm;
0dc71c
+
0dc71c
+      w.low = (grub_uint32_t) uu.low << b;
0dc71c
+      w.high = ((grub_uint32_t) uu.high << b) | carries;
0dc71c
+    }
0dc71c
+
0dc71c
+  return w.full;
0dc71c
+}
0dc71c
+
0dc71c
+#endif
0dc71c
diff --git a/grub-core/kern/powerpc/compiler-rt.S b/grub-core/kern/powerpc/compiler-rt.S
0dc71c
new file mode 100644
0dc71c
index 0000000..63e3a0d
0dc71c
--- /dev/null
0dc71c
+++ b/grub-core/kern/powerpc/compiler-rt.S
0dc71c
@@ -0,0 +1,130 @@
0dc71c
+/*
0dc71c
+ * Special support for eabi and SVR4
0dc71c
+ *
0dc71c
+ *   Copyright (C) 1995-2014 Free Software Foundation, Inc.
0dc71c
+ *   Written By Michael Meissner
0dc71c
+ *   64-bit support written by David Edelsohn
0dc71c
+ *
0dc71c
+ * This file is free software; you can redistribute it and/or modify it
0dc71c
+ * under the terms of the GNU General Public License as published by the
0dc71c
+ * Free Software Foundation; either version 3, or (at your option) any
0dc71c
+ * later version.
0dc71c
+ *
0dc71c
+ * This file is distributed in the hope that it will be useful, but
0dc71c
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
0dc71c
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0dc71c
+ * General Public License for more details.
0dc71c
+ *
0dc71c
+ * Under Section 7 of GPL version 3, you are granted additional
0dc71c
+ * permissions described in the GCC Runtime Library Exception, version
0dc71c
+ * 3.1, as published by the Free Software Foundation.
0dc71c
+ *
0dc71c
+ * You should have received a copy of the GNU General Public License and
0dc71c
+ * a copy of the GCC Runtime Library Exception along with this program;
0dc71c
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
0dc71c
+ * <http://www.gnu.org/licenses/>.
0dc71c
+ */
0dc71c
+
0dc71c
+/* Do any initializations needed for the eabi environment */
0dc71c
+
0dc71c
+#include <grub/symbol.h>
0dc71c
+#include <grub/dl.h>
0dc71c
+
0dc71c
+	.section ".text"
0dc71c
+
0dc71c
+#define CFI_RESTORE(reg)		.cfi_restore reg
0dc71c
+#define CFI_OFFSET(reg, off)		.cfi_offset reg, off
0dc71c
+#define CFI_DEF_CFA_REGISTER(reg)	.cfi_def_cfa_register reg
0dc71c
+#define CFI_STARTPROC			.cfi_startproc
0dc71c
+#define CFI_ENDPROC			.cfi_endproc
0dc71c
+
0dc71c
+/* Routines for restoring integer registers, called by the compiler.  */
0dc71c
+/* Called with r11 pointing to the stack header word of the caller of the */
0dc71c
+/* function, just beyond the end of the integer restore area.  */
0dc71c
+
0dc71c
+CFI_STARTPROC
0dc71c
+CFI_DEF_CFA_REGISTER (11)
0dc71c
+CFI_OFFSET (65, 4)
0dc71c
+CFI_OFFSET (14, -72)
0dc71c
+CFI_OFFSET (15, -68)
0dc71c
+CFI_OFFSET (16, -64)
0dc71c
+CFI_OFFSET (17, -60)
0dc71c
+CFI_OFFSET (18, -56)
0dc71c
+CFI_OFFSET (19, -52)
0dc71c
+CFI_OFFSET (20, -48)
0dc71c
+CFI_OFFSET (21, -44)
0dc71c
+CFI_OFFSET (22, -40)
0dc71c
+CFI_OFFSET (23, -36)
0dc71c
+CFI_OFFSET (24, -32)
0dc71c
+CFI_OFFSET (25, -28)
0dc71c
+CFI_OFFSET (26, -24)
0dc71c
+CFI_OFFSET (27, -20)
0dc71c
+CFI_OFFSET (28, -16)
0dc71c
+CFI_OFFSET (29, -12)
0dc71c
+CFI_OFFSET (30, -8)
0dc71c
+CFI_OFFSET (31, -4)
0dc71c
+FUNCTION(_restgpr_14_x)	lwz	14,-72(11)	/* restore gp registers */
0dc71c
+CFI_RESTORE (14)
0dc71c
+FUNCTION(_restgpr_15_x)	lwz	15,-68(11)
0dc71c
+CFI_RESTORE (15)
0dc71c
+FUNCTION(_restgpr_16_x)	lwz	16,-64(11)
0dc71c
+CFI_RESTORE (16)
0dc71c
+FUNCTION(_restgpr_17_x)	lwz	17,-60(11)
0dc71c
+CFI_RESTORE (17)
0dc71c
+FUNCTION(_restgpr_18_x)	lwz	18,-56(11)
0dc71c
+CFI_RESTORE (18)
0dc71c
+FUNCTION(_restgpr_19_x)	lwz	19,-52(11)
0dc71c
+CFI_RESTORE (19)
0dc71c
+FUNCTION(_restgpr_20_x)	lwz	20,-48(11)
0dc71c
+CFI_RESTORE (20)
0dc71c
+FUNCTION(_restgpr_21_x)	lwz	21,-44(11)
0dc71c
+CFI_RESTORE (21)
0dc71c
+FUNCTION(_restgpr_22_x)	lwz	22,-40(11)
0dc71c
+CFI_RESTORE (22)
0dc71c
+FUNCTION(_restgpr_23_x)	lwz	23,-36(11)
0dc71c
+CFI_RESTORE (23)
0dc71c
+FUNCTION(_restgpr_24_x)	lwz	24,-32(11)
0dc71c
+CFI_RESTORE (24)
0dc71c
+FUNCTION(_restgpr_25_x)	lwz	25,-28(11)
0dc71c
+CFI_RESTORE (25)
0dc71c
+FUNCTION(_restgpr_26_x)	lwz	26,-24(11)
0dc71c
+CFI_RESTORE (26)
0dc71c
+FUNCTION(_restgpr_27_x)	lwz	27,-20(11)
0dc71c
+CFI_RESTORE (27)
0dc71c
+FUNCTION(_restgpr_28_x)	lwz	28,-16(11)
0dc71c
+CFI_RESTORE (28)
0dc71c
+FUNCTION(_restgpr_29_x)	lwz	29,-12(11)
0dc71c
+CFI_RESTORE (29)
0dc71c
+FUNCTION(_restgpr_30_x)	lwz	30,-8(11)
0dc71c
+CFI_RESTORE (30)
0dc71c
+FUNCTION(_restgpr_31_x)	lwz	0,4(11)
0dc71c
+				lwz	31,-4(11)
0dc71c
+CFI_RESTORE (31)
0dc71c
+				mtlr	0
0dc71c
+CFI_RESTORE (65)
0dc71c
+				mr	1,11
0dc71c
+CFI_DEF_CFA_REGISTER (1)
0dc71c
+				blr
0dc71c
+CFI_ENDPROC
0dc71c
+
0dc71c
+CFI_STARTPROC
0dc71c
+FUNCTION(_savegpr_14)	stw	14,-72(11)	/* save gp registers */
0dc71c
+FUNCTION(_savegpr_15)	stw	15,-68(11)
0dc71c
+FUNCTION(_savegpr_16)	stw	16,-64(11)
0dc71c
+FUNCTION(_savegpr_17)	stw	17,-60(11)
0dc71c
+FUNCTION(_savegpr_18)	stw	18,-56(11)
0dc71c
+FUNCTION(_savegpr_19)	stw	19,-52(11)
0dc71c
+FUNCTION(_savegpr_20)	stw	20,-48(11)
0dc71c
+FUNCTION(_savegpr_21)	stw	21,-44(11)
0dc71c
+FUNCTION(_savegpr_22)	stw	22,-40(11)
0dc71c
+FUNCTION(_savegpr_23)	stw	23,-36(11)
0dc71c
+FUNCTION(_savegpr_24)	stw	24,-32(11)
0dc71c
+FUNCTION(_savegpr_25)	stw	25,-28(11)
0dc71c
+FUNCTION(_savegpr_26)	stw	26,-24(11)
0dc71c
+FUNCTION(_savegpr_27)	stw	27,-20(11)
0dc71c
+FUNCTION(_savegpr_28)	stw	28,-16(11)
0dc71c
+FUNCTION(_savegpr_29)	stw	29,-12(11)
0dc71c
+FUNCTION(_savegpr_30)	stw	30,-8(11)
0dc71c
+FUNCTION(_savegpr_31)	stw	31,-4(11)
0dc71c
+			blr
0dc71c
+CFI_ENDPROC
0dc71c
diff --git a/include/grub/compiler.h b/include/grub/compiler.h
0dc71c
index c9e1d7a..a9a684c 100644
0dc71c
--- a/include/grub/compiler.h
0dc71c
+++ b/include/grub/compiler.h
0dc71c
@@ -48,4 +48,65 @@
0dc71c
 #  define WARN_UNUSED_RESULT
0dc71c
 #endif
0dc71c
 
0dc71c
+#include "types.h"
0dc71c
+
0dc71c
+union component64
0dc71c
+{
0dc71c
+  grub_uint64_t full;
0dc71c
+  struct
0dc71c
+  {
0dc71c
+#ifdef GRUB_CPU_WORDS_BIGENDIAN
0dc71c
+    grub_uint32_t high;
0dc71c
+    grub_uint32_t low;
0dc71c
+#else
0dc71c
+    grub_uint32_t low;
0dc71c
+    grub_uint32_t high;
0dc71c
+#endif
0dc71c
+  };
0dc71c
+};
0dc71c
+
0dc71c
+#if defined (__powerpc__)
0dc71c
+grub_uint64_t EXPORT_FUNC (__lshrdi3) (grub_uint64_t u, int b);
0dc71c
+grub_uint64_t EXPORT_FUNC (__ashrdi3) (grub_uint64_t u, int b);
0dc71c
+grub_uint64_t EXPORT_FUNC (__ashldi3) (grub_uint64_t u, int b);
0dc71c
+int EXPORT_FUNC(__ucmpdi2) (grub_uint64_t a, grub_uint64_t b);
0dc71c
+void EXPORT_FUNC (_restgpr_14_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_15_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_16_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_17_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_18_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_19_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_20_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_21_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_22_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_23_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_24_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_25_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_26_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_27_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_28_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_29_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_30_x) (void);
0dc71c
+void EXPORT_FUNC (_restgpr_31_x) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_14) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_15) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_16) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_17) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_18) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_19) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_20) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_21) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_22) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_23) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_24) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_25) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_26) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_27) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_28) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_29) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_30) (void);
0dc71c
+void EXPORT_FUNC (_savegpr_31) (void);
0dc71c
+
0dc71c
+#endif
0dc71c
+
0dc71c
 #endif /* ! GRUB_COMPILER_HEADER */
0dc71c
diff --git a/include/grub/libgcc.h b/include/grub/libgcc.h
0dc71c
index 8e93b67..5bdb8fb 100644
0dc71c
--- a/include/grub/libgcc.h
0dc71c
+++ b/include/grub/libgcc.h
0dc71c
@@ -16,73 +16,6 @@
0dc71c
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
0dc71c
  */
0dc71c
 
0dc71c
-/* We need to include config-util.h.in for HAVE_*.  */
0dc71c
-#ifndef __STDC_VERSION__
0dc71c
-#define __STDC_VERSION__ 0
0dc71c
-#endif
0dc71c
-#include <config-util.h>
0dc71c
-
0dc71c
-/* On x86 these functions aren't really needed. Save some space.  */
0dc71c
-#if !defined (__i386__) && !defined (__x86_64__)
0dc71c
-# ifdef HAVE___ASHLDI3
0dc71c
-void EXPORT_FUNC (__ashldi3) (void);
0dc71c
-# endif
0dc71c
-# ifdef HAVE___ASHRDI3
0dc71c
-void EXPORT_FUNC (__ashrdi3) (void);
0dc71c
-# endif
0dc71c
-# ifdef HAVE___LSHRDI3
0dc71c
-void EXPORT_FUNC (__lshrdi3) (void);
0dc71c
-# endif
0dc71c
-# ifdef HAVE___UCMPDI2
0dc71c
-void EXPORT_FUNC (__ucmpdi2) (void);
0dc71c
-# endif
0dc71c
-# ifdef HAVE___BSWAPSI2
0dc71c
-void EXPORT_FUNC (__bswapsi2) (void);
0dc71c
-# endif
0dc71c
-# ifdef HAVE___BSWAPDI2
0dc71c
-void EXPORT_FUNC (__bswapdi2) (void);
0dc71c
-# endif
0dc71c
-#endif
0dc71c
-
0dc71c
-#ifdef HAVE__RESTGPR_14_X
0dc71c
-void EXPORT_FUNC (_restgpr_14_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_15_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_16_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_17_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_18_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_19_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_20_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_21_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_22_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_23_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_24_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_25_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_26_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_27_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_28_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_29_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_30_x) (void);
0dc71c
-void EXPORT_FUNC (_restgpr_31_x) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_14) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_15) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_16) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_17) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_18) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_19) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_20) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_21) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_22) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_23) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_24) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_25) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_26) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_27) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_28) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_29) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_30) (void);
0dc71c
-void EXPORT_FUNC (_savegpr_31) (void);
0dc71c
-#endif
0dc71c
-
0dc71c
 #if defined (__arm__)
0dc71c
 void EXPORT_FUNC (__aeabi_lasr) (void);
0dc71c
 void EXPORT_FUNC (__aeabi_llsl) (void);
0dc71c
-- 
0dc71c
1.9.3
0dc71c