[PATCH, V850] Add support for V850E2 and V850E2V3
Naveen H. S
Naveen.S@kpitcummins.com
Mon Jun 7 12:28:00 GMT 2010
Hi,
Please find attached the "v850-gcc-v850e2-v850e2v3-support.patch".
The patch adds support for new target variants of V850 i.e. V850E2 and
V850E2V3. These processors are upwardly compatible with earlier V850
targets already supported in the current gcc port. V850E2V3 target
supports floating point operations. Hence, these instructions along with
registers supported by V850E2V3 are defined in the current patch.
The Bintuils and Newlib part of the support will be posted in respective
mailing list. The GDB support will also be posted.
Please review the patch and let me know if there should be any
modifications in it.
2010-06-07 Naveen.H.S <naveenh1@kpitcummins.com>
* gcc-4.6.0/configure.ac: Remove v850ea support.
* gcc-4.6.0/configure: Regenerate.
* gcc/config/v850/lib1funcs.asm (save_r2_r31, return_r2_r31,
save_r20_r31, return_r20_r31, save_r21_r31, return_r21_r31,
save_r22_r31, return_r22_r31, save_r23_r31, return_r23_r31,
save_r24_r31, return_r24_r31, save_r25_r31, return_r25_r31,
save_r26_r31, return_r26_r31, save_r27_r31, return_r27_r31,
save_r28_r31, return_r28_r31, save_r29_r31, return_r29_r31,
save_r31, return_r31, save_interrupt, return_interrupt,
save_all_interrupt, return_all_interrupt, L_save_r2_r31,
L_return_interrupt, callt_return_interrupt, L_restore_all_interrupt,
L_save_##START##_r31c, L_callt_save_r31c: Updated as per the
new ABI requirements.
save_r6_r9, L_callt_save_r6_r9: Remove.
* gcc/config/v850/predicates.md (even_reg_operand, disp23_operand,
const_float_1_operand const_float_0_operand): New Predicates.
(pattern_is_ok_for_prepare): Updated as per new ABI requirements.
(pattern_is_ok_for_prologue, pattern_is_ok_for_epilogue): Update as
per the ABI requirements.
* gcc/config/v850/t-v850: Update multilibs for new target variants.
(save_varargs, callt_save_varargs, callt_save_r6_r9): Remove.
* gcc/config/v850/t-v850e: Likewise.
* gcc/config/v850/v850.c (v850_issue_rate): New.
(v850_strict_argument_naming): New.
(function_arg): Modify to generate a different ABI.
(print_operand): Update case 'z' to support float modes.
(output_move_single): Modify to generate appropriate and better
assembly.
(v850_float_z_comparison_operator, v850_select_cc_mode,
v850_float_nz_comparison_operator, v850_gen_float_compare,
v850_gen_compare): New functions to support comparison of
float values.
(ep_memory_offset): Add support for V850E2 targets.
(INTERRUPT_FIXED_NUM, INTERRUPT_ALL_SAVE_NUM): Update.
(INTERRUPT_REGPARM_NUM): Remove.
(compute_register_save_size): Add extra case to save/restore
long call.
(use_prolog_function): New function to support prologue.
(expand_prologue): Add support for V850E2 targets and modified
as per the current ABI requirements.
(expand_epilogue): Likewise.
(notice_update_cc): Remove.
(construct_restore_jr): Modify based on TARGET_LONG_CALLS.
(construct_save_jarl): Likewise.
(construct_dispose_instruction): Update as per the current ABI
requirements.
(construct_prepare_instruction): Likewise.
* gcc/config/v850/v850.h(TARGET_CPU_DEFAULT): Add target
predefines.
(TARGET_CPU_v850e2, TARGET_CPU_v850e2v3): Define
(CPP_SPEC): Updated to support v850e2 targets.
(STRICT_ALIGNMENT): Modified.
(FIRST_PSEUDO_REGISTER): Updated to add even registers.
(FIXED_REGISTERS): Likewise.
(CALL_USED_REGISTERS): Likewise.
(CONDITIONAL_REGISTER_USAGE): Updated.
(HARD_REGNO_MODE_OK): Updated.
(reg_class): Updated to add even registers.
(REG_CLASS_NAMES): Likewise.
(REG_CLASS_CONTENTS): Likewise.
(REGNO_REG_CLASS): Updated for CC registers.
(REG_CLASS_FROM_LETTER): Added support for even registers.
(REGNO_OK_FOR_BASE_P): Updated for CC registers.
(STACK_POINTER_REGNUM, FRAME_POINTER_REGNUM, LINK_POINTER_REGNUM,
ARG_POINTER_REGNUM): Updated.
(FUNCTION_ARG_ADVANCE): Define.
(REG_PARM_STACK_SPACE): Update as per the current ABI requirements.
(OUTGOING_REG_PARM_STACK_SPACE): Remove.
(EXTRA_CONSTRAINT): Add new constraint 'W' for 23-bit displacement.
(GO_IF_LEGITIMATE_ADDRESS): Updated.
(CC_OVERFLOW_UNUSABLE, CC_NO_CARRY, CC_NO_OVERFLOW,
NOTICE_UPDATE_CC): Remove.
(SELECT_CC_MODE, REVERSIBLE_CC_MODE, CANONICALIZE_COMPARISON):
Define.
(REGISTER_NAMES): Updated to add psw and fcc registers.
(ADDITIONAL_REGISTER_NAMES): Updated.
(ASM_OUTPUT_ADDR_DIFF_ELT): Updated to support new targets.
(JUMP_TABLES_IN_TEXT_SECTION): Updated.
* gcc/config/v850/v850.md (define_constants): Define new
constants.
(type): Update store,bit1,macc,div,fpu and single attributes.
(cpu): New attribute.
(cc): Add set_z attribute.
(unsign23byte_load, sign23byte_load, unsign23hword_load,
sign23hword_load, 23word_load, 23byte_store, 23hword_store,
23word_store): New instructions for 23-bit displacement load and
store.
(movqi_internal, movhi_internal): Update the attributes.
(movsi, movsi_internal_v850e): Updated to support v850e2 targets.
(movsi_internal_v850e, movsi_internal, movsf_internal): Update
the attributes.
(v850_tst1): Modified using CC_REGNUM.
(tstsi): Remove.
(cmpsi): Modified as define_expand from define_insn.
(cmpsi_insn, cmpsf, cmpdf): New instructions.
(addsi3, subsi3, negsi2, divmodsi4, udivmodsi4, divmodhi4,
udivmodhi4, v850_clr1_1, v850_clr1_2, v850_clr1_3, andsi3,
v850_set1_1, v850_set1_3, iorsi3, v850_not1_1, v850_not1_3, xorsi3,
one_cmplsi2): Clobber the CC_REGNUM register.
(v850_clr1_1, v850_clr1_2, v850_clr1_3, andsi3, v850_set1_1,
v850_set1_2, v850_set1_3, iorsi3, v850_not1_1, v850_not1_2,
v850_not1_3, xorsi3, one_cmplsi2): Update the attributes
accordingly.
(sle, sleu, sge, sgeu, slt, sltu, sgt, sgtu, seq): New compare
instructions.
(setf_insn, set_z_insn, set_nz_insn): New instructions for
v850e2v3 target.
(movsicc, movsicc_normal, movsicc_reversed): Add support for V850E2
targets.
(movsicc_tst1, movsicc_tst1_reversed, sasf_1, sasf_2): Remove.
(sasf): New instruction.
(rotlhi3, rotlhi3_8, rotlsi3, rotlsi3_16): Update to support V850E2
targets. CC_REGNUM register is clobbered and attributes are
updated.
(ble, bleu, bge, bgeu, blt, bltu, bgt, bgtu, beq, bne): New
conditional branch instructions.
(branch_normal, branch_invert): Updated. CC_REGNUM register is
clobbered and attributes are updated.
(branch_z_normal, branch_z_invert, branch_nz_normal,
branch_nz_invert): New branch related instructions.
(jump): Updated the attributes.
(switch): Update to support new targets. CC_REGNUM register is
clobbered and attributes are updated.
(call_internal_short, call_internal_long, call_value_internal_short,
call_value_internal_long): Updated the attributes.
(zero_extendhisi2, zero_extendqisi2): CC_REGNUM register is
clobbered and attributes are updated.
(extendhisi_insn, extendhisi2, extendqisi_insn, extendqisi2):
Update to support new targets. CC_REGNUM register is clobbered.
(ashlsi3_v850e2, lshrsi3_v850e2, ashrsi3_v850e2): New shift
instructions.
(lshrsi3, ashrsi3): CC_REGNUM register is clobbered and attributes
are updated.
(ffssi2, addsf3, adddf3, subsf3, subdf3, mulsf3, muldf3, divsf3,
divdf3, minsf3, mindf3, maxsf3, maxdf3, abssf2, absdf2, negsf2,
negdf2, sqrtsf2, sqrtdf2, truncsfsi2, truncdfsi2, floatsisf2,
floatsidf2, extendsfdf2, extenddfsf2, recipsf2, recipdf2,
rsqrtsf2, rsqrtdf2, maddsf4, msubsf4, nmaddsf4, nmsubsf4,
cmpsf_le_insn, cmpsf_lt_insn, cmpsf_ge_insn, cmpsf_gt_insn,
cmpsf_eq_insn, cmpsf_ne_insn, cmpdf_le_insn, cmpdf_lt_insn,
cmpdf_ge_insn, cmpdf_gt_insn, cmpdf_eq_insn, cmpdf_ne_insn, trfsr,
movsfcc, movdfcc, movsfcc_z_insn, movsfcc_nz_insn, movdfcc_z_insn,
movdfcc_nz_insn, movedfcc_z_zero, movedfcc_nz_zero): New floating
point instructions defined for V850e2v3 target.
(callt_save_interrupt, callt_return_interrupt, return_interrupt):
Add support for V850E2 targets and CC_REGNUM register is clobbered.
(callt_save_all_interrupt, callt_restore_all_interrupt): Add
support for new targets.
* gcc/config/v850/v850-modes.def: New file.
* gcc/config/v850/v850.opt(mstrict-align): Remove.
(mno-strict-align, mjump-tables-in-data-section, mv850e2,
mv850e2v3): New command line options for V850.
* gcc/config.gcc: Update the newly added files.
* gcc/doc/invoke.texi: Update the newly added command line
options for V850 target.
* gcc/regmove.c (fixup_match_2): Update using pseudo register.
Thanks & Regards,
Naveen.H.S
-------------- next part --------------
A non-text attachment was scrubbed...
Name: v850-gcc-v850e2-v850e2v3-support.patch
Type: application/octet-stream
Size: 161120 bytes
Desc: v850-gcc-v850e2-v850e2v3-support.patch
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20100607/9fbc291c/attachment.obj>
More information about the Gcc-patches
mailing list