Add FR450 support to the FR-V port

Dave Brolley brolley@redhat.com
Fri Feb 27 22:01:00 GMT 2004


This patch is ok.

Richard Sandiford wrote:

>This patch adds FR450 support to the FR-V port.  The FR450 similar in many
>respects to the FR405, the main differences being:
>
>   - it has an MMU
>   - it has some new special purpose registers, including 4 more accumulators
>   - it has some new media instructions
>   - the media issue restrictions are slightly more relaxed
>   - the latency of some operations is different
>
>Other changes in this patch:
>
>   - add a -mcpu=fr405 option to gas
>   - make gas check whether the target supports a particular instruction
>
>The patch also includes various test cases for the new functionality.
>No docs changes, since there aren't any FR-V docs that I can see...
>
>Tested against the binutils and sim testsuites.  OK to install?
>
>Richard
>
>
>include/elf/
>	* frv.h (EF_FRV_CPU_FR405, EF_FRV_CPU_FR450): Define.
>
>bfd/
>	* archures.c (bfd_mach_fr450): New.
>	* bfd-in2.h: Regenerate.
>	* cpu-frv.c (arch_info_450): New bfd_arch_info_type.
>	(arch_info_500): Link to it.
>	* elf32-frv.c (elf32_frv_machine, frv_elf_merge_private_bfd_data)
>	(frv_elf_print_private_bfd_data): Handle fr405 and fr450 header flags.
>	(frv_elf_arch_extension_p): New function.
>	(frv_elf_merge_private_bfd_data): Use it.
>
>cpu/
>	* frv.cpu (define-arch frv): Add fr450 mach.
>	(define-mach fr450): New.
>	(define-model fr450): New.  Add profile units to every fr450 insn.
>	(define-attr UNIT): Add MDCUTSSI.
>	(define-attr FR450-MAJOR): New enum.  Add to every fr450 insn.
>	(define-attr AUDIO): New boolean.
>	(f-LRAE, f-LRAD, f-LRAS, f-TLBPRopx, f-TLBPRL)
>	(f-LRA-null, f-TLBPR-null): New fields.
>	(scr0, scr1, scr2, scr3, imavr1, damvr1, cxnr, ttbr)
>	(tplr, tppr, tpxr, timerh, timerl, timerd, btbr): New SPRs.
>	(LRAE, LRAD, LRAS, TLBPRopx, TLBPRL): New operands.
>	(LRA-null, TLBPR-null): New macros.
>	(iacc-multiply-r-r, slass, scutss, int-arith-ss-r-r): Add AUDIO attr.
>	(load-real-address): New macro.
>	(lrai, lrad, tlbpr): New instructions.
>	(media-cut-acc, media-cut-acc-ss): Add fr450-major argument.
>	(mcut, mcuti, mcutss, mcutssi): Adjust accordingly.
>	(mdcutssi): Change UNIT attribute to MDCUTSSI.
>	(media-low-clear-semantics, media-scope-limit-semantics)
>	(media-quad-limit, media-quad-shift): New macros.
>	(mqlclrhs, mqlmths, mqsllhi, mqsrahi): New instructions.
>	* frv.opc (frv_is_branch_major, frv_is_float_major, frv_is_media_major)
>	(frv_is_branch_insn, frv_is_float_insn, frv_is_media_insn)
>	(frv_vliw_reset, frv_vliw_add_insn): Handle bfd_mach_fr450.
>	(fr450_unit_mapping): New array.
>	(fr400_unit_mapping, fr500_unit_mapping, fr550_unit_mapping): Add entry
>	for new MDCUTSSI unit.
>	(fr450_check_insn_major_constraints): New function.
>	(check_insn_major_constraints): Use it.
>
>gas/
>	* config/tc-frv.c (fr400_audio): New variable.
>	(md_parse_option, md_show_usage): Add -mcpu=fr405 and -mcpu=fr450.
>	(md_parse_option): Set fr400_audio for -mcpu=fr400 and -mcpu=fr405.
>	(target_implements_insn_p): New function.
>	(md_assemble): Report an error if the processor doesn't implement
>	the instruction.
>
>gas/testsuite/
>	* gas/frv/fr405-insn.[sdl]: New test.
>	* gas/frv/fr450-spr.[sd]: New test.
>	* gas/frv/fr450-insn.[sdl]: New test.
>	* gas/frv/fr450-media-issue.[sl]: New test.
>	* gas/frv/allinsn.exp: Run new tests.  Ensure fr405 instructions
>	aren't accepted for -mcpu=fr400 or -mcpu=fr500.  Ensure fr450
>	instructions aren't accepted for -mcpu=fr400, -mcpu=fr405 or
>	-mcpu=fr500.
>
>sim/frv/
>	* Makefile.in (SIM_OBJS): Add profile-fr450.o.
>	(profile-fr450.o): New dependency.
>	(stamp-cpu): Add fr450 to the list of machs.
>	* sim-frv.h (SPR_IS_ACC): New macro.
>	(H_SPR_ACC4, H_SPR_ACC63, H_SPR_ACCG4, H_SPR_ACCG63): Delete.
>	* cache.c (frv_cache_init, non_cache_access): Handle bfd_mach_fr450.
>	* frv.c (check_register_alignment, check_fr_register_alignment)
>	(check_memory_alignment, do_media_average): Likewise.
>	(frvbf_clear_accumulators): Likewise.  Use a mask of valid registers
>	rather than a consecutive range.
>	* interrupts.c (frv_queue_illegal_instruction_interrupt)
>	(frv_queue_non_implemented_instruction_interrupt): Handle
>	bfd_mach_fr450.
>	* memory.c (check_data_read_address, check_readwrite_address)
>	(check_insn_read_address, check_write_address): Likewise.
>	* mloop.in (@cpu@_simulate_insn_prefetch): Likewise.
>	* profile.c (reset_gr_flags, reset_fr_flags, reset_acc_flags)
>	(frvbf_model_insn_before, frvbf_model_insn_after): Likewise.
>	* profile-fr450.c: New file.
>	* registers.c (fr450_spr): New array.
>	(frv_register_control_init): Check its size.  Use it for fr450.
>	(frv_check_register_access): Handle bfd_mach_fr450.
>	(frv_check_spr_read_access): Likewise. Generalize accumulator check.
>	* traps.c (frv_core_signal, frvbf_media_cr_not_aligned): Likewise.
>	(frvbf_media_acc_not_aligned): Likewise.
>	(frvbf_media_register_not_aligned): Likewise.
>
>sim/testsuite/
>	* sim/frv/allinsn.exp (all_machs): Add fr405 and fr450.
>	* sim/fr400/allinsn.exp (all_machs): Likewise.
>	* sim/fr400/addss.cgs (mach): Change to "fr405 fr450".
>	* sim/fr400/scutss.cgs (mach): Likewise.
>	* sim/fr400/slass.cgs (mach): Likewise.
>	* sim/fr400/smass.cgs (mach): Likewise.
>	* sim/fr400/smsss.cgs (mach): Likewise.
>	* sim/fr400/smu.cgs (mach): Likewise.
>	* sim/fr400/subss.cgs (mach): Likewise.
>	* sim/interrupts/fp_exception.cgs: Replace fmadds with .word.
>	* sim/interrupts/fp_exception-fr550.cgs: Likewise.
>	* sim/frv/mqlclrhs.cgs: New test.
>	* sim/frv/mqlmths.cgs: New test.
>	* sim/frv/mqsllhi.cgs: New test.
>	* sim/frv/mqsrahi.cgs: New test.
>
>ld/testsuite/
>	* ld-frv/fr450-link[abc].s, fr450-link.d: New test.
>	* ld-frv/frv.exp: New harness.
>  
>




More information about the Binutils mailing list