This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
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.
Attachment:
fr451-main.diff.bz2
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |