/* Definitions for code generation pass of GNU compiler.
- Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
OTI_mov,
/* Move, preserving high part of register. */
OTI_movstrict,
+ /* Move, with a misaligned memory. */
+ OTI_movmisalign,
/* Unary operations */
/* Negation */
OTI_exp2,
/* Exponential - 1*/
OTI_expm1,
+ /* Load exponent of a floating point number */
+ OTI_ldexp,
/* Radix-independent exponent */
OTI_logb,
OTI_ilogb,
OTI_round,
OTI_nearbyint,
OTI_rint,
+ OTI_lrint,
/* Tangent */
OTI_tan,
/* Inverse tangent */
OTI_atan,
+ /* Copy sign */
+ OTI_copysign,
/* Compare insn; two operands. */
OTI_cmp,
OTI_vec_extract,
/* Initialize vector operand. */
OTI_vec_init,
- /* Extract specified elements from vectors, for vector store. */
- OTI_vec_realign_store,
/* Extract specified elements from vectors, for vector load. */
OTI_vec_realign_load,
+ /* Perform a raise to the power of integer. */
+ OTI_powi,
+
OTI_MAX
};
#define mov_optab (optab_table[OTI_mov])
#define movstrict_optab (optab_table[OTI_movstrict])
+#define movmisalign_optab (optab_table[OTI_movmisalign])
#define neg_optab (optab_table[OTI_neg])
#define negv_optab (optab_table[OTI_negv])
#define exp10_optab (optab_table[OTI_exp10])
#define exp2_optab (optab_table[OTI_exp2])
#define expm1_optab (optab_table[OTI_expm1])
+#define ldexp_optab (optab_table[OTI_ldexp])
#define logb_optab (optab_table[OTI_logb])
#define ilogb_optab (optab_table[OTI_ilogb])
#define log_optab (optab_table[OTI_log])
#define round_optab (optab_table[OTI_round])
#define nearbyint_optab (optab_table[OTI_nearbyint])
#define rint_optab (optab_table[OTI_rint])
+#define lrint_optab (optab_table[OTI_lrint])
#define tan_optab (optab_table[OTI_tan])
#define atan_optab (optab_table[OTI_atan])
+#define copysign_optab (optab_table[OTI_copysign])
#define cmp_optab (optab_table[OTI_cmp])
#define ucmp_optab (optab_table[OTI_ucmp])
#define vec_set_optab (optab_table[OTI_vec_set])
#define vec_extract_optab (optab_table[OTI_vec_extract])
#define vec_init_optab (optab_table[OTI_vec_init])
-#define vec_realign_store_optab (optab_table[OTI_vec_realign_store])
#define vec_realign_load_optab (optab_table[OTI_vec_realign_load])
+#define powi_optab (optab_table[OTI_powi])
+
/* Conversion optabs have their own table and indexes. */
enum convert_optab_index
{
extern rtx expand_binop (enum machine_mode, optab, rtx, rtx, rtx, int,
enum optab_methods);
+extern bool force_expand_binop (enum machine_mode, optab, rtx, rtx, rtx, int,
+ enum optab_methods);
+
/* Expand a binary operation with both signed and unsigned forms. */
extern rtx sign_expand_binop (enum machine_mode, optab, optab, rtx, rtx,
rtx, int, enum optab_methods);
extern rtx expand_abs_nojump (enum machine_mode, rtx, rtx, int);
extern rtx expand_abs (enum machine_mode, rtx, rtx, int, int);
+/* Expand the copysign operation. */
+extern rtx expand_copysign (rtx, rtx, rtx);
+
/* Generate an instruction with a given INSN_CODE with an output and
an input. */
extern void emit_unop_insn (int, rtx, rtx, enum rtx_code);
extern int can_compare_p (enum rtx_code, enum machine_mode,
enum can_compare_purpose);
-extern rtx prepare_operand (int, rtx, int, enum machine_mode,
- enum machine_mode, int);
-
/* Return the INSN_CODE to use for an extend operation. */
extern enum insn_code can_extend_p (enum machine_mode, enum machine_mode, int);
extern rtx gen_extend_insn (rtx, rtx, enum machine_mode,
enum machine_mode, int);
-/* Initialize the tables that control conversion between fixed and
- floating values. */
-extern void init_fixtab (void);
-extern void init_floattab (void);
-
/* Call this to reset the function entry for one optab. */
extern void set_optab_libfunc (optab, enum machine_mode, const char *);
extern void set_conv_libfunc (convert_optab, enum machine_mode,