aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@pierdol.cobaltmicro.com>1998-08-10 05:34:44 +0000
committerDavid S. Miller <davem@gcc.gnu.org>1998-08-09 22:34:44 -0700
commite0d801845122f3952530d8047f17cfe62bf2aafc (patch)
treeaa7b5df64d652b017925c5ebca8ec5b668713b88 /gcc/final.c
parentb08b85c4a0b590394116fdb5acc8d4e2068544b1 (diff)
downloadgcc-e0d801845122f3952530d8047f17cfe62bf2aafc.zip
gcc-e0d801845122f3952530d8047f17cfe62bf2aafc.tar.gz
gcc-e0d801845122f3952530d8047f17cfe62bf2aafc.tar.bz2
Sparc backend rewrite by rth and myself, please
peruse the lengthy ChangeLog for a blow by blow account. Co-Authored-By: Richard Henderson <rth@cygnus.com> From-SVN: r21652
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/gcc/final.c b/gcc/final.c
index 4b05fc7..e6a1d53 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -2326,6 +2326,11 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
if (GET_CODE (nextbody) == ADDR_VEC
|| GET_CODE (nextbody) == ADDR_DIFF_VEC)
{
+#if defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC)
+ /* In this case, the case vector is being moved by the
+ target, so don't output the label at all. Leave that
+ to the back end macros. */
+#else
if (! JUMP_TABLES_IN_TEXT_SECTION)
{
readonly_data_section ();
@@ -2344,6 +2349,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
#else
ASM_OUTPUT_INTERNAL_LABEL (file, "L", CODE_LABEL_NUMBER (insn));
#endif
+#endif
break;
}
}
@@ -2397,6 +2403,24 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
app_on = 0;
}
+#if defined(ASM_OUTPUT_ADDR_VEC) || defined(ASM_OUTPUT_ADDR_DIFF_VEC)
+ if (GET_CODE (body) == ADDR_VEC)
+ {
+#ifdef ASM_OUTPUT_ADDR_VEC
+ ASM_OUTPUT_ADDR_VEC (PREV_INSN (insn), body);
+#else
+ abort();
+#endif
+ }
+ else
+ {
+#ifdef ASM_OUTPUT_ADDR_DIFF_VEC
+ ASM_OUTPUT_ADDR_DIFF_VEC (PREV_INSN (insn), body);
+#else
+ abort();
+#endif
+ }
+#else
vlen = XVECLEN (body, GET_CODE (body) == ADDR_DIFF_VEC);
for (idx = 0; idx < vlen; idx++)
{
@@ -2427,6 +2451,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
CODE_LABEL_NUMBER (PREV_INSN (insn)),
insn);
#endif
+#endif
function_section (current_function_decl);