m32c.c (m32c_valid_pointer_mode): New.
authorDJ Delorie <dj@redhat.com>
Thu, 1 Sep 2005 01:52:26 +0000 (21:52 -0400)
committerDJ Delorie <dj@gcc.gnu.org>
Thu, 1 Sep 2005 01:52:26 +0000 (21:52 -0400)
* config/m32c/m32c.c (m32c_valid_pointer_mode): New.
(m32c_asm_integer): Add support for 32 bit pointers.

From-SVN: r103715

gcc/ChangeLog
gcc/config/m32c/m32c.c

index 7cdd2926f6ee4263d4115e75a011709eb4b95a28..e08bd7ef9f6042ee0b1748283359b7ec6f85d39d 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-31  DJ Delorie  <dj@redhat.com>
+
+       * config/m32c/m32c.c (m32c_valid_pointer_mode): New.
+       (m32c_asm_integer): Add support for 32 bit pointers.
+
 2005-08-31  Richard Henderson  <rth@redhat.com>
 
        * emit-rtl.c (set_mem_attributes_minus_bitpos): Look through
index f44f627c1b90c7136f709588809a085726d1abdb..c89a6a6198a451f39dfea4a4fb81ac6f24d3a003 100644 (file)
@@ -1503,6 +1503,23 @@ m32c_function_arg_regno_p (int r)
   return (r == R1_REGNO || r == R2_REGNO);
 }
 
+/* HImode and PSImode are the two "native" modes as far as GCC is
+   concerned, but the chips also support a 32 bit mode which is used
+   for some opcodes in R8C/M16C and for reset vectors and such.  */
+#undef TARGET_VALID_POINTER_MODE
+#define TARGET_VALID_POINTER_MODE m32c_valid_pointer_mode
+bool
+m32c_valid_pointer_mode (enum machine_mode mode)
+{
+  fprintf(stderr, "valid_pointer_mode: %s\n", mode_name[mode]);
+  if (mode == HImode
+      || mode == PSImode
+      || mode == SImode
+      )
+    return 1;
+  return 0;
+}
+
 /* How Scalar Function Values Are Returned */
 
 /* Implements LIBCALL_VALUE.  Most values are returned in $r0, or some
@@ -1972,6 +1989,15 @@ m32c_asm_integer (rtx x, unsigned int size, int aligned_p)
       output_addr_const (asm_out_file, x);
       fputc ('\n', asm_out_file);
       return true;
+    case 4:
+      if (GET_CODE (x) == SYMBOL_REF)
+       {
+         fprintf (asm_out_file, "\t.long\t");
+         output_addr_const (asm_out_file, x);
+         fputc ('\n', asm_out_file);
+         return true;
+       }
+      break;
     }
   return default_assemble_integer (x, size, aligned_p);
 }