This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

ia64 predcation thinko


I introduced a bug on 07-17 in which we not emit the
predicate for a movdi instruction.  Fixed thus.


r~

        * config/ia64/ia64.c (ia64_print_operand): Handle "%,".
        * config/ia64/ia64.h (PRINT_OPERAND_PUNCT_VALID_P): Likewise.
        * config/ia64/ia64.md (movdi_internal): Use it.

Index: ia64.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/ia64/ia64.c,v
retrieving revision 1.33
diff -c -p -d -r1.33 ia64.c
*** ia64.c	2000/07/17 22:19:58	1.33
--- ia64.c	2000/07/25 00:46:12
*************** ia64_print_operand (file, x, code)
*** 2067,2072 ****
--- 2067,2085 ----
  	return;
        }
  
+     case ',':
+       x = current_insn_predicate;
+       if (x)
+ 	{
+ 	  unsigned int regno = REGNO (XEXP (x, 0));
+ 	  if (GET_CODE (x) == EQ)
+ 	    regno += 1;
+ 	  if (code == 'j')
+ 	    regno ^= 1;
+           fprintf (file, "(%s) ", reg_names [regno]);
+ 	}
+       return;
+ 
      default:
        output_operand_lossage ("ia64_print_operand: unknown code");
        return;
Index: ia64.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/ia64/ia64.h,v
retrieving revision 1.28
diff -c -p -d -r1.28 ia64.h
*** ia64.h	2000/07/20 21:27:15	1.28
--- ia64.h	2000/07/25 00:46:12
*************** do {									\
*** 2475,2481 ****
  
  /* ??? Keep this around for now, as we might need it later.  */
  
! #define PRINT_OPERAND_PUNCT_VALID_P(CODE)   ((CODE) == '+')
  
  /* A C compound statement to output to stdio stream STREAM the assembler syntax
     for an instruction operand that is a memory reference whose address is X.  X
--- 2475,2482 ----
  
  /* ??? Keep this around for now, as we might need it later.  */
  
! #define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
!   ((CODE) == '+' || (CODE) == ',')
  
  /* A C compound statement to output to stdio stream STREAM the assembler syntax
     for an instruction operand that is a memory reference whose address is X.  X
Index: ia64.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/ia64/ia64.md,v
retrieving revision 1.24
diff -c -p -d -r1.24 ia64.md
*** ia64.md	2000/07/17 22:19:58	1.24
--- ia64.md	2000/07/25 00:46:12
***************
*** 264,281 ****
    "*
  {
    static const char * const alt[] = {
!     \"mov %0 = %r1\",
!     \"addl %0 = %1, r0\",
!     \"movl %0 = %1\",
!     \"ld8%O1 %0 = %1%P1\",
!     \"st8%Q0 %0 = %r1%P0\",
!     \"getf.sig %0 = %1\",
!     \"setf.sig %0 = %r1\",
!     \"mov %0 = %1\",
!     \"ldf8 %0 = %1%P1\",
!     \"stf8 %0 = %1%P0\",
!     \"mov %0 = %1\",
!     \"mov %0 = %r1\"
    };
  
    /* We use 'i' for alternative 2 despite possible PIC problems.
--- 264,281 ----
    "*
  {
    static const char * const alt[] = {
!     \"%,mov %0 = %r1\",
!     \"%,addl %0 = %1, r0\",
!     \"%,movl %0 = %1\",
!     \"%,ld8%O1 %0 = %1%P1\",
!     \"%,st8%Q0 %0 = %r1%P0\",
!     \"%,getf.sig %0 = %1\",
!     \"%,setf.sig %0 = %r1\",
!     \"%,mov %0 = %1\",
!     \"%,ldf8 %0 = %1%P1\",
!     \"%,stf8 %0 = %1%P0\",
!     \"%,mov %0 = %1\",
!     \"%,mov %0 = %r1\"
    };
  
    /* We use 'i' for alternative 2 despite possible PIC problems.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]