config.gcc: Unify V850 architecture options and add support for newer V850 architectures.
* config.gcc: Unify V850 architecture options and add support for newer V850 architectures. * config/v850/t-v850e: Delete. From-SVN: r174744
This commit is contained in:
parent
009db07487
commit
1dcad07971
|
@ -1,3 +1,9 @@
|
|||
2011-06-07 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config.gcc: Unify V850 architecture options and add support for
|
||||
newer V850 architectures.
|
||||
* config/v850/t-v850e: Delete.
|
||||
|
||||
2011-06-07 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree.c (build_common_tree_nodes): Also initialize size_type_node.
|
||||
|
|
|
@ -2559,46 +2559,32 @@ spu-*-elf*)
|
|||
c_target_objs="${c_target_objs} spu-c.o"
|
||||
cxx_target_objs="${cxx_target_objs} spu-c.o"
|
||||
;;
|
||||
v850e1-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e1"
|
||||
|
||||
v850*-*-*)
|
||||
case ${target} in
|
||||
v850e2v3-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e2v3"
|
||||
;;
|
||||
v850e2-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e2"
|
||||
;;
|
||||
v850e1-*-* | v850es-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e1"
|
||||
;;
|
||||
v850e-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e"
|
||||
;;
|
||||
v850-*-*)
|
||||
target_cpu_default="TARGET_CPU_generic"
|
||||
;;
|
||||
esac
|
||||
tm_file="dbxelf.h elfos.h newlib-stdint.h v850/v850.h"
|
||||
tm_p_file=v850/v850-protos.h
|
||||
tmake_file=v850/t-v850e
|
||||
md_file=v850/v850.md
|
||||
extra_modes=v850/v850-modes.def
|
||||
out_file=v850/v850.c
|
||||
extra_options="${extra_options} v850/v850.opt"
|
||||
if test x$stabs = xyes
|
||||
then
|
||||
tm_file="${tm_file} dbx.h"
|
||||
fi
|
||||
use_collect2=no
|
||||
c_target_objs="v850-c.o"
|
||||
cxx_target_objs="v850-c.o"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
v850e-*-*)
|
||||
target_cpu_default="TARGET_CPU_v850e"
|
||||
tm_file="dbxelf.h elfos.h newlib-stdint.h v850/v850.h"
|
||||
tm_p_file=v850/v850-protos.h
|
||||
tmake_file=v850/t-v850e
|
||||
md_file=v850/v850.md
|
||||
extra_modes=v850/v850-modes.def
|
||||
out_file=v850/v850.c
|
||||
extra_options="${extra_options} v850/v850.opt"
|
||||
if test x$stabs = xyes
|
||||
then
|
||||
tm_file="${tm_file} dbx.h"
|
||||
fi
|
||||
use_collect2=no
|
||||
c_target_objs="v850-c.o"
|
||||
cxx_target_objs="v850-c.o"
|
||||
use_gcc_stdint=wrap
|
||||
;;
|
||||
v850-*-*)
|
||||
target_cpu_default="TARGET_CPU_generic"
|
||||
tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
|
||||
tmake_file=v850/t-v850
|
||||
md_file=v850/v850.md
|
||||
extra_modes=v850/v850-modes.def
|
||||
out_file=v850/v850.c
|
||||
extra_options="${extra_options} v850/v850.opt"
|
||||
if test x$stabs = xyes
|
||||
then
|
||||
tm_file="${tm_file} dbx.h"
|
||||
|
@ -3493,7 +3479,7 @@ case "${target}" in
|
|||
v850*-*-*)
|
||||
supported_defaults=cpu
|
||||
case ${with_cpu} in
|
||||
"" | v850e | v850e1)
|
||||
"" | v850e | v850e1 | v850e2 | v850es | v850e2v3)
|
||||
# OK
|
||||
;;
|
||||
*)
|
||||
|
@ -3621,14 +3607,15 @@ case ${target} in
|
|||
;;
|
||||
|
||||
v850*-*-*)
|
||||
# FIXME: The v850 is "special" in that it does not support
|
||||
# runtime CPU selection, only --with-cpu.
|
||||
case "x$with_cpu" in
|
||||
x)
|
||||
;;
|
||||
xv850e)
|
||||
xv850e | xv850e1 | xv850e2 | xv850e2v3)
|
||||
target_cpu_default2="TARGET_CPU_$with_cpu"
|
||||
;;
|
||||
xv850es)
|
||||
target_cpu_default2="TARGET_CPU_v850e1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -1,112 +0,0 @@
|
|||
# Copyright (C) 2003, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of GCC.
|
||||
#
|
||||
# GCC 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 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# GCC 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 GCC; see the file COPYING3. If not see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
LIB1ASMSRC = v850/lib1funcs.asm
|
||||
LIB1ASMFUNCS = _mulsi3 \
|
||||
_divsi3 \
|
||||
_udivsi3 \
|
||||
_modsi3 \
|
||||
_umodsi3 \
|
||||
_save_2 \
|
||||
_save_20 \
|
||||
_save_21 \
|
||||
_save_22 \
|
||||
_save_23 \
|
||||
_save_24 \
|
||||
_save_25 \
|
||||
_save_26 \
|
||||
_save_27 \
|
||||
_save_28 \
|
||||
_save_29 \
|
||||
_save_2c \
|
||||
_save_20c \
|
||||
_save_21c \
|
||||
_save_22c \
|
||||
_save_23c \
|
||||
_save_24c \
|
||||
_save_25c \
|
||||
_save_26c \
|
||||
_save_27c \
|
||||
_save_28c \
|
||||
_save_29c \
|
||||
_save_31c \
|
||||
_save_interrupt \
|
||||
_save_all_interrupt \
|
||||
_callt_save_20 \
|
||||
_callt_save_21 \
|
||||
_callt_save_22 \
|
||||
_callt_save_23 \
|
||||
_callt_save_24 \
|
||||
_callt_save_25 \
|
||||
_callt_save_26 \
|
||||
_callt_save_27 \
|
||||
_callt_save_28 \
|
||||
_callt_save_29 \
|
||||
_callt_save_20c \
|
||||
_callt_save_21c \
|
||||
_callt_save_22c \
|
||||
_callt_save_23c \
|
||||
_callt_save_24c \
|
||||
_callt_save_25c \
|
||||
_callt_save_26c \
|
||||
_callt_save_27c \
|
||||
_callt_save_28c \
|
||||
_callt_save_29c \
|
||||
_callt_save_31c \
|
||||
_callt_save_interrupt \
|
||||
_callt_save_all_interrupt \
|
||||
_callt_save_r2_r29 \
|
||||
_callt_save_r2_r31 \
|
||||
_negdi2 \
|
||||
_cmpdi2 \
|
||||
_ucmpdi2 \
|
||||
_muldi3
|
||||
|
||||
# We want fine grained libraries, so use the new code to build the
|
||||
# floating point emulation libraries.
|
||||
FPBIT = fp-bit.c
|
||||
DPBIT = dp-bit.c
|
||||
|
||||
dp-bit.c: $(srcdir)/config/fp-bit.c
|
||||
echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
|
||||
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
|
||||
echo '#endif' >> dp-bit.c
|
||||
cat $(srcdir)/config/fp-bit.c >> dp-bit.c
|
||||
|
||||
fp-bit.c: $(srcdir)/config/fp-bit.c
|
||||
echo '#define FLOAT' > fp-bit.c
|
||||
echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
|
||||
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
|
||||
echo '#endif' >> fp-bit.c
|
||||
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
|
||||
|
||||
# Create target-specific versions of the libraries
|
||||
MULTILIB_OPTIONS = mv850
|
||||
MULTILIB_DIRNAMES = v850
|
||||
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 $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
$(TM_H) $(CPPLIB_H) $(TREE_H) $(C_PRAGMA_H) $(GGC_H) $(TM_P_H)
|
||||
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
|
||||
$(srcdir)/config/v850/v850-c.c
|
||||
|
||||
# Local Variables:
|
||||
# mode: Makefile
|
||||
# End:
|
|
@ -118,9 +118,18 @@ v850_handle_option (struct gcc_options *opts,
|
|||
|
||||
case OPT_mv850e:
|
||||
case OPT_mv850e1:
|
||||
case OPT_mv850es:
|
||||
opts->x_target_flags &= ~(MASK_CPU ^ MASK_V850E);
|
||||
return true;
|
||||
|
||||
case OPT_mv850e2:
|
||||
opts->x_target_flags &= ~(MASK_CPU ^ MASK_V850E2);
|
||||
return true;
|
||||
|
||||
case OPT_mv850e2v3:
|
||||
opts->x_target_flags &= ~(MASK_CPU ^ MASK_V850E2V3);
|
||||
return true;
|
||||
|
||||
case OPT_mtda_:
|
||||
v850_handle_memory_option (SMALL_MEMORY_TDA, opts,
|
||||
decoded->orig_option_with_args_text,
|
||||
|
@ -3130,6 +3139,23 @@ v850_legitimate_constant_p (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
|
|||
&& GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT
|
||||
&& !CONST_OK_FOR_K (INTVAL (XEXP (XEXP (x, 0), 1)))));
|
||||
}
|
||||
|
||||
static int
|
||||
v850_memory_move_cost (enum machine_mode mode, bool in)
|
||||
{
|
||||
switch (GET_MODE_SIZE (mode))
|
||||
{
|
||||
case 0:
|
||||
return in ? 24 : 8;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
return in ? 6 : 2;
|
||||
default:
|
||||
return (GET_MODE_SIZE (mode) / 2) * (in ? 3 : 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* V850 specific attributes. */
|
||||
|
||||
|
@ -3151,6 +3177,10 @@ static const struct attribute_spec v850_attribute_table[] =
|
|||
};
|
||||
|
||||
/* Initialize the GCC target structure. */
|
||||
|
||||
#undef TARGET_MEMORY_MOVE_COST
|
||||
#define TARGET_MEMORY_MOVE_COST v850_memory_move_cost
|
||||
|
||||
#undef TARGET_ASM_ALIGNED_HI_OP
|
||||
#define TARGET_ASM_ALIGNED_HI_OP "\t.hword\t"
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ extern GTY(()) rtx v850_compare_op1;
|
|||
builtin_define ("__EP__"); \
|
||||
} while(0)
|
||||
|
||||
#define MASK_CPU (MASK_V850 | MASK_V850E)
|
||||
#define MASK_CPU (MASK_V850 | MASK_V850E | MASK_V850E1 | MASK_V850E2 | MASK_V850E2V3)
|
||||
|
||||
/* Target machine storage layout */
|
||||
|
||||
|
@ -156,7 +156,7 @@ extern GTY(()) rtx v850_compare_op1;
|
|||
|
||||
/* Allocation boundary (in *bits*) for the code of a function.
|
||||
16 is the minimum boundary; 32 would give better performance. */
|
||||
#define FUNCTION_BOUNDARY 16
|
||||
#define FUNCTION_BOUNDARY (optimize_size ? 16 : 32)
|
||||
|
||||
/* No data type wants to be aligned rounder than this. */
|
||||
#define BIGGEST_ALIGNMENT 32
|
||||
|
|
|
@ -232,7 +232,7 @@
|
|||
|
||||
(define_insn "*movsi_high"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r")
|
||||
(high:SI (match_operand 1 "" "")))]
|
||||
(high:SI (match_operand 1 "immediate_operand" "i")))]
|
||||
""
|
||||
"movhi hi(%1),%.,%0"
|
||||
[(set_attr "length" "4")
|
||||
|
@ -543,8 +543,13 @@
|
|||
(mod:SI (match_dup 1)
|
||||
(match_dup 2)))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
"TARGET_V850E"
|
||||
"div %2,%0,%3"
|
||||
"TARGET_V850E || TARGET_V850E2_ALL"
|
||||
{
|
||||
if (TARGET_V850E2_ALL)
|
||||
return "divq %2,%0,%3";
|
||||
else
|
||||
return "div %2,%0,%3";
|
||||
}
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "clobber")
|
||||
(set_attr "type" "div")])
|
||||
|
@ -557,8 +562,13 @@
|
|||
(umod:SI (match_dup 1)
|
||||
(match_dup 2)))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
"TARGET_V850E"
|
||||
"divu %2,%0,%3"
|
||||
"TARGET_V850E || TARGET_V850E2_ALL"
|
||||
{
|
||||
if (TARGET_V850E2_ALL)
|
||||
return "divqu %2,%0,%3";
|
||||
else
|
||||
return "divu %2,%0,%3";
|
||||
}
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "clobber")
|
||||
(set_attr "type" "div")])
|
||||
|
@ -574,7 +584,7 @@
|
|||
(mod:HI (match_dup 1)
|
||||
(match_dup 2)))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
"TARGET_V850E"
|
||||
"TARGET_V850E || TARGET_V850E2_ALL"
|
||||
"divh %2,%0,%3"
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "clobber")
|
||||
|
@ -591,7 +601,7 @@
|
|||
(umod:HI (match_dup 1)
|
||||
(match_dup 2)))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
"TARGET_V850E"
|
||||
"TARGET_V850E || TARGET_V850E2_ALL"
|
||||
"zxh %0 ; divhu %2,%0,%3"
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "clobber")
|
||||
|
@ -1501,7 +1511,7 @@
|
|||
;; EXTEND INSTRUCTIONS
|
||||
;; ----------------------------------------------------------------------
|
||||
|
||||
(define_insn ""
|
||||
(define_insn "*zero_extendhisi2_v850e"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
|
||||
(zero_extend:SI
|
||||
(match_operand:HI 1 "nonimmediate_operand" "0,r,T,m")))
|
||||
|
@ -1515,17 +1525,29 @@
|
|||
[(set_attr "length" "2,4,2,4")
|
||||
(set_attr "cc" "none_0hit,set_zn,none_0hit,none_0hit")])
|
||||
|
||||
(define_insn "zero_extendhisi2"
|
||||
(define_insn "*zero_extendhisi2_v850"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r")
|
||||
(zero_extend:SI
|
||||
(match_operand:HI 1 "register_operand" "r")))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
(clobber (reg:CC CC_REGNUM))] ;; A lie, but we have to match the expander
|
||||
""
|
||||
"andi 65535,%1,%0"
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "set_zn")])
|
||||
|
||||
(define_insn ""
|
||||
(define_expand "zero_extendhisi2"
|
||||
[(parallel [(set (match_operand:SI 0 "register_operand")
|
||||
(zero_extend:SI
|
||||
(match_operand:HI 1 "nonimmediate_operand")))
|
||||
(clobber (reg:CC CC_REGNUM))])]
|
||||
""
|
||||
{
|
||||
if (! (TARGET_V850E || TARGET_V850E2_ALL))
|
||||
operands[1] = force_reg (HImode, operands[1]);
|
||||
}
|
||||
)
|
||||
|
||||
(define_insn "*zero_extendqisi2_v850e"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,r,r,r")
|
||||
(zero_extend:SI
|
||||
(match_operand:QI 1 "nonimmediate_operand" "0,r,T,m")))
|
||||
|
@ -1539,16 +1561,28 @@
|
|||
[(set_attr "length" "2,4,2,4")
|
||||
(set_attr "cc" "none_0hit,set_zn,none_0hit,none_0hit")])
|
||||
|
||||
(define_insn "zero_extendqisi2"
|
||||
(define_insn "*zero_extendqisi2_v850"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r")
|
||||
(zero_extend:SI
|
||||
(match_operand:QI 1 "register_operand" "r")))
|
||||
(clobber (reg:CC CC_REGNUM))]
|
||||
(match_operand:QI 1 "register_operand" "r")))
|
||||
(clobber (reg:CC CC_REGNUM))] ;; A lie, but we have to match the expander
|
||||
""
|
||||
"andi 255,%1,%0"
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "set_zn")])
|
||||
|
||||
(define_expand "zero_extendqisi2"
|
||||
[(parallel [(set (match_operand:SI 0 "register_operand")
|
||||
(zero_extend:SI
|
||||
(match_operand:QI 1 "nonimmediate_operand")))
|
||||
(clobber (reg:CC CC_REGNUM))])]
|
||||
""
|
||||
{
|
||||
if (! (TARGET_V850E || TARGET_V850E2_ALL))
|
||||
operands[1] = force_reg (QImode, operands[1]);
|
||||
}
|
||||
)
|
||||
|
||||
;;- sign extension instructions
|
||||
|
||||
;; ??? The extendhisi2 pattern should not emit shifts for v850e?
|
||||
|
|
Loading…
Reference in New Issue