aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m32c/m32c.c
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2005-08-31 21:52:26 -0400
committerDJ Delorie <dj@gcc.gnu.org>2005-08-31 21:52:26 -0400
commite9555b13766fcb8b1d1927a14aa05ead1ec285f0 (patch)
tree0c900b728b76f46d95b866ca310672ead5ae01e7 /gcc/config/m32c/m32c.c
parent8476af981ecf1cebb425bc3d710fb5c75107d306 (diff)
downloadgcc-e9555b13766fcb8b1d1927a14aa05ead1ec285f0.zip
gcc-e9555b13766fcb8b1d1927a14aa05ead1ec285f0.tar.gz
gcc-e9555b13766fcb8b1d1927a14aa05ead1ec285f0.tar.bz2
m32c.c (m32c_valid_pointer_mode): New.
* config/m32c/m32c.c (m32c_valid_pointer_mode): New. (m32c_asm_integer): Add support for 32 bit pointers. From-SVN: r103715
Diffstat (limited to 'gcc/config/m32c/m32c.c')
-rw-r--r--gcc/config/m32c/m32c.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index f44f627..c89a6a6 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -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);
}