From 9f309ba3e7ae686cd3e193722eb43e28e9d83018 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sun, 10 Jan 1993 15:59:33 -0700 Subject: [PATCH] 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 --- gcc/config/pa/pa.md | 52 ++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 5dd3c8160ee..fd37ec060d9 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") -- 2.30.2