From 08c2951c86934a764347fc5929ab6e4f06ea66cd Mon Sep 17 00:00:00 2001 From: Stan Cox Date: Tue, 1 Dec 1998 16:52:56 +0000 Subject: [PATCH] mips.md (divmodsi4*, [...]): Add -mcheck-range-division/ -mcheck-zero-division checking. * mips.md (divmodsi4*, divmoddi4*, udivmodsi4*, udivmoddi4): Add -mcheck-range-division/ -mcheck-zero-division checking. Avoid as macro expansion. Use hi/lo as destination register. (div_trap): New. (divsi3*, divdi3*, modsi3*, moddi3*, udivsi3*, udivdi3*, umodsi3*, umoddi3*): Add -mcheck-range-division/-mcheck-zero-division checking. Avoid as macro expansion. Use hi/lo as destination register. * mips.h (MASK_CHECK_RANGE_DIV): New. (MASK_NO_CHECK_ZERO_DIV): New. (ELIMINABLE_REGS): Added GP_REG_FIRST + 31. (CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): Allow for getting return address for leaf functions out of r31 to support builtin_return_address. From-SVN: r24047 --- gcc/ChangeLog | 17 ++ gcc/config/mips/mips.h | 31 ++- gcc/config/mips/mips.md | 478 +++++++++++++++++++++++++++++----------- 3 files changed, 388 insertions(+), 138 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67856df3c88..c239f45e906 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +Tue Dec 1 16:45:49 1998 Stan Cox + + * mips.md (divmodsi4*, divmoddi4*, udivmodsi4*, udivmoddi4): Add + -mcheck-range-division/-mcheck-zero-division checking. Avoid as macro + expansion. Use hi/lo as destination register. + (div_trap): New. + (divsi3*, divdi3*, modsi3*, moddi3*, udivsi3*, udivdi3*, umodsi3*, + umoddi3*): Add -mcheck-range-division/-mcheck-zero-division checking. + Avoid as macro expansion. Use hi/lo as destination register. + + * mips.h (MASK_CHECK_RANGE_DIV): New. + (MASK_NO_CHECK_ZERO_DIV): New. + (ELIMINABLE_REGS): Added GP_REG_FIRST + 31. + (CAN_ELIMINATE, INITIAL_ELIMINATION_OFFSET): Allow for getting + return address for leaf functions out of r31 to support + builtin_return_address. + Tue Dec 1 15:03:30 1998 Herman A.J. ten Brugge * jump.c (jump_optimize): Call regs_set_between_p with PREV_INSN(x), diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index f36398a8862..13f1b7bd227 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -336,16 +336,18 @@ extern void mips_select_section (); #define MASK_4300_MUL_FIX 0x00080000 /* Work-around early Vr4300 CPU bug */ #define MASK_MIPS3900 0x00100000 /* like -mips1 only 3900 */ #define MASK_MIPS16 0x01000000 /* Generate mips16 code */ +#define MASK_NO_CHECK_ZERO_DIV 0x04000000 /* divide by zero checking */ +#define MASK_CHECK_RANGE_DIV 0x08000000 /* divide result range checking */ /* Dummy switches used only in spec's*/ #define MASK_MIPS_TFILE 0x00000000 /* flag for mips-tfile usage */ /* Debug switches, not documented */ -#define MASK_DEBUG 0x40000000 /* Eliminate version # in .s file */ -#define MASK_DEBUG_A 0x20000000 /* don't allow