[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