summaryrefslogtreecommitdiff
path: root/gcc/config/pa/constraints.md
diff options
context:
space:
mode:
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>2013-02-03 19:52:37 +0000
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>2013-02-03 19:52:37 +0000
commite8248b41e9d2f25a8ec6843387ec148aeb7e9838 (patch)
tree7a49ae3218a0594dad99ab926d440ac1c4de8224 /gcc/config/pa/constraints.md
parent95da0dc6f30722a5c46af68d1d6a24e7830b4b68 (diff)
downloadgcc-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.md11
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.