diff options
author | claziss <claziss@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-16 14:11:24 +0000 |
---|---|---|
committer | claziss <claziss@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-02-16 14:11:24 +0000 |
commit | 74d6399477fcad989ca6493821fa32a9a5588b2f (patch) | |
tree | da942afd8cfd2f846b537d732131dfa2f973eb74 /gcc/config/arc/arc.opt | |
parent | e73a0c13a120374db2d874e1b789af300311cd97 (diff) | |
download | gcc-74d6399477fcad989ca6493821fa32a9a5588b2f.tar.gz |
[ARC] Add single/double IEEE precission FPU support.
gcc/
2016-02-16 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc-modes.def (CC_FPU, CC_FPU_UNEQ): New modes.
* config/arc/arc-opts.h (FPU_SP, FPU_SF, FPU_SC, FPU_SD, FPU_DP)
(FPU_DF, FPU_DC, FPU_DD, FXP_DP): Define.
* config/arc/arc.c (arc_init): Check FPU options.
(get_arc_condition_code): Handle new CC_FPU* modes.
(arc_select_cc_mode): Likewise.
(arc_conditional_register_usage): Allow 64 bit datum into even-odd
register pair only. Allow access for ARCv2 accumulator.
(gen_compare_reg): Whenever we have FPU support use FPU compare
instructions.
(arc_reorg): Don't generate brcc insns when FPU compare
instructions are involved.
* config/arc/arc.h (TARGET_DPFP): Add TARGET_FP_DPAX condition.
(TARGET_OPTFPE): Add condition when ARC EM can use optimized
floating point emulation.
(ACC_REG_FIRST, ACC_REG_LAST, ACCL_REGNO, ACCH_REGNO): Define.
(REVERSE_CONDITION): Add new CC_FPU* modes.
(TARGET_FP_SP_BASE): Define.
(TARGET_FP_DP_BASE): Likewise.
(TARGET_FP_SP_FUSED): Likewise.
(TARGET_FP_DP_FUSED): Likewise.
(TARGET_FP_SP_CONV): Likewise.
(TARGET_FP_DP_CONV): Likewise.
(TARGET_FP_SP_SQRT): Likewise.
(TARGET_FP_DP_SQRT): Likewise.
(TARGET_FP_DP_AX): Likewise.
* config/arc/arc.md (ARCV2_ACC): New constant.
(type): New fpu type attribute.
(SDF): Conditional iterator.
(cstore<mode>, cbranch<mode>): Change expand condition.
(addsf3, subsf3, mulsf3, adddf3, subdf3, muldf3): New expands,
handles FPU/FPX cases as well.
* config/arc/arc.opt (mfpu): New option.
* config/arc/fpx.md (addsf3_fpx, subsf3_fpx, mulsf3_fpx):
Renamed.
(adddf3, muldf3, subdf3): Removed.
* config/arc/predicates.md (proper_comparison_operator): Recognize
CC_FPU* modes.
* config/arc/fpu.md: New file.
* doc/invoke.texi (ARC Options): Document mfpu option.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233451 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arc/arc.opt')
-rw-r--r-- | gcc/config/arc/arc.opt | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/gcc/config/arc/arc.opt b/gcc/config/arc/arc.opt index 00b98d58f54..2227b7554c3 100644 --- a/gcc/config/arc/arc.opt +++ b/gcc/config/arc/arc.opt @@ -413,3 +413,46 @@ Enable atomic instructions. mll64 Target Report Mask(LL64) Enable double load/store instructions for ARC HS. + +mfpu= +Target RejectNegative Joined Enum(arc_fpu) Var(arc_fpu_build) Init(0) +Specify the name of the target floating point configuration. + +Enum +Name(arc_fpu) Type(int) + +EnumValue +Enum(arc_fpu) String(fpus) Value(FPU_SP | FPU_SC) + +EnumValue +Enum(arc_fpu) String(fpud) Value(FPU_SP | FPU_SC | FPU_DP | FPU_DC) + +EnumValue +Enum(arc_fpu) String(fpuda) Value(FPU_SP | FPU_SC | FPX_DP) + +EnumValue +Enum(arc_fpu) String(fpuda_div) Value(FPU_SP | FPU_SC | FPU_SD | FPX_DP) + +EnumValue +Enum(arc_fpu) String(fpuda_fma) Value(FPU_SP | FPU_SC | FPU_SF | FPX_DP) + +EnumValue +Enum(arc_fpu) String(fpuda_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD | FPX_DP) + +EnumValue +Enum(arc_fpu) String(fpus_div) Value(FPU_SP | FPU_SC | FPU_SD) + +EnumValue +Enum(arc_fpu) String(fpud_div) Value(FPU_SP | FPU_SC | FPU_SD | FPU_DP | FPU_DC | FPU_DD) + +EnumValue +Enum(arc_fpu) String(fpus_fma) Value(FPU_SP | FPU_SC | FPU_SF) + +EnumValue +Enum(arc_fpu) String(fpud_fma) Value(FPU_SP | FPU_SC | FPU_SF | FPU_DP | FPU_DC | FPU_DF) + +EnumValue +Enum(arc_fpu) String(fpus_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD) + +EnumValue +Enum(arc_fpu) String(fpud_all) Value(FPU_SP | FPU_SC | FPU_SF | FPU_SD | FPU_DP | FPU_DC | FPU_DF | FPU_DD) |