v850.h (MULDI3_LIBCALL, [...]): Define.

* config/v850/v850.h (MULDI3_LIBCALL, UCMPDI2_LIBCALL, CMPDI2_LIBCALL,
    NEGDI2_LIBCALL, INIT_TARGET_OPTABS, MASK_STRICT_ALIGN): Define.
    (PREDICATE_CODES): Include new predicates.
    (RTX_COSTS): Handle UMOD and UDIV.  Tune MULT for v850e.
    (TARGET_SWITCHES):  Add strict-align.
    (TARGET_STRICT_ALIGN): New.
    (MASK_DEFAULT, STRICT_ALIGNMENT):  Redefine.
    * config/v850/t-v850 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
    Define.
    (LIB1ASMFUNCS): Add v850_negdi2, v850_cmpdi2, v850_ucmpdi2,
    v850_muldi3.
    * config/v850/lib1funcs.asm (L_callt_save_r2_r29, L_return_r2_r29,
    L_callt_save_r2_r31, L_return_r2_r31,
    L_save_all_interrupt): Change addi to add.
    (L_save_interrupt, L_return_interrupt): Rework.
    (__return_r31):  Correct .size directive.
    (mulsi3, divsi3, udivsi3, umodsi3, modsi3): Tune for v850e.
    (v850_negdi2, v850_cmpdi2, v850_ucmpdi2, v850_muldi3):
    New routines.
    * config/v850/v850.c (expand_prologue): Call
    gen_callt_save_interrupt, gen_callt_restore_all_interrupt,
    gen_callt_return_interrupt and gen_callt_save_all_interrupt.
    (reg_or_int9_operand): New predicate.
    (reg_or_const_operand): New routine.
    * config/v850/v850.md (return_interrupt): Changed from
    restore_interrupt.
    (callt_save_all_interrupt): Changed from save_all_interrupt_v850e.
    (callt_save_interrupt): Change save sequence.
    (callt_return_interrupt): New.
    (save_interrupt): Don't use runtime function for LONG_CALLS
    and TARGET_PROLOG_FUNCTION.
    (save_all_interrupt): Likewise.
    (mulsi3): Use new predicate.
    (moviscc): Disallow some combination of constants.
    Fix define_split for sasf insns, so that it will not generate bad
    code if operand0 and operand5 are the same.
    * config/v850/v850-protos.h: Prototype new predicates.

From-SVN: r56654
This commit is contained in:
Catherine Moore 2002-08-29 09:50:20 +00:00 committed by Nick Clifton
parent 25cf83980b
commit 8376061dbe
7 changed files with 437 additions and 105 deletions

View File

@ -1,3 +1,43 @@
2001-08-29 Catherine Moore <clm@redhat.com>
* config/v850/v850.h (MULDI3_LIBCALL, UCMPDI2_LIBCALL, CMPDI2_LIBCALL,
NEGDI2_LIBCALL, INIT_TARGET_OPTABS, MASK_STRICT_ALIGN): Define.
(PREDICATE_CODES): Include new predicates.
(RTX_COSTS): Handle UMOD and UDIV. Tune MULT for v850e.
(TARGET_SWITCHES): Add strict-align.
(TARGET_STRICT_ALIGN): New.
(MASK_DEFAULT, STRICT_ALIGNMENT): Redefine.
* config/v850/t-v850 (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
Define.
(LIB1ASMFUNCS): Add v850_negdi2, v850_cmpdi2, v850_ucmpdi2,
v850_muldi3.
* config/v850/lib1funcs.asm (L_callt_save_r2_r29, L_return_r2_r29,
L_callt_save_r2_r31, L_return_r2_r31,
L_save_all_interrupt): Change addi to add.
(L_save_interrupt, L_return_interrupt): Rework.
(__return_r31): Correct .size directive.
(mulsi3, divsi3, udivsi3, umodsi3, modsi3): Tune for v850e.
(v850_negdi2, v850_cmpdi2, v850_ucmpdi2, v850_muldi3):
New routines.
* config/v850/v850.c (expand_prologue): Call
gen_callt_save_interrupt, gen_callt_restore_all_interrupt,
gen_callt_return_interrupt and gen_callt_save_all_interrupt.
(reg_or_int9_operand): New predicate.
(reg_or_const_operand): New routine.
* config/v850/v850.md (return_interrupt): Changed from
restore_interrupt.
(callt_save_all_interrupt): Changed from save_all_interrupt_v850e.
(callt_save_interrupt): Change save sequence.
(callt_return_interrupt): New.
(save_interrupt): Don't use runtime function for LONG_CALLS
and TARGET_PROLOG_FUNCTION.
(save_all_interrupt): Likewise.
(mulsi3): Use new predicate.
(moviscc): Disallow some combination of constants.
Fix define_split for sasf insns, so that it will not generate bad
code if operand0 and operand5 are the same.
* config/v850/v850-protos.h: Prototype new predicates.
2002-08-28 Gabriel Dos Reis <gdr@integrable-solutions.net>
* c-common.c (builtin_define_type_precision): New function.

View File

@ -31,70 +31,87 @@ Boston, MA 02111-1307, USA. */
.text
.globl ___mulsi3
.type ___mulsi3,@function
/*
* #define SHIFT 12
* #define MASK ((1 << SHIFT) - 1)
*
* #define STEP(i, j) \
* ({ \
* short a_part = (a >> (i)) & MASK; \
* short b_part = (b >> (j)) & MASK; \
* int res = (((int)a_part) * ((int)b_part)); \
* res; \
* })
*
* int
* __mulsi3 (unsigned a, unsigned b)
* {
* return STEP (0, 0) +
* ((STEP (SHIFT, 0) + STEP (0, SHIFT)) << SHIFT) +
* ((STEP (0, 2 * SHIFT) + STEP (SHIFT, SHIFT) + STEP (2 * SHIFT, 0))
* << (2 * SHIFT));
* }
*/
___mulsi3:
mov r6,r13
movea lo(4095),r0,r16
and r16,r13
mov r7,r15
and r16,r15
mov r13,r10
mulh r15,r10
shr 12,r6
mov r6,r14
and r16,r14
mov r14,r11
mulh r15,r11
shr 12,r7
mov r7,r12
and r16,r12
shr 12,r7
and r16,r7
mulh r13,r7
shr 12,r6
mulh r12,r13
and r16,r6
add r13,r11
shl 12,r11
add r11,r10
mov r14,r11
mulh r12,r11
mulh r15,r6
add r11,r7
add r6,r7
shl 24,r7
add r7,r10
jmp [r31]
#ifdef __v850__
/*
#define SHIFT 12
#define MASK ((1 << SHIFT) - 1)
#define STEP(i, j) \
({ \
short a_part = (a >> (i)) & MASK; \
short b_part = (b >> (j)) & MASK; \
int res = (((int) a_part) * ((int) b_part)); \
res; \
})
int
__mulsi3 (unsigned a, unsigned b)
{
return STEP (0, 0) +
((STEP (SHIFT, 0) + STEP (0, SHIFT)) << SHIFT) +
((STEP (0, 2 * SHIFT) + STEP (SHIFT, SHIFT) + STEP (2 * SHIFT, 0))
<< (2 * SHIFT));
}
*/
mov r6, r14
movea lo(32767), r0, r10
and r10, r14
mov r7, r15
and r10, r15
shr 15, r6
mov r6, r13
and r10, r13
shr 15, r7
mov r7, r12
and r10, r12
shr 15, r6
shr 15, r7
mov r14, r10
mulh r15, r10
mov r14, r11
mulh r12, r11
mov r13, r16
mulh r15, r16
mulh r14, r7
mulh r15, r6
add r16, r11
mulh r13, r12
shl 15, r11
add r11, r10
add r12, r7
add r6, r7
shl 30, r7
add r7, r10
jmp [r31]
#endif /* __v850__ */
#if defined(__v850e__) || defined(__v850ea__)
/* This routine is almost unneccesarry because gcc
generates the MUL instruction for the RTX mulsi3.
But if someone wants to link his application with
previsously compiled v850 objects then they will
need this function. */
/* It isn't good to put the inst sequence as below;
mul r7, r6,
mov r6, r10, r0
In this case, there is a RAW hazard between them.
MUL inst takes 2 cycle in EX stage, then MOV inst
must wait 1cycle. */
mov r7, r10
mul r6, r10, r0
jmp [r31]
#endif /* __v850e__ */
.size ___mulsi3,.-___mulsi3
#endif
#endif /* L_mulsi3 */
#ifdef L_udivsi3
.text
.global ___udivsi3
.type ___udivsi3,@function
___udivsi3:
#ifdef __v850__
mov 1,r12
mov 0,r10
cmp r6,r7
@ -126,6 +143,16 @@ ___udivsi3:
bne .L9
.L8:
jmp [r31]
#else /* defined(__v850e__) */
/* See comments at end of __mulsi3. */
mov r6, r10
divu r7, r10, r0
jmp [r31]
#endif /* __v850e__ */
.size ___udivsi3,.-___udivsi3
#endif
@ -134,6 +161,7 @@ ___udivsi3:
.globl ___divsi3
.type ___divsi3,@function
___divsi3:
#ifdef __v850__
add -8,sp
st.w r31,4[sp]
st.w r22,0[sp]
@ -157,6 +185,16 @@ ___divsi3:
ld.w 4[sp],r31
add 8,sp
jmp [r31]
#else /* defined(__v850e__) */
/* See comments at end of __mulsi3. */
mov r6, r10
div r7, r10, r0
jmp [r31]
#endif /* __v850e__ */
.size ___divsi3,.-___divsi3
#endif
@ -165,6 +203,7 @@ ___divsi3:
.globl ___umodsi3
.type ___umodsi3,@function
___umodsi3:
#ifdef __v850__
add -12,sp
st.w r31,8[sp]
st.w r7,4[sp]
@ -178,6 +217,15 @@ ___umodsi3:
ld.w 8[sp],r31
add 12,sp
jmp [r31]
#else /* defined(__v850e__) */
/* See comments at end of __mulsi3. */
divu r7, r6, r10
jmp [r31]
#endif /* __v850e__ */
.size ___umodsi3,.-___umodsi3
#endif /* L_umodsi3 */
@ -186,6 +234,7 @@ ___umodsi3:
.globl ___modsi3
.type ___modsi3,@function
___modsi3:
#ifdef __v850__
add -12,sp
st.w r31,8[sp]
st.w r7,4[sp]
@ -199,6 +248,15 @@ ___modsi3:
ld.w 8[sp],r31
add 12,sp
jmp [r31]
#else /* defined(__v850e__) */
/* See comments at end of __mulsi3. */
div r7, r6, r10
jmp [r31]
#endif /* __v850e__ */
.size ___modsi3,.-___modsi3
#endif /* L_modsi3 */
@ -1642,3 +1700,186 @@ __callt_return_r31c: .short ctoff(.L_callt_return_r31c)
#endif
#endif /* __v850e__ */
/* libgcc2 routines for NEC V850. */
/* Double Integer Arithmetical Operation. */
#ifdef L_negdi2
.text
.global ___negdi2
.type ___negdi2, @function
___negdi2:
not r6, r10
add 1, r10
setf l, r6
not r7, r11
add r6, r11
jmp [lp]
.size ___negdi2,.-___negdi2
#endif
#ifdef L_cmpdi2
.text
.global ___cmpdi2
.type ___cmpdi2,@function
___cmpdi2:
# Signed comparison bitween each high word.
cmp r9, r7
be .L_cmpdi_cmp_low
setf ge, r10
setf gt, r6
add r6, r10
jmp [lp]
.L_cmpdi_cmp_low:
# Unsigned comparigon bitween each low word.
cmp r8, r6
setf nl, r10
setf h, r6
add r6, r10
jmp [lp]
.size ___cmpdi2, . - ___cmpdi2
#endif
#ifdef L_ucmpdi2
.text
.global ___ucmpdi2
.type ___ucmpdi2,@function
___ucmpdi2:
cmp r9, r7 # Check if each high word are same.
be .L_ucmpdi_check_psw
cmp r8, r6 # Compare the word.
.L_ucmpdi_check_psw:
setf nl, r10 #
setf h, r6 #
add r6, r10 # Add the result of comparison NL and comparison H.
jmp [lp]
.size ___ucmpdi2, . - ___ucmpdi2
#endif
#ifdef L_muldi3
.text
.global ___muldi3
.type ___muldi3,@function
___muldi3:
#ifdef __v850__
jarl __save_r26_r31, r10
addi 16, sp, sp
mov r6, r5
shr 15, r5
movea lo(32767), r0, r14
and r14, r5
mov r8, r10
shr 15, r10
and r14, r10
mov r6, r19
shr 30, r19
mov r7, r12
shl 2, r12
or r12, r19
and r14, r19
mov r8, r13
shr 30, r13
mov r9, r12
shl 2, r12
or r12, r13
and r14, r13
mov r7, r11
shr 13, r11
and r14, r11
mov r9, r31
shr 13, r31
and r14, r31
mov r7, r29
shr 28, r29
and r14, r29
mov r9, r12
shr 28, r12
and r14, r12
and r14, r6
and r14, r8
mov r6, r14
mulh r8, r14
mov r6, r16
mulh r10, r16
mov r6, r18
mulh r13, r18
mov r6, r15
mulh r31, r15
mulh r12, r6
mov r5, r17
mulh r10, r17
add -16, sp
mov r5, r12
mulh r8, r12
add r17, r18
mov r5, r17
mulh r31, r17
add r12, r16
mov r5, r12
mulh r13, r12
add r17, r6
mov r19, r17
add r12, r15
mov r19, r12
mulh r8, r12
mulh r10, r17
add r12, r18
mov r19, r12
mulh r13, r12
add r17, r15
mov r11, r13
mulh r8, r13
add r12, r6
mov r11, r12
mulh r10, r12
add r13, r15
mulh r29, r8
add r12, r6
mov r16, r13
shl 15, r13
add r14, r13
mov r18, r12
shl 30, r12
mov r13, r26
add r12, r26
shr 15, r14
movhi hi(131071), r0, r12
movea lo(131071), r12, r13
and r13, r14
mov r16, r12
and r13, r12
add r12, r14
mov r18, r12
shl 15, r12
and r13, r12
add r12, r14
shr 17, r14
shr 17, r16
add r14, r16
shl 13, r15
shr 2, r18
add r18, r15
add r15, r16
mov r16, r27
add r8, r6
shl 28, r6
add r6, r27
mov r26, r10
mov r27, r11
jr __return_r26_r31
#endif /* __v850__ */
#if defined(__v850e__) || defined(__v850ea__)
/* (Ahi << 32 + Alo) * (Bhi << 32 + Blo) */
/* r7 r6 r9 r8 */
mov r8, r10
mulu r7, r8, r0 /* Ahi * Blo */
mulu r6, r9, r0 /* Alo * Bhi */
mulu r6, r10, r11 /* Alo * Blo */
add r8, r11
add r9, r11
jmp [r31]
#endif /* defined(__v850e__) || defined(__v850ea__) */
.size ___muldi3, . - ___muldi3
#endif

View File

@ -56,7 +56,11 @@ LIB1ASMFUNCS = _mulsi3 \
_callt_save_all_interrupt \
_callt_save_r2_r29 \
_callt_save_r2_r31 \
_callt_save_r6_r9
_callt_save_r6_r9 \
_negdi2 \
_cmpdi2 \
_ucmpdi2 \
_muldi3
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
@ -76,9 +80,12 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
echo '#endif' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
TCFLAGS = -Wa,-mwarn-signed-overflow -Wa,-mwarn-unsigned-overflow
# Create non-target specific versions of the libraries
TCFLAGS += -mno-app-regs -msmall-sld -mv850 -D__v850e__ -Wa,-mv850any
# Create target-specific versions of the libraries
MULTILIB_OPTIONS = mv850/mv850e
MULTILIB_DIRNAMES = v850 v850e
INSTALL_LIBGCC = install-multilib
TCFLAGS = -mno-app-regs -msmall-sld -Wa,-mwarn-signed-overflow -Wa,-mwarn-unsigned-overflow
v850-c.o: $(srcdir)/config/v850/v850-c.c $(RTL_H) $(TREE_H) $(CONFIG_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<

View File

@ -1,22 +1,22 @@
/* Prototypes for v850.c functions used in the md file & elsewhere.
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Function prototypes that cannot exist in v850.h due to dependency
complications. */
@ -53,6 +53,8 @@ extern void notice_update_cc PARAMS ((rtx, rtx));
extern char * construct_save_jarl PARAMS ((rtx));
extern char * construct_restore_jr PARAMS ((rtx));
#ifdef HAVE_MACHINE_MODES
extern int reg_or_int9_operand PARAMS ((rtx, Mmode));
extern int reg_or_const_operand PARAMS ((rtx, Mmode));
extern char * construct_dispose_instruction PARAMS ((rtx));
extern char * construct_prepare_instruction PARAMS ((rtx));
extern int pattern_is_ok_for_prepare PARAMS ((rtx, Mmode));

View File

@ -3,22 +3,22 @@
Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
This file is part of GNU CC.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU CC is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include "config.h"
#include "system.h"
@ -2762,7 +2762,7 @@ v850_output_aligned_bss (file, decl, name, size, align)
int align;
{
(*targetm.asm_out.globalize_label) (file, name);
switch (v850_get_data_area (decl))
{
case DATA_AREA_ZDA:

View File

@ -3,22 +3,22 @@
Free Software Foundation, Inc.
Contributed by Jeff Law (law@cygnus.com).
This file is part of GNU CC.
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef GCC_V850_H
#define GCC_V850_H
@ -86,6 +86,7 @@ extern int target_flags;
#define MASK_BIG_SWITCH 0x00000100
#define MASK_NO_APP_REGS 0x00000200
#define MASK_DISABLE_CALLT 0x00000400
#define MASK_STRICT_ALIGN 0x00000800
#define MASK_US_BIT_SET 0x00001000
#define MASK_US_MASK_SET 0x00002000
@ -145,6 +146,8 @@ extern int target_flags;
and r5 are to be fixed registers (for compatibility with GHS). */
#define TARGET_NO_APP_REGS (target_flags & MASK_NO_APP_REGS)
#define TARGET_STRICT_ALIGN (target_flags & MASK_STRICT_ALIGN)
/* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces,
each pair being { "NAME", VALUE }
@ -182,6 +185,9 @@ extern int target_flags;
{ "app-regs", -MASK_NO_APP_REGS, "" }, \
{ "no-app-regs", MASK_NO_APP_REGS, \
N_("Do not use registers r2 and r5") }, \
{ "strict-align", MASK_STRICT_ALIGN, \
N_("Enfore strict alignment") }, \
{ "no-strict-align", -MASK_STRICT_ALIGN, "" }, \
{ "big-switch", MASK_BIG_SWITCH, \
N_("Use 4 byte entries in switch tables") },\
{ "", MASK_DEFAULT, ""}}
@ -255,6 +261,7 @@ extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
#define OPTIMIZATION_OPTIONS(LEVEL,SIZE) \
{ \
target_flags |= MASK_STRICT_ALIGN; \
if (LEVEL) \
target_flags |= (MASK_EP | MASK_PROLOG_FUNCTION); \
}
@ -314,7 +321,7 @@ extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
/* Define this if move instructions will actually fail to work
when given unaligned data. */
#define STRICT_ALIGNMENT 1
#define STRICT_ALIGNMENT TARGET_STRICT_ALIGN
/* Define this as 1 if `char' should by default be signed; else as 0.
@ -1048,8 +1055,27 @@ do { \
#define RTX_COSTS(RTX,CODE,OUTER_CODE) \
case MOD: \
case DIV: \
case UMOD: \
case UDIV: \
if (TARGET_V850E && optimize_size) \
return 6; \
return 60; \
case MULT: \
if (TARGET_V850E \
&& ( GET_MODE (RTX) == SImode \
|| GET_MODE (RTX) == HImode \
|| GET_MODE (RTX) == QImode)) \
{ \
if (GET_CODE (XEXP (RTX, 1)) == REG) \
return 4; \
else if (GET_CODE (XEXP (RTX, 1)) == CONST_INT) \
{ \
if (CONST_OK_FOR_O (INTVAL (XEXP (RTX, 1)))) \
return 6; \
else if (CONST_OK_FOR_K (INTVAL (XEXP (RTX, 1)))) \
return 10; \
} \
} \
return 20;
/* All addressing modes have the same cost on the V850 series. */
@ -1360,6 +1386,23 @@ zbss_section () \
#define STORE_FLAG_VALUE 1
#define MULDI3_LIBCALL "__muldi3"
#define UCMPDI2_LIBCALL "__ucmpdi2"
#define CMPDI2_LIBCALL "__cmpdi2"
#define NEGDI2_LIBCALL "__negdi2"
#define INIT_TARGET_OPTABS \
do \
{ \
cmp_optab->handlers[(int) DImode].libfunc \
= init_one_libfunc (CMPDI2_LIBCALL); \
ucmp_optab->handlers[(int) DImode].libfunc \
= init_one_libfunc (UCMPDI2_LIBCALL); \
neg_optab->handlers[(int) DImode].libfunc \
= init_one_libfunc (NEGDI2_LIBCALL); \
} \
while (0)
/* Specify the machine mode that pointers have.
After generation of rtl, the compiler makes no further distinction
between pointers and any other objects of this machine mode. */
@ -1470,6 +1513,8 @@ extern union tree_node * GHS_current_section_names [(int) COUNT_OF_GHS_SECTION_K
#define PREDICATE_CODES \
{ "reg_or_0_operand", { REG, SUBREG, CONST_INT, CONST_DOUBLE }}, \
{ "reg_or_int5_operand", { REG, SUBREG, CONST_INT }}, \
{ "reg_or_int9_operand", { REG, SUBREG, CONST_INT }}, \
{ "reg_or_const_operand", { REG, CONST_INT }}, \
{ "call_address_operand", { REG, SYMBOL_REF }}, \
{ "movsi_source_operand", { LABEL_REF, SYMBOL_REF, CONST_INT, \
CONST_DOUBLE, CONST, HIGH, MEM, \

View File

@ -409,7 +409,6 @@
(define_insn "mulsi3"
[(set (match_operand:SI 0 "register_operand" "=r")
(mult:SI (match_operand:SI 1 "register_operand" "%0")
;; %redact changeone /reg_or_int9/ 'register' unless nec-no-copyright
(match_operand:SI 2 "reg_or_int9_operand" "rO")))]
"TARGET_V850E"
"mul %2,%1,%."
@ -860,9 +859,7 @@
(if_then_else:SI
(match_operator 1 "comparison_operator"
[(match_dup 4) (match_dup 5)])
;; %redact changeone /const/ 'int5' unless nec-no-copyright
(match_operand:SI 2 "reg_or_const_operand" "rJ")
;; %redact changeone /const/ '0' unless nec-no-copyright
(match_operand:SI 3 "reg_or_const_operand" "rI")))]
"TARGET_V850E"
"