POINTER_SIZE is the proper macro to retrieve pointer size in bits for the
target ABI, but new code incorrectly used BITS_PER_WORD, breaking 32-bit
code generation.
* config/nvptx/nvptx.c (nvptx_init_unisimt_predicate): Use
POINTER_SIZE instead of BITS_PER_WORD.
(nvptx_declare_function_name): Ditto.
(nvptx_output_return): Ditto.
(nvptx_file_end): Ditto.
---
gcc/ChangeLog.gomp-nvptx | 8 ++++++++
gcc/config/nvptx/nvptx.c | 8 ++++----
2 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
index e69e0be..93bf781 100644
--- a/gcc/config/nvptx/nvptx.c
+++ b/gcc/config/nvptx/nvptx.c
@@ -946,7 +946,7 @@ nvptx_init_axis_predicate (FILE *file, int regno, const
char *name)
static void
nvptx_init_unisimt_predicate (FILE *file)
{
- int bits = BITS_PER_WORD;
+ int bits = POINTER_SIZE;
int master = REGNO (cfun->machine->unisimt_master);
int pred = REGNO (cfun->machine->unisimt_predicate);
fprintf (file, "\t{\n");
@@ -1108,7 +1108,7 @@ nvptx_declare_function_name (FILE *file, const char
*name, const_tree decl)
/* Maintain 64-bit stack alignment. */
int keep_align = BIGGEST_ALIGNMENT / BITS_PER_UNIT;
sz = ROUND_UP (sz, keep_align);
- int bits = BITS_PER_WORD;
+ int bits = POINTER_SIZE;
fprintf (file, "\t.reg.u%d %%frame;\n", bits);
fprintf (file, "\t.reg.u32 %%fstmp0;\n");
fprintf (file, "\t.reg.u%d %%fstmp1;\n", bits);
@@ -1177,7 +1177,7 @@ nvptx_output_return (void)
if (cfun->machine->using_softstack)
fprintf (asm_out_file, "\tst.shared.u%d [%%fstmp2], %%fstmp1;\n",
- BITS_PER_WORD);
+ POINTER_SIZE);
if (mode != VOIDmode)
fprintf (asm_out_file, "\tst.param%s\t[%s_out], %s;\n",
@@ -4191,7 +4191,7 @@ nvptx_file_end (void)
{
write_var_marker (asm_out_file, false, true, "__nvptx_stacks");
fprintf (asm_out_file, ".extern .shared .u%d __nvptx_stacks[32];\n",
- BITS_PER_WORD);
+ POINTER_SIZE);
}
if (need_unisimt_decl)
{