diff options
author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-03 19:52:37 +0000 |
---|---|---|
committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-02-03 19:52:37 +0000 |
commit | e8248b41e9d2f25a8ec6843387ec148aeb7e9838 (patch) | |
tree | 7a49ae3218a0594dad99ab926d440ac1c4de8224 /gcc/config/pa/constraints.md | |
parent | 95da0dc6f30722a5c46af68d1d6a24e7830b4b68 (diff) | |
download | gcc-e8248b41e9d2f25a8ec6843387ec148aeb7e9838.tar.gz |
* config/pa/constraints.md: Adjust unused letters. Change "T"
constraint to match_test floating_point_store_memory_operand().
* config/pa/predicates.md (reg_plus_base_memory_operand): New.
(base14_operand): New.
(floating_point_store_memory_operand): New.
(integer_store_memory_operand): Revise to use base14_operand and
reg_plus_base_memory_operand.
(move_dest_operand): Allow symbolic_memory_operands.
(symbolic_memory_operand): Check for LO_SOM.
(symbolic_operand): Change default case to break.
* config/pa/pa.md: Remove unamed DFmode and SFmode patterns to force
CONST_DOUBLE values to be reloaded by putting them into memory when
the destination is a floating point register.
(movdf): Remove code to handle CONST_DOUBLE.
(movsf): Likewise.
(reload_indf_r1): New.
(reload_insf_r1): New.
Consistently use "Q" and "T" constraints with integer and floating
point move instructions, respectively.
(movdi): Remove FAIL.
Change predicate for source operand unamed DImode move from
general_operand to move_src_operand.
(umulsidi3): Change predicate for destination operand to
register_operand.
Likewise for similar unamed patterns.
* config/pa/pa-protos.h (pa_legitimize_reload_address): Declare.
* config/pa/pa.c (pa_symbolic_expression_p): Remove extra parenthesis.
(hppa_legitimize_address): Simplify mask calculation.
(pa_emit_move_sequence): Revised handling of secondary reloads from
REG+D addresses for floating point loads and stores. Directly handle
loading CONST0_RTX (mode) to a floating point register.
(pa_secondary_reload): Handle reloading DF and SFmode constant values
to floating point registers. Don't restrict secondary reloads to
floating point registers to integer modes. Revise some comments and
cleanup some code.
(TARGET_LEGITIMATE_ADDRESS_P): Define.
(pa_legitimate_address_p): New.
(pa_legitimize_reload_address): New.
* config/pa/pa.h (STRICT_REG_OK_FOR_INDEX_P): New.
(STRICT_REG_OK_FOR_BASE_P): New.
(GO_IF_LEGITIMATE_ADDRESS): Delete. Update some related comments.
(LEGITIMIZE_RELOAD_ADDRESS): Revise to use pa_legitimize_reload_address.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@195702 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/pa/constraints.md')
-rw-r--r-- | gcc/config/pa/constraints.md | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/gcc/config/pa/constraints.md b/gcc/config/pa/constraints.md index 899e59139da..bdc119e4d31 100644 --- a/gcc/config/pa/constraints.md +++ b/gcc/config/pa/constraints.md @@ -18,8 +18,8 @@ ;; <http://www.gnu.org/licenses/>. ;;; Unused letters: -;;; ABCDEF H V Y -;;; bcde ghijklmnop stuvw z +;;; ABCD H Y +;;; bcde h jkl tuvw z ;; Register constraints. (define_register_constraint "a" "R1_REGS" @@ -124,12 +124,7 @@ (define_constraint "T" "A memory operand for floating-point loads and stores." - (and (match_code "mem") - (match_test "!IS_LO_SUM_DLT_ADDR_P (XEXP (op, 0)) - && !IS_INDEX_ADDR_P (XEXP (op, 0)) - && memory_address_p ((GET_MODE_SIZE (mode) == 4 - ? SFmode : DFmode), - XEXP (op, 0))"))) + (match_test "floating_point_store_memory_operand (op, mode)")) ;; We could allow short displacements but TARGET_LEGITIMATE_ADDRESS_P ;; can't tell when a long displacement is valid. |