aboutsummaryrefslogtreecommitdiff
path: root/gcc/final.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-06-06 14:57:31 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-06-06 12:57:31 +0000
commitef6257cdab743c387b512bfaec9d8fa7db79d6c8 (patch)
tree670901c9a6689cc4d8ee69e5505e146e4e0b394c /gcc/final.c
parent3b8fd08f822157da91aa63c77f44e7bd0960c7d7 (diff)
downloadgcc-ef6257cdab743c387b512bfaec9d8fa7db79d6c8.zip
gcc-ef6257cdab743c387b512bfaec9d8fa7db79d6c8.tar.gz
gcc-ef6257cdab743c387b512bfaec9d8fa7db79d6c8.tar.bz2
i386.md (floatdi?f): Avoid usinf of SSE instructions if TARGET_64BIT is false.
* i386.md (floatdi?f): Avoid usinf of SSE instructions if TARGET_64BIT is false. (floatdi?f_i386_only): New insn. (floatdi?f_i386): Disable for !TARGET_64BIT. * (min?f, max?f splitters): Handle case where operands are cross-matched. * i386.h (HI_REGISTER_NAMES): Remove redundant definition (MMX_REGISTER_NAMES): Kill. (PRINT_OPERAND): Fix comment. (PRINT_REG): Likewise. * i386.c (print_reg): Kill support for 'm' CODE; simplify. (print_operand): Update comment; kill 'm'. * i386.c (x86_branch_hints): New global variable (print_operand): Support outputting of branch prediction hints. * i386.md (conditional jump patterns): Add branch prediction hints to the template. * i386.h (x86_branch_hints): Declare (TARGET_BRANCH_PREDICTION_HINTS): New macro. (PRINT_OPERAND_FUNCT_VALID_P): New. * final.c (final_forward_branch_p): New function. From-SVN: r42945
Diffstat (limited to 'gcc/final.c')
-rw-r--r--gcc/final.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gcc/final.c b/gcc/final.c
index 64a4241..7b36b1b 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -4086,6 +4086,25 @@ leaf_function_p ()
return 1;
}
+/* Return 1 if branch is an forward branch.
+ Uses insn_shuid array, so it works only in the final pass. May be used by
+ output templates to customary add branch prediction hints.
+ */
+int
+final_forward_branch_p (insn)
+ rtx insn;
+{
+ int insn_id, label_id;
+ if (!uid_shuid)
+ abort ();
+ insn_id = INSN_SHUID (insn);
+ label_id = INSN_SHUID (JUMP_LABEL (insn));
+ /* We've hit some insns that does not have id information available. */
+ if (!insn_id || !label_id)
+ abort ();
+ return insn_id < label_id;
+}
+
/* On some machines, a function with no call insns
can run faster if it doesn't create its own register window.
When output, the leaf function should use only the "output"