diff options
author | Jeff Law <law@gcc.gnu.org> | 1993-01-10 15:59:33 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1993-01-10 15:59:33 -0700 |
commit | 9f309ba3e7ae686cd3e193722eb43e28e9d83018 (patch) | |
tree | ed5e6a00eb4f8ca0514ab0e6fa03dd096de16dc2 | |
parent | 4e82968e329e453ca8df62c1cb1b913a5a43ef8a (diff) | |
download | gcc-9f309ba3e7ae686cd3e193722eb43e28e9d83018.zip gcc-9f309ba3e7ae686cd3e193722eb43e28e9d83018.tar.gz gcc-9f309ba3e7ae686cd3e193722eb43e28e9d83018.tar.bz2 |
pa.md (reload_insi, [...]): Use new "Z" constraint instead of "z" constraint.
* pa.md (reload_insi, reload_outsi): Use new "Z" constraint instead
of "z" constraint.
(load HIGH patterns): Rewrite to not show DP relocation.
From-SVN: r3185
-rw-r--r-- | gcc/config/pa/pa.md | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 5dd3c81..fd37ec0 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -729,7 +729,7 @@ ;; going in to or out of float point registers. (define_expand "reload_insi" - [(set (match_operand:SI 0 "register_operand" "=z") + [(set (match_operand:SI 0 "register_operand" "=Z") (match_operand:SI 1 "general_operand" "")) (clobber (match_operand:SI 2 "register_operand" "=&r"))] "" @@ -745,7 +745,7 @@ (define_expand "reload_outsi" [(set (match_operand:SI 0 "general_operand" "") - (match_operand:SI 1 "register_operand""z")) + (match_operand:SI 1 "register_operand" "Z")) (clobber (match_operand:SI 2 "register_operand" "=&r"))] "" " @@ -895,37 +895,34 @@ [(set_attr "type" "move") (set_attr "length" "1")]) -(define_insn "" - [(set (match_operand:SI 0 "register_operand" "=a,&?*r") - (plus:SI (match_operand:SI 1 "register_operand" "r,r") - (high:SI (match_operand 2 "" ""))))] - "!TARGET_KERNEL" - "@ - addil L'%G2,%1 - ldil L'%G2,%0\;add %0,%1,%0" - [(set_attr "type" "binary,binary") - (set_attr "length" "1,2")]) - +;; For kernel code always use addil; else we can lose due to a linker +;; bug involving absolute symbols and "ldil;add" style relocations (define_insn "" [(set (match_operand:SI 0 "register_operand" "=a") - (plus:SI (match_operand:SI 1 "register_operand" "r") - (high:SI (match_operand 2 "" ""))))] - "TARGET_KERNEL" + (high:SI (match_operand 1 "" "")))] + "TARGET_KERNEL && symbolic_operand(operands[1], Pmode) + && ! function_label_operand (operands[1]) + && ! read_only_operand (operands[1])" "@ - addil L'%G2,%1" + addil L'%G1,%%r27" [(set_attr "type" "binary") (set_attr "length" "1")]) -(define_split - [(set (match_operand:SI 0 "register_operand" "") - (plus:SI (match_operand:SI 1 "register_operand" "") - (high:SI (match_operand 2 "" "")))) - (clobber (match_scratch:SI 3 ""))] - "reload_completed && REGNO (operands[0]) != 1" - [(set (match_dup 3) (high:SI (match_dup 2))) - (set (match_dup 0) (plus:SI (match_dup 3) (match_dup 1)))] - "") +;; For all symbolic operands *except* function addresses and read-only +;; operands (which live in TEXT space and do not require relocation). +(define_insn "" + [(set (match_operand:SI 0 "register_operand" "=a,!*r") + (high:SI (match_operand 1 "" "")))] + "! TARGET_KERNEL && symbolic_operand(operands[1], Pmode) + && ! function_label_operand (operands[1]) + && ! read_only_operand (operands[1])" + "@ + addil L'%G1,%%r27 + ldil L'%G1,%0\;add %0,%%r27,%0" + [(set_attr "type" "binary,binary") + (set_attr "length" "1,2")]) +;; For function addresses when TARGET_SHARED_LIBS (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (high:SI (match_operand:SI 1 "function_label_operand" "")))] @@ -934,6 +931,8 @@ [(set_attr "type" "move") (set_attr "length" "1")]) +;; The following two patterns should be for using ldil to load constants +;; (which include addresses of read_only_operands) (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (high:SI (match_operand 1 "" "")))] @@ -950,6 +949,7 @@ [(set_attr "type" "move") (set_attr "length" "1")]) +;; lo_sum of a function address when TARGET_SHARED_LIBS (define_insn "" [(set (match_operand:SI 0 "register_operand" "=r") (lo_sum:SI (match_operand:SI 1 "register_operand" "r") |