aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/sparc/sparc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/sparc/sparc.c')
-rw-r--r--gcc/config/sparc/sparc.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 9c5380d..2877844 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -343,7 +343,7 @@ sparc_override_options ()
sparc_init_modes ();
if ((profile_flag || profile_block_flag)
- && sparc_cmodel != CM_MEDLOW)
+ && sparc_cmodel != CM_32 && sparc_cmodel != CM_MEDLOW)
{
error ("profiling does not support code models other than medlow");
}
@@ -8077,32 +8077,33 @@ sparc_block_profiler(file, blockno)
int blockno;
{
char LPBX[32];
+ int bbreg = TARGET_ARCH64 ? 4 : 2;
if (profile_block_flag == 2)
{
ASM_GENERATE_INTERNAL_LABEL (LPBX, "LPBX", 0);
fprintf (file, "\tsethi\t%%hi(%s__bb),%%g1\n", user_label_prefix);
- fprintf (file, "\tsethi\t%%hi(%d),%%g2\n", blockno);
+ fprintf (file, "\tsethi\t%%hi(%d),%%g%d\n", blockno, bbreg);
fprintf (file, "\tor\t%%g1,%%lo(%s__bb),%%g1\n", user_label_prefix);
- fprintf (file, "\tor\t%%g2,%%lo(%d),%%g2\n", blockno);
+ fprintf (file, "\tor\t%%g%d,%%lo(%d),%%g%d\n", bbreg, blockno, bbreg);
- fputs ("\tst\t%g2,[%g1]\n", file);
+ fprintf (file, "\tst\t%%g%d,[%%g1]\n", bbreg);
fputs ("\tsethi\t%hi(", file);
assemble_name (file, LPBX);
- fputs ("),%g2\n", file);
+ fprintf (file, "),%%g%d\n", bbreg);
fputs ("\tor\t%o2,%lo(", file);
assemble_name (file, LPBX);
- fputs ("),%g2\n", file);
+ fprintf (file, "),%%g%d\n", bbreg);
- fputs ("\tst\t%g2,[%g1+4]\n", file);
- fputs ("\tmov\t%o7,%g2\n", file);
+ fprintf (file, "\tst\t%%g%d,[%%g1+4]\n", bbreg);
+ fprintf (file, "\tmov\t%%o7,%%g%d\n", bbreg);
fprintf (file, "\tcall\t%s__bb_trace_func\n\t nop\n", user_label_prefix);
- fputs ("\tmov\t%g2,%o7\n", file);
+ fprintf (file, "\tmov\t%%g%d,%%o7\n", bbreg);
}
else if (profile_block_flag != 0)
{
@@ -8114,13 +8115,19 @@ sparc_block_profiler(file, blockno)
fputs ("\tld\t[%g1+%lo(", file);
assemble_name (file, LPBX);
- fprintf (file, "+%d)],%%g2\n", blockno*4);
+ if (TARGET_ARCH64 && USE_AS_OFFSETABLE_LO10)
+ fprintf (file, ")+%d],%%g%d\n", blockno*4, bbreg);
+ else
+ fprintf (file, "+%d)],%%g%d\n", blockno*4, bbreg);
- fputs ("\tadd\t%g2,1,%g2\n", file);
+ fprintf (file, "\tadd\t%%g%d,1,%%g%d\n", bbreg, bbreg);
- fputs ("\tst\t%g2,[%g1+%lo(", file);
+ fprintf (file, "\tst\t%%g%d,[%%g1+%%lo(", bbreg);
assemble_name (file, LPBX);
- fprintf (file, "+%d)]\n", blockno*4);
+ if (TARGET_ARCH64 && USE_AS_OFFSETABLE_LO10)
+ fprintf (file, ")+%d]\n", blockno*4);
+ else
+ fprintf (file, "+%d)]\n", blockno*4);
}
}