This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: temporary fix for sparc v9 bootstrap failure
On Mon, Dec 17, 2001 at 10:24:06AM -0800, Dan Nicolaescu wrote:
> Right, sorry about that. Could you please check in the fix?
>
> * config/sparc/sparc.md (movdi_zero): Fix constraint.
The following should fix things properly.
r~
* config/sparc/sparc.md (movdi_zero): Remove.
(movdi_insn_sp32_v9): New.
Index: sparc.md
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/sparc/sparc.md,v
retrieving revision 1.138
diff -c -p -d -r1.138 sparc.md
*** sparc.md 2001/12/16 02:26:58 1.138
--- sparc.md 2001/12/17 18:38:17
***************
*** 2444,2456 ****
;
}")
- (define_insn "*movdi_zero"
- [(set (match_operand:DI 0 "memory_operand" "")
- (const_int 0))]
- "TARGET_V9"
- "stx\\t%%g0, %0"
- [(set_attr "type" "store")])
-
;; Be careful, fmovd does not exist when !arch64.
;; We match MEM moves directly when we have correct even
;; numbered registers, but fall into splits otherwise.
--- 2444,2449 ----
***************
*** 2462,2473 ****
;; (const_int -5016)))
;; (reg:DI 2 %g2))
;;
(define_insn "*movdi_insn_sp32"
! [(set (match_operand:DI 0 "nonimmediate_operand" "=T,U,o,r,r,r,?T,?f,?f,?o,?f")
! (match_operand:DI 1 "input_operand" "U,T,r,o,i,r,f,T,o,f,f"))]
! "! TARGET_ARCH64 &&
! (register_operand (operands[0], DImode)
! || register_operand (operands[1], DImode))"
"@
std\\t%1, %0
ldd\\t%1, %0
--- 2455,2492 ----
;; (const_int -5016)))
;; (reg:DI 2 %g2))
;;
+
+ (define_insn "*movdi_insn_sp32_v9"
+ [(set (match_operand:DI 0 "nonimmediate_operand"
+ "=m,T,U,o,r,r,r,?T,?f,?f,?o,?f")
+ (match_operand:DI 1 "input_operand"
+ " J,U,T,r,o,i,r, f, T, o, f, f"))]
+ "! TARGET_ARCH64 && TARGET_V9
+ && (GET_CODE (operands[0]) != MEM || GET_CODE (operands[1]) != MEM)"
+ "@
+ stx\\t%%g0, %0
+ std\\t%1, %0
+ ldd\\t%1, %0
+ #
+ #
+ #
+ #
+ std\\t%1, %0
+ ldd\\t%1, %0
+ #
+ #
+ #"
+ [(set_attr "type" "store,store,load,*,*,*,*,fpstore,fpload,*,*,*")
+ (set_attr "length" "*,*,*,2,2,2,2,*,*,2,2,2")])
+
(define_insn "*movdi_insn_sp32"
! [(set (match_operand:DI 0 "nonimmediate_operand"
! "=T,U,o,r,r,r,?T,?f,?f,?o,?f")
! (match_operand:DI 1 "input_operand"
! " U,T,r,o,i,r, f, T, o, f, f"))]
! "! TARGET_ARCH64
! && (register_operand (operands[0], DImode)
! || register_operand (operands[1], DImode))"
"@
std\\t%1, %0
ldd\\t%1, %0