CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2014-03-18 Thread Joerg Sonnenberger
Module Name:src
Committed By:   joerg
Date:   Tue Mar 18 23:43:41 UTC 2014

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: vax.c vax.h vax.md

Log Message:
Add a register definition for the Processor Status Word on VAX.
Change the unwind definition to specify the CFA base via %fp before
using it in the various register locations.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/gnu/dist/gcc4/gcc/config/vax/vax.c
cvs rdiff -u -r1.5 -r1.6 src/gnu/dist/gcc4/gcc/config/vax/vax.h
cvs rdiff -u -r1.17 -r1.18 src/gnu/dist/gcc4/gcc/config/vax/vax.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.19 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.20
--- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.19	Mon Apr  8 12:10:53 2013
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.c	Tue Mar 18 23:43:40 2014
@@ -124,16 +124,22 @@ vax_output_function_prologue (FILE * fil
   if (dwarf2out_do_frame ())
 {
   const char *label = dwarf2out_cfi_label ();
-  int offset = 0;
+  int offset;
 
-  for (regno = FIRST_PSEUDO_REGISTER-1; regno = 0; --regno)
-	if (regs_ever_live[regno]  !call_used_regs[regno])
-	  dwarf2out_reg_save (label, regno, offset -= 4);
-
-  dwarf2out_reg_save (label, PC_REGNUM, offset -= 4);
-  dwarf2out_reg_save (label, FRAME_POINTER_REGNUM, offset -= 4);
-  dwarf2out_reg_save (label, ARG_POINTER_REGNUM, offset -= 4);
-  dwarf2out_def_cfa (label, FRAME_POINTER_REGNUM, -(offset - 4));
+  offset = -20;
+  for (regno = 0; regno  FIRST_PSEUDO_REGISTER; ++regno)
+if (regs_ever_live[regno]  !call_used_regs[regno])
+  offset -= 4;
+
+  dwarf2out_def_cfa (label, FRAME_POINTER_REGNUM, -offset);
+  dwarf2out_reg_save (label, PSW_REGNUM, offset += 4);
+  dwarf2out_reg_save (label, ARG_POINTER_REGNUM, offset += 4);
+  dwarf2out_reg_save (label, FRAME_POINTER_REGNUM, offset += 4);
+  dwarf2out_reg_save (label, PC_REGNUM, offset += 4);
+
+  for (regno = 0; regno  FIRST_PSEUDO_REGISTER; ++regno)
+if (regs_ever_live[regno]  !call_used_regs[regno])
+  dwarf2out_reg_save (label, regno, offset += 4);
 }
 
   size -= STARTING_FRAME_OFFSET;

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.h
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.5 src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.6
--- src/gnu/dist/gcc4/gcc/config/vax/vax.h:1.5	Mon Apr  2 16:44:17 2007
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.h	Tue Mar 18 23:43:40 2014
@@ -166,6 +166,9 @@ Boston, MA 02110-1301, USA.  */
 /* Specify the registers used for certain standard purposes.
The values of these macros are register numbers.  */
 
+/* VAX PSW for DWARF-2 */
+#define PSW_REGNUM VAX_PSW_REGNUM
+
 /* VAX pc is overloaded on a register.  */
 #define PC_REGNUM VAX_PC_REGNUM
 

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.18
--- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.17	Mon Apr  8 12:10:53 2013
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.md	Tue Mar 18 23:43:40 2014
@@ -40,6 +40,7 @@
(VAX_FP_REGNUM 13)	; Register 13 contains the frame pointer
(VAX_SP_REGNUM 14)	; Register 14 contains the stack pointer
(VAX_PC_REGNUM 15)	; Register 15 contains the program counter
+   (VAX_PSW_REGNUM 16)	; Program Status Word
   ]
 )
 



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2012-07-16 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Mon Jul 16 17:39:29 UTC 2012

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: builtins.md vax.md

Log Message:
Fix ffssi2 again.
Use a UNSPEC for the internal ffs.
use (match_dup 1) since Z will be set if it is 0 just as if tst:SI was done.
This can let gcc produce better code if you code appropriately.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/gnu/dist/gcc4/gcc/config/vax/builtins.md
cvs rdiff -u -r1.15 -r1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/builtins.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3 src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.4
--- src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3	Wed Jul 11 13:34:45 2012
+++ src/gnu/dist/gcc4/gcc/config/vax/builtins.md	Mon Jul 16 17:39:29 2012
@@ -25,7 +25,7 @@
   
 {
   rtx label = gen_label_rtx ();
-  emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[1]));
+  emit_insn (gen_unspec_ffssi2 (operands[0], operands[1]));
   emit_jump_insn (gen_bne (label));
   emit_insn (gen_negsi2 (operands[0], const1_rtx));
   emit_label (label);
@@ -33,9 +33,15 @@
   DONE;
 })
 
-(define_insn ffssi2_internal
+;;
+;; Set cc0 to match argument 1 since if it is 0, Z will be set just as
+;; if a tst:SI was performed.  If we did a match_dup 0, that wouldn't be
+;; right since 0 will be set to (0+32) [the position (relative to the base)
+;; of a bit one position to the left of the specified field].
+;;
+(define_insn unspec_ffssi2
   [(set (match_operand:SI 0 nonimmediate_operand =g)
-(ffs:SI (match_operand:SI 1 general_operand nrQ)))
-   (set (cc0) (ffs:SI (match_operand:SI 2 general_operand 1)))]
+(unspec:SI [(match_operand:SI 1 general_operand nrQ)] VUNSPEC_FFS))
+   (set (cc0) (match_dup 1))]
   
   ffs $0,$32,%1,%0)

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.16
--- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15	Sun Feb  5 17:34:34 2012
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.md	Mon Jul 16 17:39:29 2012
@@ -34,6 +34,8 @@
   [(VUNSPEC_BLOCKAGE 0)	; `blockage' insn to prevent scheduling across an
 			; insn in the code.
(VUNSPEC_SYNC_ISTREAM 1) ; sequence of insns to sync the I-stream
+   (VUNSPEC_FFS 2)  ; internal FFS for the expand
+   (VUNSPEC_FFC 3)  ; internal FFC for the expand
(VAX_AP_REGNUM 12)	; Register 12 contains the argument pointer
(VAX_FP_REGNUM 13)	; Register 13 contains the frame pointer
(VAX_SP_REGNUM 14)	; Register 14 contains the stack pointer



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2012-07-11 Thread Anders Magnusson
Module Name:src
Committed By:   ragge
Date:   Wed Jul 11 13:34:45 UTC 2012

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: builtins.md

Log Message:
Bugfix builtin ffs, fixes PR port-vax/46677, fix from Paul Koning.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/gnu/dist/gcc4/gcc/config/vax/builtins.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/builtins.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.2 src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.3
--- src/gnu/dist/gcc4/gcc/config/vax/builtins.md:1.2	Mon Apr  2 16:45:39 2007
+++ src/gnu/dist/gcc4/gcc/config/vax/builtins.md	Wed Jul 11 13:34:45 2012
@@ -25,7 +25,7 @@
   
 {
   rtx label = gen_label_rtx ();
-  emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[0]));
+  emit_insn (gen_ffssi2_internal (operands[0], operands[1], operands[1]));
   emit_jump_insn (gen_bne (label));
   emit_insn (gen_negsi2 (operands[0], const1_rtx));
   emit_label (label);
@@ -36,6 +36,6 @@
 (define_insn ffssi2_internal
   [(set (match_operand:SI 0 nonimmediate_operand =g)
 (ffs:SI (match_operand:SI 1 general_operand nrQ)))
-   (set (cc0) (match_operand:SI 2 nonimmediate_operand 0))]
+   (set (cc0) (ffs:SI (match_operand:SI 2 general_operand 1)))]
   
   ffs $0,$32,%1,%0)



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2012-02-05 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Sun Feb  5 17:34:34 UTC 2012

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: vax.c vax.md

Log Message:
Use REG_P, CONST_INT_P, and gcc_unreachable.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/gnu/dist/gcc4/gcc/config/vax/vax.c
cvs rdiff -u -r1.14 -r1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.18
--- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17	Thu Feb  2 18:33:03 2012
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.c	Sun Feb  5 17:34:34 2012
@@ -1097,14 +1097,14 @@ vax_output_int_move (rtx insn ATTRIBUTE_
 	  || GET_CODE (XEXP (operands[0], 0)) == PRE_DEC
 	  || GET_CODE (XEXP (operands[0], 0)) == POST_INC
 	  || !illegal_addsub_di_memory_operand (operands[0], DImode))
-	   ((GET_CODE (operands[1]) == CONST_INT
+	   ((CONST_INT_P (operands[1])
 	(unsigned HOST_WIDE_INT) INTVAL (operands[1]) = 64)
 	  || GET_CODE (operands[1]) == CONST_DOUBLE))
 	{
 	  hi[0] = operands[0];
 	  hi[1] = operands[1];
 
-	  split_quadword_operands(insn, SET, hi, lo, 2);
+	  split_quadword_operands (insn, SET, hi, lo, 2);
 
 	  pattern_lo = vax_output_int_move (NULL, lo, SImode);
 	  pattern_hi = vax_output_int_move (NULL, hi, SImode);
@@ -1549,12 +1549,12 @@ mkrtx(enum rtx_code code, enum machine_m
   rtx b = XEXP (base, 1);
   if (GET_CODE (b) == CONST)
 	b = XEXP (b, 0);
-  if (GET_CODE (b) == CONST_INT)
+  if (CONST_INT_P (b))
 	{
   off += INTVAL (b);
   base = a;
 	}
-  else if (GET_CODE (a) == REG  GET_CODE (b) == SYMBOL_REF)
+  else if (REG_P (a)  GET_CODE (b) == SYMBOL_REF)
 	{
 	  if (off != 0)
 	{
@@ -1562,7 +1562,7 @@ mkrtx(enum rtx_code code, enum machine_m
 	  off = 0;
 	}
 	}
-  else if (GET_CODE (a) == REG  GET_CODE (b) == PLUS)
+  else if (REG_P (a)  GET_CODE (b) == PLUS)
 	{
   off += INTVAL (XEXP (b, 1));
 	  base = gen_rtx_PLUS (Pmode, a, plus_constant(XEXP (b, 0), off));
@@ -1570,8 +1570,8 @@ mkrtx(enum rtx_code code, enum machine_m
 	}
   else
 {
-	  print_rtl(stderr, base); fprintf(stderr, \n);
-	  gcc_assert(0);
+	  debug_rtx(base);
+	  gcc_unreachable ();
 	}
 }
   if (code == POST_INC)

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.15
--- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14	Tue Jul 27 16:30:38 2010
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.md	Sun Feb  5 17:34:34 2012
@@ -191,7 +191,7 @@
   
   *
 {
-  if (GET_CODE (operands[1]) == CONST_INT)
+  if (CONST_INT_P (operands[1]))
 {
   int i = INTVAL (operands[1]);
   if (i == 0)
@@ -212,7 +212,7 @@
   
   *
 {
-  if (GET_CODE (operands[1]) == CONST_INT)
+  if (CONST_INT_P (operands[1]))
 {
   int i = INTVAL (operands[1]);
   if (i == 0)
@@ -565,14 +565,14 @@
   rtx op1 = operands[1];
 
   /* If there is a constant argument, complement that one.  */
-  if (GET_CODE (operands[2]) == CONST_INT  GET_CODE (op1) != CONST_INT)
+  if (CONST_INT_P (operands[2])  ! CONST_INT_P (op1))
 {
   operands[1] = operands[2];
   operands[2] = op1;
   op1 = operands[1];
 }
 
-  if (GET_CODE (op1) == CONST_INT)
+  if (CONST_INT_P (op1))
 operands[1] = GEN_INT (~INTVAL (op1));
   else
 operands[1] = expand_unop (MODEmode, one_cmpl_optab, op1, 0, 1);
@@ -658,7 +658,7 @@
   
   
 {
-  if (GET_CODE (operands[2]) != CONST_INT)
+  if (! CONST_INT_P (operands[2]))
 operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2]));
 })
 
@@ -685,8 +685,7 @@
 {
   if (operands[2] == const1_rtx  rtx_equal_p (operands[0], operands[1]))
 return \addl2 %0,%0\;
-  if (GET_CODE (operands[1]) == REG
-   GET_CODE (operands[2]) == CONST_INT)
+  if (REG_P (operands[1])  CONST_INT_P (operands[2]))
 {
   int i = INTVAL (operands[2]);
   if (i == 1)
@@ -760,7 +759,7 @@
   
   
 {
-  if (GET_CODE (operands[2]) != CONST_INT)
+  if (! CONST_INT_P (operands[2]))
 operands[2] = gen_rtx_NEG (QImode, negate_rtx (QImode, operands[2]));
 })
 
@@ -806,7 +805,7 @@
 	(match_operand:SI 3 general_operand g))]
(INTVAL (operands[1]) == 8 || INTVAL (operands[1]) == 16)
 INTVAL (operands[2]) % INTVAL (operands[1]) == 0
-(GET_CODE (operands[0]) == REG
+(REG_P (operands[0])
|| ! mode_dependent_address_p (XEXP (operands[0], 0)))
   *
 {
@@ -834,7 +833,7 @@
 			 (match_operand:SI 3 const_int_operand n)))]
   (INTVAL (operands[2]) == 8 || INTVAL (operands[2]) == 16)
 INTVAL (operands[3]) % INTVAL (operands[2]) == 0
-(GET_CODE (operands[1]) == REG
+(REG_P (operands[1])
|| ! mode_dependent_address_p (XEXP (operands[1], 0)))
   *
 {
@@ -861,7 

CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2012-02-02 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Thu Feb  2 13:32:18 UTC 2012

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: vax.c

Log Message:
Fix a bug in movmemsi in which couldn't handle sym(reg) expressions properly.


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.15 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16
--- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.15	Fri Apr 20 16:30:32 2007
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.c	Thu Feb  2 13:32:17 2012
@@ -1545,8 +1545,29 @@ mkrtx(enum rtx_code code, enum machine_m
 
   if (GET_CODE (base) == PLUS)
 {
-  off += INTVAL (XEXP (base, 1));
-  base = XEXP (base, 0);
+  rtx a = XEXP (base, 0);
+  rtx b = XEXP (base, 1);
+  if (GET_CODE (b) == CONST_INT)
+	{
+  off += INTVAL (b);
+  base = a;
+	}
+  else if (GET_CODE (a) == REG  GET_CODE (b) == SYMBOL_REF)
+	{
+	  if (off != 0)
+	{
+	  base = gen_rtx_PLUS (Pmode, a, plus_constant(b, off));
+	  off = 0;
+	}
+	}
+  else if (GET_CODE (a) == REG  GET_CODE (b) == PLUS)
+	{
+  off += INTVAL (XEXP (b, 1));
+	  base = gen_rtx_PLUS (Pmode, a, plus_constant(XEXP (b, 0), off));
+	  off = 0;
+	}
+  else
+	gcc_assert(0);
 }
   if (code == POST_INC)
 tmp = gen_rtx_POST_INC (SImode, base);



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2012-02-02 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Thu Feb  2 18:33:04 UTC 2012

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: vax.c

Log Message:
Handle another case the new gcc_assert(0) caught.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/gnu/dist/gcc4/gcc/config/vax/vax.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.c
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16 src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.17
--- src/gnu/dist/gcc4/gcc/config/vax/vax.c:1.16	Thu Feb  2 13:32:17 2012
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.c	Thu Feb  2 18:33:03 2012
@@ -1547,6 +1547,8 @@ mkrtx(enum rtx_code code, enum machine_m
 {
   rtx a = XEXP (base, 0);
   rtx b = XEXP (base, 1);
+  if (GET_CODE (b) == CONST)
+	b = XEXP (b, 0);
   if (GET_CODE (b) == CONST_INT)
 	{
   off += INTVAL (b);
@@ -1567,7 +1569,10 @@ mkrtx(enum rtx_code code, enum machine_m
 	  off = 0;
 	}
   else
-	gcc_assert(0);
+{
+	  print_rtl(stderr, base); fprintf(stderr, \n);
+	  gcc_assert(0);
+	}
 }
   if (code == POST_INC)
 tmp = gen_rtx_POST_INC (SImode, base);



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2010-12-21 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Wed Dec 22 02:58:35 UTC 2010

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: elf.h

Log Message:
Emit DWARF relocation in its expected form


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/gnu/dist/gcc4/gcc/config/vax/elf.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/elf.h
diff -u src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.3 src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.4
--- src/gnu/dist/gcc4/gcc/config/vax/elf.h:1.3	Sat Mar 31 05:55:11 2007
+++ src/gnu/dist/gcc4/gcc/config/vax/elf.h	Wed Dec 22 02:58:35 2010
@@ -107,5 +107,5 @@
 fputs (integer_asm_op (SIZE, FALSE), FILE);		\
 fprintf (FILE, %%pcrel%d(, SIZE * 8);		\
 assemble_name (FILE, LABEL);			\
-fputc (')', FILE);	\
+fprintf (FILE, %+d), SIZE);			\
   } while (0)



CVS commit: src/gnu/dist/gcc4/gcc/config/vax

2010-07-27 Thread Matt Thomas
Module Name:src
Committed By:   matt
Date:   Tue Jul 27 16:30:38 UTC 2010

Modified Files:
src/gnu/dist/gcc4/gcc/config/vax: vax.md

Log Message:
Don't use/rely on a constraint.  Move the constraint predicate
to the pattern's condition.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/gnu/dist/gcc4/gcc/config/vax/vax.md

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/gnu/dist/gcc4/gcc/config/vax/vax.md
diff -u src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.13 src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.14
--- src/gnu/dist/gcc4/gcc/config/vax/vax.md:1.13	Tue Jul 27 01:13:41 2010
+++ src/gnu/dist/gcc4/gcc/config/vax/vax.md	Tue Jul 27 16:30:38 2010
@@ -1129,16 +1129,17 @@
 (define_insn 
   [(set (pc)
 	(if_then_else
-	 (ne (zero_extract:SI (match_operand:QI 0 memory_operand Q)
+	 (ne (zero_extract:SI (match_operand:QI 0 memory_operand g)
 			  (const_int 1)
 			  (const_int 0))
 	 (const_int 0))
 	 (label_ref (match_operand 1  ))
 	 (pc)))]
-  GET_CODE (XEXP (operands[0], 0)) != PLUS
-   || !REG_P (XEXP (XEXP (operands[0], 0), 0))
-   || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1))
-   || (INTVAL (XEXP (XEXP (operands[0], 0), 1))  3) == 0
+  ! mode_dependent_address_p (XEXP (operands[0], 0))
+(GET_CODE (XEXP (operands[0], 0)) != PLUS
+   || !REG_P (XEXP (XEXP (operands[0], 0), 0))
+   || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1))
+   || (INTVAL (XEXP (XEXP (operands[0], 0), 1))  3) == 0)
   jlbs %0,%l1)
 
 (define_insn 
@@ -1156,16 +1157,17 @@
 (define_insn 
   [(set (pc)
 	(if_then_else
-	 (eq (zero_extract:SI (match_operand:QI 0 memory_operand Q)
+	 (eq (zero_extract:SI (match_operand:QI 0 memory_operand g)
 			  (const_int 1)
 			  (const_int 0))
 	 (const_int 0))
 	 (label_ref (match_operand 1  ))
 	 (pc)))]
-  GET_CODE (XEXP (operands[0], 0)) != PLUS
-   || !REG_P (XEXP (XEXP (operands[0], 0), 0))
-   || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1))
-   || (INTVAL (XEXP (XEXP (operands[0], 0), 1))  3) == 0
+  ! mode_dependent_address_p (XEXP (operands[0], 0))
+(GET_CODE (XEXP (operands[0], 0)) != PLUS
+   || !REG_P (XEXP (XEXP (operands[0], 0), 0))
+   || !CONST_INT_P (XEXP (XEXP (operands[0], 0), 1))
+   || (INTVAL (XEXP (XEXP (operands[0], 0), 1))  3) == 0)
   jlbc %0,%l1)
 
 (define_insn