diff options
author | crux <crux@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-23 11:34:49 +0000 |
---|---|---|
committer | crux <crux@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-09-23 11:34:49 +0000 |
commit | 10ee3e0f2dc692b695378566268d08858c117653 (patch) | |
tree | f3957a52a53f08158be8aba1c10f20bd084118d7 /gcc/expr.h | |
parent | 0acb381656d18ccbde3e0685af189bdceaab0638 (diff) | |
download | gcc-10ee3e0f2dc692b695378566268d08858c117653.tar.gz |
Use cbranch patterns when available
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@29613 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/gcc/expr.h b/gcc/expr.h index 53cb9a9bd67..52f743b2f3c 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -377,6 +377,11 @@ enum optab_index /* String length */ OTI_strlen, + /* Combined compare & jump/store flags/move operations. */ + OTI_cbranch, + OTI_cmov, + OTI_cstore, + OTI_MAX }; @@ -427,6 +432,10 @@ extern optab optab_table[OTI_MAX]; #define strlen_optab (optab_table[OTI_strlen]) +#define cbranch_optab (optab_table[OTI_cbranch]) +#define cmov_optab (optab_table[OTI_cmov]) +#define cstore_optab (optab_table[OTI_cstore]) + /* Tables of patterns for extending one integer mode to another. */ extern enum insn_code extendtab[MAX_MACHINE_MODE][MAX_MACHINE_MODE][2]; @@ -778,9 +787,24 @@ extern void emit_cmp_insn PROTO((rtx, rtx, enum rtx_code, rtx, extern void emit_cmp_and_jump_insns PROTO((rtx, rtx, enum rtx_code, rtx, enum machine_mode, int, int, rtx)); +/* The various uses that a comparison can have; used by can_compare_p: + jumps, conditional moves, store flag operations. */ +enum can_compare_purpose +{ + ccp_jump, + ccp_cmov, + ccp_store_flag +}; /* Nonzero if a compare of mode MODE can be done straightforwardly (without splitting it into pieces). */ -extern int can_compare_p PROTO((enum machine_mode)); +extern int can_compare_p PROTO((enum machine_mode, enum can_compare_purpose)); + +extern void prepare_cmp_insn PROTO((rtx *, rtx *, enum rtx_code *, rtx, + enum machine_mode *, int *, int, + enum can_compare_purpose)); + +extern rtx prepare_operand PROTO((int, rtx, int, enum machine_mode, + enum machine_mode, int)); /* Generate code to indirectly jump to a location given in the rtx LOC. */ extern void emit_indirect_jump PROTO((rtx)); |