m32c.h (LIBGCC2_UNITS_PER_WORD): Define if not already defined.
* config/m32c/m32c.h (LIBGCC2_UNITS_PER_WORD): Define if not already defined. * config/m32c/t-m32c (LIB2FUNCS_EXTRA): Add m32c-lib2-trapv.c. * config/m32c/m32c-lib2.c: Remove unused typedefs. Rename the other typedefs to avoid conflicts with libgcc2.c. Define labels to gain 16-bit bit-manipulation functions from libgcc2.c and then include it. * config/m32c/m32c-lib2-trapv.c: New file. Define labels to gain 16-bit trapping arithmetic functions from libgcc2.c and then include it. From-SVN: r145397
This commit is contained in:
parent
d6868399fb
commit
235e1fe81e
@ -1,3 +1,16 @@
|
||||
2009-04-01 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/m32c/m32c.h (LIBGCC2_UNITS_PER_WORD): Define if not
|
||||
already defined.
|
||||
* config/m32c/t-m32c (LIB2FUNCS_EXTRA): Add m32c-lib2-trapv.c.
|
||||
* config/m32c/m32c-lib2.c: Remove unused typedefs. Rename the
|
||||
other typedefs to avoid conflicts with libgcc2.c. Define labels
|
||||
to gain 16-bit bit-manipulation functions from libgcc2.c and then
|
||||
include it.
|
||||
* config/m32c/m32c-lib2-trapv.c: New file. Define labels
|
||||
to gain 16-bit trapping arithmetic functions from libgcc2.c and
|
||||
then include it.
|
||||
|
||||
2009-04-01 Rafael Avila de Espindola <espindola@google.com>
|
||||
|
||||
* varasm.c (default_function_rodata_section): Declare DOT as const char*.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* libgcc routines for R8C/M16C/M32C
|
||||
Copyright (C) 2005
|
||||
Copyright (C) 2005, 2009
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Red Hat.
|
||||
|
||||
@ -29,24 +29,19 @@
|
||||
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301, USA. */
|
||||
|
||||
typedef int HItype __attribute__ ((mode (HI)));
|
||||
typedef unsigned int UHItype __attribute__ ((mode (HI)));
|
||||
typedef int SItype __attribute__ ((mode (SI)));
|
||||
typedef unsigned int USItype __attribute__ ((mode (SI)));
|
||||
typedef int sint32_type __attribute__ ((mode (SI)));
|
||||
typedef unsigned int uint32_type __attribute__ ((mode (SI)));
|
||||
typedef int word_type __attribute__ ((mode (__word__)));
|
||||
|
||||
typedef int word_type __attribute__ ((mode (__word__)));
|
||||
uint32_type udivmodsi4 (uint32_type, uint32_type, word_type);
|
||||
sint32_type __divsi3 (sint32_type, sint32_type);
|
||||
sint32_type __modsi3 (sint32_type, sint32_type);
|
||||
|
||||
USItype udivmodsi4 (USItype num, USItype den, word_type modwanted);
|
||||
SItype __divsi3 (SItype a, SItype b);
|
||||
SItype __modsi3 (SItype a, SItype b);
|
||||
SItype __udivsi3 (SItype a, SItype b);
|
||||
SItype __umodsi3 (SItype a, SItype b);
|
||||
|
||||
USItype
|
||||
udivmodsi4 (USItype num, USItype den, word_type modwanted)
|
||||
uint32_type
|
||||
udivmodsi4 (uint32_type num, uint32_type den, word_type modwanted)
|
||||
{
|
||||
USItype bit = 1;
|
||||
USItype res = 0;
|
||||
uint32_type bit = 1;
|
||||
uint32_type res = 0;
|
||||
|
||||
while (den < num && bit && !(den & (1L << 31)))
|
||||
{
|
||||
@ -68,13 +63,11 @@ udivmodsi4 (USItype num, USItype den, word_type modwanted)
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
SItype
|
||||
__divsi3 (SItype a, SItype b)
|
||||
sint32_type
|
||||
__divsi3 (sint32_type a, sint32_type b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
SItype res;
|
||||
sint32_type res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
@ -96,13 +89,11 @@ __divsi3 (SItype a, SItype b)
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
SItype
|
||||
__modsi3 (SItype a, SItype b)
|
||||
sint32_type
|
||||
__modsi3 (sint32_type a, sint32_type b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
SItype res;
|
||||
sint32_type res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
@ -121,19 +112,28 @@ __modsi3 (SItype a, SItype b)
|
||||
return res;
|
||||
}
|
||||
|
||||
/* See the comment by the definition of LIBGCC2_UNITS_PER_WORD in
|
||||
m32c.h for why we are creating extra versions of some of the
|
||||
functions defined in libgcc2.c. */
|
||||
|
||||
#define LIBGCC2_UNITS_PER_WORD 2
|
||||
|
||||
#define L_clzsi2
|
||||
#define L_ctzsi2
|
||||
#define L_ffssi2
|
||||
#define L_paritysi2
|
||||
#define L_popcountsi2
|
||||
|
||||
SItype
|
||||
__udivsi3 (SItype a, SItype b)
|
||||
#include "libgcc2.c"
|
||||
|
||||
uint32_type
|
||||
__udivsi3 (uint32_type a, uint32_type b)
|
||||
{
|
||||
return udivmodsi4 (a, b, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
SItype
|
||||
__umodsi3 (SItype a, SItype b)
|
||||
uint32_type
|
||||
__umoddi3 (uint32_type a, uint32_type b)
|
||||
{
|
||||
return udivmodsi4 (a, b, 1);
|
||||
}
|
||||
|
@ -2701,8 +2701,13 @@ m32c_print_operand_punct_valid_p (int c)
|
||||
void
|
||||
m32c_print_operand_address (FILE * stream, rtx address)
|
||||
{
|
||||
gcc_assert (GET_CODE (address) == MEM);
|
||||
m32c_print_operand (stream, XEXP (address, 0), 0);
|
||||
if (GET_CODE (address) == MEM)
|
||||
address = XEXP (address, 0);
|
||||
else
|
||||
/* cf: gcc.dg/asm-4.c. */
|
||||
gcc_assert (GET_CODE (address) == REG);
|
||||
|
||||
m32c_print_operand (stream, address, 0);
|
||||
}
|
||||
|
||||
/* Implements ASM_OUTPUT_REG_PUSH. Control registers are pushed
|
||||
|
@ -29,7 +29,7 @@ LIB1ASMFUNCS = \
|
||||
__m32c_ucmpsi2 \
|
||||
__m32c_jsri16
|
||||
|
||||
LIB2FUNCS_EXTRA = $(srcdir)/config/m32c/m32c-lib2.c
|
||||
LIB2FUNCS_EXTRA = $(srcdir)/config/m32c/m32c-lib2.c $(srcdir)/config/m32c/m32c-lib2-trapv.c
|
||||
|
||||
# floating point emulation libraries
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user