You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

486 lines
10 KiB
C

/* Generated automatically by the program `genopinit'
from the machine description file `md'. */
#ifndef GCC_INSN_OPINIT_H
#define GCC_INSN_OPINIT_H 1
enum optab_tag {
unknown_optab,
sext_optab,
trunc_optab,
zext_optab,
sfix_optab,
ufix_optab,
sfloat_optab,
ufloat_optab,
lrint_optab,
lround_optab,
lfloor_optab,
lceil_optab,
fract_optab,
fractuns_optab,
satfract_optab,
satfractuns_optab,
sfixtrunc_optab,
ufixtrunc_optab,
smul_widen_optab,
umul_widen_optab,
usmul_widen_optab,
smadd_widen_optab,
umadd_widen_optab,
ssmadd_widen_optab,
usmadd_widen_optab,
smsub_widen_optab,
umsub_widen_optab,
ssmsub_widen_optab,
usmsub_widen_optab,
vec_load_lanes_optab,
vec_store_lanes_optab,
vec_mask_load_lanes_optab,
vec_mask_store_lanes_optab,
vcond_optab,
vcondu_optab,
vcondeq_optab,
vcond_mask_optab,
vec_cmp_optab,
vec_cmpu_optab,
vec_cmpeq_optab,
maskload_optab,
maskstore_optab,
gather_load_optab,
mask_gather_load_optab,
scatter_store_optab,
mask_scatter_store_optab,
vec_extract_optab,
vec_init_optab,
while_ult_optab,
add_optab,
addv_optab,
ssadd_optab,
usadd_optab,
sub_optab,
subv_optab,
sssub_optab,
ussub_optab,
smul_optab,
smulv_optab,
ssmul_optab,
usmul_optab,
sdiv_optab,
sdivv_optab,
ssdiv_optab,
udiv_optab,
usdiv_optab,
sdivmod_optab,
udivmod_optab,
smod_optab,
umod_optab,
ftrunc_optab,
and_optab,
ior_optab,
xor_optab,
ashl_optab,
ssashl_optab,
usashl_optab,
ashr_optab,
lshr_optab,
rotl_optab,
rotr_optab,
vashl_optab,
vashr_optab,
vlshr_optab,
vrotl_optab,
vrotr_optab,
smin_optab,
smax_optab,
umin_optab,
umax_optab,
neg_optab,
negv_optab,
ssneg_optab,
usneg_optab,
abs_optab,
absv_optab,
one_cmpl_optab,
bswap_optab,
ffs_optab,
clz_optab,
ctz_optab,
clrsb_optab,
popcount_optab,
parity_optab,
cmp_optab,
ucmp_optab,
eq_optab,
ne_optab,
gt_optab,
ge_optab,
lt_optab,
le_optab,
unord_optab,
powi_optab,
sqrt_optab,
sync_old_add_optab,
sync_old_sub_optab,
sync_old_ior_optab,
sync_old_and_optab,
sync_old_xor_optab,
sync_old_nand_optab,
sync_new_add_optab,
sync_new_sub_optab,
sync_new_ior_optab,
sync_new_and_optab,
sync_new_xor_optab,
sync_new_nand_optab,
sync_compare_and_swap_optab,
sync_lock_test_and_set_optab,
mov_optab,
movstrict_optab,
movmisalign_optab,
storent_optab,
insv_optab,
extv_optab,
extzv_optab,
insvmisalign_optab,
extvmisalign_optab,
extzvmisalign_optab,
push_optab,
reload_in_optab,
reload_out_optab,
cbranch_optab,
addcc_optab,
negcc_optab,
notcc_optab,
movcc_optab,
cond_add_optab,
cond_sub_optab,
cond_smul_optab,
cond_sdiv_optab,
cond_smod_optab,
cond_udiv_optab,
cond_umod_optab,
cond_and_optab,
cond_ior_optab,
cond_xor_optab,
cond_ashl_optab,
cond_ashr_optab,
cond_lshr_optab,
cond_smin_optab,
cond_smax_optab,
cond_umin_optab,
cond_umax_optab,
cond_fmin_optab,
cond_fmax_optab,
cond_fma_optab,
cond_fms_optab,
cond_fnma_optab,
cond_fnms_optab,
cond_neg_optab,
cmov_optab,
cstore_optab,
ctrap_optab,
addv4_optab,
subv4_optab,
mulv4_optab,
uaddv4_optab,
usubv4_optab,
umulv4_optab,
negv3_optab,
addptr3_optab,
spaceship_optab,
smul_highpart_optab,
umul_highpart_optab,
cmpmem_optab,
cmpstr_optab,
cmpstrn_optab,
cpymem_optab,
movmem_optab,
setmem_optab,
strlen_optab,
rawmemchr_optab,
fma_optab,
fms_optab,
fnma_optab,
fnms_optab,
rint_optab,
round_optab,
roundeven_optab,
floor_optab,
ceil_optab,
btrunc_optab,
nearbyint_optab,
acos_optab,
acosh_optab,
asin_optab,
asinh_optab,
atan2_optab,
atan_optab,
atanh_optab,
copysign_optab,
xorsign_optab,
cadd90_optab,
cadd270_optab,
cmul_optab,
cmul_conj_optab,
cmla_optab,
cmla_conj_optab,
cmls_optab,
cmls_conj_optab,
cos_optab,
cosh_optab,
exp10_optab,
exp2_optab,
exp_optab,
expm1_optab,
fmod_optab,
hypot_optab,
ilogb_optab,
isinf_optab,
ldexp_optab,
log10_optab,
log1p_optab,
log2_optab,
log_optab,
logb_optab,
pow_optab,
remainder_optab,
rsqrt_optab,
scalb_optab,
signbit_optab,
significand_optab,
sin_optab,
sincos_optab,
sinh_optab,
tan_optab,
tanh_optab,
fegetround_optab,
feclearexcept_optab,
feraiseexcept_optab,
fmax_optab,
fmin_optab,
reduc_fmax_scal_optab,
reduc_fmin_scal_optab,
reduc_smax_scal_optab,
reduc_smin_scal_optab,
reduc_plus_scal_optab,
reduc_umax_scal_optab,
reduc_umin_scal_optab,
reduc_and_scal_optab,
reduc_ior_scal_optab,
reduc_xor_scal_optab,
fold_left_plus_optab,
mask_fold_left_plus_optab,
extract_last_optab,
fold_extract_last_optab,
savg_floor_optab,
uavg_floor_optab,
savg_ceil_optab,
uavg_ceil_optab,
sdot_prod_optab,
ssum_widen_optab,
udot_prod_optab,
usdot_prod_optab,
usum_widen_optab,
usad_optab,
ssad_optab,
smulhs_optab,
smulhrs_optab,
umulhs_optab,
umulhrs_optab,
sdiv_pow2_optab,
vec_pack_sfix_trunc_optab,
vec_pack_ssat_optab,
vec_pack_trunc_optab,
vec_pack_ufix_trunc_optab,
vec_pack_sbool_trunc_optab,
vec_pack_usat_optab,
vec_packs_float_optab,
vec_packu_float_optab,
vec_perm_optab,
vec_realign_load_optab,
vec_set_optab,
vec_shl_optab,
vec_shr_optab,
vec_unpack_sfix_trunc_hi_optab,
vec_unpack_sfix_trunc_lo_optab,
vec_unpack_ufix_trunc_hi_optab,
vec_unpack_ufix_trunc_lo_optab,
vec_unpacks_float_hi_optab,
vec_unpacks_float_lo_optab,
vec_unpacks_hi_optab,
vec_unpacks_lo_optab,
vec_unpacks_sbool_hi_optab,
vec_unpacks_sbool_lo_optab,
vec_unpacku_float_hi_optab,
vec_unpacku_float_lo_optab,
vec_unpacku_hi_optab,
vec_unpacku_lo_optab,
vec_widen_smult_even_optab,
vec_widen_smult_hi_optab,
vec_widen_smult_lo_optab,
vec_widen_smult_odd_optab,
vec_widen_ssubl_hi_optab,
vec_widen_ssubl_lo_optab,
vec_widen_saddl_hi_optab,
vec_widen_saddl_lo_optab,
vec_widen_sshiftl_hi_optab,
vec_widen_sshiftl_lo_optab,
vec_widen_umult_even_optab,
vec_widen_umult_hi_optab,
vec_widen_umult_lo_optab,
vec_widen_umult_odd_optab,
vec_widen_ushiftl_hi_optab,
vec_widen_ushiftl_lo_optab,
vec_widen_usubl_hi_optab,
vec_widen_usubl_lo_optab,
vec_widen_uaddl_hi_optab,
vec_widen_uaddl_lo_optab,
vec_addsub_optab,
vec_fmaddsub_optab,
vec_fmsubadd_optab,
sync_add_optab,
sync_and_optab,
sync_ior_optab,
sync_lock_release_optab,
sync_nand_optab,
sync_sub_optab,
sync_xor_optab,
atomic_add_fetch_optab,
atomic_add_optab,
atomic_and_fetch_optab,
atomic_and_optab,
atomic_bit_test_and_set_optab,
atomic_bit_test_and_complement_optab,
atomic_bit_test_and_reset_optab,
atomic_compare_and_swap_optab,
atomic_exchange_optab,
atomic_fetch_add_optab,
atomic_fetch_and_optab,
atomic_fetch_nand_optab,
atomic_fetch_or_optab,
atomic_fetch_sub_optab,
atomic_fetch_xor_optab,
atomic_load_optab,
atomic_nand_fetch_optab,
atomic_nand_optab,
atomic_or_fetch_optab,
atomic_or_optab,
atomic_store_optab,
atomic_sub_fetch_optab,
atomic_sub_optab,
atomic_xor_fetch_optab,
atomic_xor_optab,
atomic_add_fetch_cmp_0_optab,
atomic_sub_fetch_cmp_0_optab,
atomic_and_fetch_cmp_0_optab,
atomic_or_fetch_cmp_0_optab,
atomic_xor_fetch_cmp_0_optab,
get_thread_pointer_optab,
set_thread_pointer_optab,
check_raw_ptrs_optab,
check_war_ptrs_optab,
vec_duplicate_optab,
vec_series_optab,
vec_shl_insert_optab,
len_load_optab,
len_store_optab,
FIRST_CONV_OPTAB = sext_optab,
LAST_CONVLIB_OPTAB = satfractuns_optab,
LAST_CONV_OPTAB = while_ult_optab,
FIRST_NORM_OPTAB = add_optab,
LAST_NORMLIB_OPTAB = sync_lock_test_and_set_optab,
LAST_NORM_OPTAB = len_store_optab
};
#define NUM_OPTABS 379
#define NUM_CONVLIB_OPTABS 15
#define NUM_NORMLIB_OPTABS 80
#define NUM_OPTAB_PATTERNS 181
typedef enum optab_tag optab;
typedef enum optab_tag convert_optab;
typedef enum optab_tag direct_optab;
struct optab_libcall_d
{
char libcall_suffix;
const char *libcall_basename;
void (*libcall_gen) (optab, const char *name,
char suffix, machine_mode);
};
struct convert_optab_libcall_d
{
const char *libcall_basename;
void (*libcall_gen) (convert_optab, const char *name,
machine_mode, machine_mode);
};
/* Given an enum insn_code, access the function to construct
the body of that kind of insn. */
#define GEN_FCN(CODE) (insn_data[CODE].genfun)
#ifdef NUM_RTX_CODE
/* Contains the optab used for each rtx code, and vice-versa. */
extern const optab code_to_optab_[NUM_RTX_CODE];
extern const enum rtx_code optab_to_code_[NUM_OPTABS];
static inline optab
code_to_optab (enum rtx_code code)
{
return code_to_optab_[code];
}
static inline enum rtx_code
optab_to_code (optab op)
{
return optab_to_code_[op];
}
extern insn_code maybe_code_for_cbranch4 (machine_mode);
inline insn_code
code_for_cbranch4 (machine_mode arg0)
{
insn_code code = maybe_code_for_cbranch4 (arg0);
gcc_assert (code != CODE_FOR_nothing);
return code;
}
extern rtx maybe_gen_cbranch4 (machine_mode, rtx, rtx, rtx, rtx);
inline rtx
gen_cbranch4 (machine_mode arg0, rtx x0, rtx x1, rtx x2, rtx x3)
{
rtx res = maybe_gen_cbranch4 (arg0, x0, x1, x2, x3);
gcc_assert (res);
return res;
}
#endif
extern const struct convert_optab_libcall_d convlib_def[NUM_CONVLIB_OPTABS];
extern const struct optab_libcall_d normlib_def[NUM_NORMLIB_OPTABS];
/* Returns the active icode for the given (encoded) optab. */
extern enum insn_code raw_optab_handler (unsigned);
extern bool swap_optab_enable (optab, machine_mode, bool);
/* Target-dependent globals. */
struct target_optabs {
/* Patterns that are used by optabs that are enabled for this target. */
bool pat_enable[NUM_OPTAB_PATTERNS];
/* Index VOIDmode caches if the target supports vec_gather_load for any
vector mode. Every other index X caches specifically for mode X.
1 means yes, -1 means no. */
signed char supports_vec_gather_load[NUM_MACHINE_MODES];
signed char supports_vec_scatter_store[NUM_MACHINE_MODES];
};
extern void init_all_optabs (struct target_optabs *);
extern bool partial_vectors_supported_p (void);
extern struct target_optabs default_target_optabs;
extern struct target_optabs *this_fn_optabs;
#if SWITCHABLE_TARGET
extern struct target_optabs *this_target_optabs;
#else
#define this_target_optabs (&default_target_optabs)
#endif
#endif