Commit 6d9e1220 by Oleg Endo

sh.c (builtin_description): Add is_enabled member.

	* config/sh/sh.c (builtin_description): Add is_enabled member.
	(shmedia_builtin_p): New function.
	(bdesc): Use shmedia_builtin_p for existing built-ins.
	(sh_media_init_builtins, sh_init_builtins): Merge into single function
	sh_init_builtins.  Add is_enabled checking.  Move variable declarations
	to where they are actually used.
	(sh_media_builtin_decl, sh_builtin_decl): Merge into single function
	sh_builtin_decl.  Add is_enabled checking.
	(sh_expand_builtin): Move variable declarations to where they are
	actually used.

From-SVN: r192142
parent 0d23cf7a
2012-10-05 Oleg Endo <olegendo@gcc.gnu.org>
* config/sh/sh.c (builtin_description): Add is_enabled member.
(shmedia_builtin_p): New function.
(bdesc): Use shmedia_builtin_p for existing built-ins.
(sh_media_init_builtins, sh_init_builtins): Merge into single function
sh_init_builtins. Add is_enabled checking. Move variable declarations
to where they are actually used.
(sh_media_builtin_decl, sh_builtin_decl): Merge into single function
sh_builtin_decl. Add is_enabled checking.
(sh_expand_builtin): Move variable declarations to where they are
actually used.
2012-10-05 Jakub Jelinek <jakub@redhat.com> 2012-10-05 Jakub Jelinek <jakub@redhat.com>
* tree-inline.c (expand_call_inline): Move VAR_DECLs with * tree-inline.c (expand_call_inline): Move VAR_DECLs with
......
...@@ -243,8 +243,6 @@ static bool sh_ms_bitfield_layout_p (const_tree); ...@@ -243,8 +243,6 @@ static bool sh_ms_bitfield_layout_p (const_tree);
static void sh_init_builtins (void); static void sh_init_builtins (void);
static tree sh_builtin_decl (unsigned, bool); static tree sh_builtin_decl (unsigned, bool);
static void sh_media_init_builtins (void);
static tree sh_media_builtin_decl (unsigned, bool);
static rtx sh_expand_builtin (tree, rtx, rtx, enum machine_mode, int); static rtx sh_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree); static void sh_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, HOST_WIDE_INT, tree);
static void sh_file_start (void); static void sh_file_start (void);
...@@ -11510,12 +11508,19 @@ sh_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) ...@@ -11510,12 +11508,19 @@ sh_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED)
struct builtin_description struct builtin_description
{ {
bool (* const is_enabled) (void);
const enum insn_code icode; const enum insn_code icode;
const char *const name; const char *const name;
int signature; int signature;
tree fndecl; tree fndecl;
}; };
static bool
shmedia_builtin_p (void)
{
return TARGET_SHMEDIA;
}
/* describe number and signedness of arguments; arg[0] == result /* describe number and signedness of arguments; arg[0] == result
(1: unsigned, 2: signed, 4: don't care, 8: pointer 0: no argument */ (1: unsigned, 2: signed, 4: don't care, 8: pointer 0: no argument */
/* 9: 64-bit pointer, 10: 32-bit pointer */ /* 9: 64-bit pointer, 10: 32-bit pointer */
...@@ -11582,103 +11587,189 @@ static const char signature_args[][4] = ...@@ -11582,103 +11587,189 @@ static const char signature_args[][4] =
/* nsb: takes long long arg, returns unsigned char. */ /* nsb: takes long long arg, returns unsigned char. */
static struct builtin_description bdesc[] = static struct builtin_description bdesc[] =
{ {
{ CODE_FOR_absv2si2, "__builtin_absv2si2", SH_BLTIN_V2SI2, 0 }, { shmedia_builtin_p,
{ CODE_FOR_absv4hi2, "__builtin_absv4hi2", SH_BLTIN_V4HI2, 0 }, CODE_FOR_absv2si2, "__builtin_absv2si2", SH_BLTIN_V2SI2, 0 },
{ CODE_FOR_addv2si3, "__builtin_addv2si3", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_addv4hi3, "__builtin_addv4hi3", SH_BLTIN_V4HI3, 0 }, CODE_FOR_absv4hi2, "__builtin_absv4hi2", SH_BLTIN_V4HI2, 0 },
{ CODE_FOR_ssaddv2si3,"__builtin_ssaddv2si3", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_usaddv8qi3,"__builtin_usaddv8qi3", SH_BLTIN_V8QI3, 0 }, CODE_FOR_addv2si3, "__builtin_addv2si3", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_ssaddv4hi3,"__builtin_ssaddv4hi3", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_alloco_i, "__builtin_sh_media_ALLOCO", SH_BLTIN_PV, 0 }, CODE_FOR_addv4hi3, "__builtin_addv4hi3", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_negcmpeqv8qi,"__builtin_sh_media_MCMPEQ_B", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_negcmpeqv2si,"__builtin_sh_media_MCMPEQ_L", SH_BLTIN_V2SI3, 0 }, CODE_FOR_ssaddv2si3,"__builtin_ssaddv2si3", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_negcmpeqv4hi,"__builtin_sh_media_MCMPEQ_W", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_negcmpgtuv8qi,"__builtin_sh_media_MCMPGT_UB", SH_BLTIN_V8QI3, 0 }, CODE_FOR_usaddv8qi3,"__builtin_usaddv8qi3", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_negcmpgtv2si,"__builtin_sh_media_MCMPGT_L", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_negcmpgtv4hi,"__builtin_sh_media_MCMPGT_W", SH_BLTIN_V4HI3, 0 }, CODE_FOR_ssaddv4hi3,"__builtin_ssaddv4hi3", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_mcmv, "__builtin_sh_media_MCMV", SH_BLTIN_UUUU, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mcnvs_lw, "__builtin_sh_media_MCNVS_LW", SH_BLTIN_3, 0 }, CODE_FOR_alloco_i, "__builtin_sh_media_ALLOCO", SH_BLTIN_PV, 0 },
{ CODE_FOR_mcnvs_wb, "__builtin_sh_media_MCNVS_WB", SH_BLTIN_V4HI2V8QI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mcnvs_wub, "__builtin_sh_media_MCNVS_WUB", SH_BLTIN_V4HI2V8QI, 0 }, CODE_FOR_negcmpeqv8qi,"__builtin_sh_media_MCMPEQ_B", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mextr1, "__builtin_sh_media_MEXTR1", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mextr2, "__builtin_sh_media_MEXTR2", SH_BLTIN_V8QI3, 0 }, CODE_FOR_negcmpeqv2si,"__builtin_sh_media_MCMPEQ_L", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_mextr3, "__builtin_sh_media_MEXTR3", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mextr4, "__builtin_sh_media_MEXTR4", SH_BLTIN_V8QI3, 0 }, CODE_FOR_negcmpeqv4hi,"__builtin_sh_media_MCMPEQ_W", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_mextr5, "__builtin_sh_media_MEXTR5", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mextr6, "__builtin_sh_media_MEXTR6", SH_BLTIN_V8QI3, 0 }, CODE_FOR_negcmpgtuv8qi,"__builtin_sh_media_MCMPGT_UB", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mextr7, "__builtin_sh_media_MEXTR7", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mmacfx_wl, "__builtin_sh_media_MMACFX_WL", SH_BLTIN_MAC_HISI, 0 }, CODE_FOR_negcmpgtv2si,"__builtin_sh_media_MCMPGT_L", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_mmacnfx_wl,"__builtin_sh_media_MMACNFX_WL", SH_BLTIN_MAC_HISI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mulv2si3, "__builtin_mulv2si3", SH_BLTIN_V2SI3, 0 }, CODE_FOR_negcmpgtv4hi,"__builtin_sh_media_MCMPGT_W", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_mulv4hi3, "__builtin_mulv4hi3", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mmulfx_l, "__builtin_sh_media_MMULFX_L", SH_BLTIN_V2SI3, 0 }, CODE_FOR_mcmv, "__builtin_sh_media_MCMV", SH_BLTIN_UUUU, 0 },
{ CODE_FOR_mmulfx_w, "__builtin_sh_media_MMULFX_W", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mmulfxrp_w,"__builtin_sh_media_MMULFXRP_W", SH_BLTIN_V4HI3, 0 }, CODE_FOR_mcnvs_lw, "__builtin_sh_media_MCNVS_LW", SH_BLTIN_3, 0 },
{ CODE_FOR_mmulhi_wl, "__builtin_sh_media_MMULHI_WL", SH_BLTIN_V4HI2V2SI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mmullo_wl, "__builtin_sh_media_MMULLO_WL", SH_BLTIN_V4HI2V2SI, 0 }, CODE_FOR_mcnvs_wb, "__builtin_sh_media_MCNVS_WB", SH_BLTIN_V4HI2V8QI, 0 },
{ CODE_FOR_mmulsum_wq,"__builtin_sh_media_MMULSUM_WQ", SH_BLTIN_XXUU, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mperm_w, "__builtin_sh_media_MPERM_W", SH_BLTIN_SH_HI, 0 }, CODE_FOR_mcnvs_wub, "__builtin_sh_media_MCNVS_WUB", SH_BLTIN_V4HI2V8QI, 0 },
{ CODE_FOR_msad_ubq, "__builtin_sh_media_MSAD_UBQ", SH_BLTIN_XXUU, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mshalds_l, "__builtin_sh_media_MSHALDS_L", SH_BLTIN_SH_SI, 0 }, CODE_FOR_mextr1, "__builtin_sh_media_MEXTR1", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mshalds_w, "__builtin_sh_media_MSHALDS_W", SH_BLTIN_SH_HI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ashrv2si3, "__builtin_ashrv2si3", SH_BLTIN_SH_SI, 0 }, CODE_FOR_mextr2, "__builtin_sh_media_MEXTR2", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_ashrv4hi3, "__builtin_ashrv4hi3", SH_BLTIN_SH_HI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mshards_q, "__builtin_sh_media_MSHARDS_Q", SH_BLTIN_SUS, 0 }, CODE_FOR_mextr3, "__builtin_sh_media_MEXTR3", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mshfhi_b, "__builtin_sh_media_MSHFHI_B", SH_BLTIN_V8QI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mshfhi_l, "__builtin_sh_media_MSHFHI_L", SH_BLTIN_V2SI3, 0 }, CODE_FOR_mextr4, "__builtin_sh_media_MEXTR4", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mshfhi_w, "__builtin_sh_media_MSHFHI_W", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mshflo_b, "__builtin_sh_media_MSHFLO_B", SH_BLTIN_V8QI3, 0 }, CODE_FOR_mextr5, "__builtin_sh_media_MEXTR5", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_mshflo_l, "__builtin_sh_media_MSHFLO_L", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_mshflo_w, "__builtin_sh_media_MSHFLO_W", SH_BLTIN_V4HI3, 0 }, CODE_FOR_mextr6, "__builtin_sh_media_MEXTR6", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_ashlv2si3, "__builtin_ashlv2si3", SH_BLTIN_SH_SI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ashlv4hi3, "__builtin_ashlv4hi3", SH_BLTIN_SH_HI, 0 }, CODE_FOR_mextr7, "__builtin_sh_media_MEXTR7", SH_BLTIN_V8QI3, 0 },
{ CODE_FOR_lshrv2si3, "__builtin_lshrv2si3", SH_BLTIN_SH_SI, 0 }, { shmedia_builtin_p,
{ CODE_FOR_lshrv4hi3, "__builtin_lshrv4hi3", SH_BLTIN_SH_HI, 0 }, CODE_FOR_mmacfx_wl, "__builtin_sh_media_MMACFX_WL", SH_BLTIN_MAC_HISI, 0 },
{ CODE_FOR_subv2si3, "__builtin_subv2si3", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_subv4hi3, "__builtin_subv4hi3", SH_BLTIN_V4HI3, 0 }, CODE_FOR_mmacnfx_wl,"__builtin_sh_media_MMACNFX_WL", SH_BLTIN_MAC_HISI, 0 },
{ CODE_FOR_sssubv2si3,"__builtin_sssubv2si3", SH_BLTIN_V2SI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ussubv8qi3,"__builtin_ussubv8qi3", SH_BLTIN_V8QI3, 0 }, CODE_FOR_mulv2si3, "__builtin_mulv2si3", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_sssubv4hi3,"__builtin_sssubv4hi3", SH_BLTIN_V4HI3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_fcosa_s, "__builtin_sh_media_FCOSA_S", SH_BLTIN_SISF, 0 }, CODE_FOR_mulv4hi3, "__builtin_mulv4hi3", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_fsina_s, "__builtin_sh_media_FSINA_S", SH_BLTIN_SISF, 0 }, { shmedia_builtin_p,
{ CODE_FOR_fipr, "__builtin_sh_media_FIPR_S", SH_BLTIN_3, 0 }, CODE_FOR_mmulfx_l, "__builtin_sh_media_MMULFX_L", SH_BLTIN_V2SI3, 0 },
{ CODE_FOR_ftrv, "__builtin_sh_media_FTRV_S", SH_BLTIN_3, 0 }, { shmedia_builtin_p,
{ CODE_FOR_sqrtdf2, "__builtin_sh_media_FSQRT_D", SH_BLTIN_2, 0 }, CODE_FOR_mmulfx_w, "__builtin_sh_media_MMULFX_W", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_sqrtsf2, "__builtin_sh_media_FSQRT_S", SH_BLTIN_2, 0 }, { shmedia_builtin_p,
{ CODE_FOR_fsrra_s, "__builtin_sh_media_FSRRA_S", SH_BLTIN_2, 0 }, CODE_FOR_mmulfxrp_w,"__builtin_sh_media_MMULFXRP_W", SH_BLTIN_V4HI3, 0 },
{ CODE_FOR_ldhi_l, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ldhi_q, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q, 0 }, CODE_FOR_mmulhi_wl, "__builtin_sh_media_MMULHI_WL", SH_BLTIN_V4HI2V2SI, 0 },
{ CODE_FOR_ldlo_l, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ldlo_q, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q, 0 }, CODE_FOR_mmullo_wl, "__builtin_sh_media_MMULLO_WL", SH_BLTIN_V4HI2V2SI, 0 },
{ CODE_FOR_sthi_l, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L, 0 }, { shmedia_builtin_p,
{ CODE_FOR_sthi_q, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q, 0 }, CODE_FOR_mmulsum_wq,"__builtin_sh_media_MMULSUM_WQ", SH_BLTIN_XXUU, 0 },
{ CODE_FOR_stlo_l, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L, 0 }, { shmedia_builtin_p,
{ CODE_FOR_stlo_q, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q, 0 }, CODE_FOR_mperm_w, "__builtin_sh_media_MPERM_W", SH_BLTIN_SH_HI, 0 },
{ CODE_FOR_ldhi_l64, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L64, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ldhi_q64, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q64, 0 }, CODE_FOR_msad_ubq, "__builtin_sh_media_MSAD_UBQ", SH_BLTIN_XXUU, 0 },
{ CODE_FOR_ldlo_l64, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L64, 0 }, { shmedia_builtin_p,
{ CODE_FOR_ldlo_q64, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q64, 0 }, CODE_FOR_mshalds_l, "__builtin_sh_media_MSHALDS_L", SH_BLTIN_SH_SI, 0 },
{ CODE_FOR_sthi_l64, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L64, 0 }, { shmedia_builtin_p,
{ CODE_FOR_sthi_q64, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q64, 0 }, CODE_FOR_mshalds_w, "__builtin_sh_media_MSHALDS_W", SH_BLTIN_SH_HI, 0 },
{ CODE_FOR_stlo_l64, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L64, 0 }, { shmedia_builtin_p,
{ CODE_FOR_stlo_q64, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q64, 0 }, CODE_FOR_ashrv2si3, "__builtin_ashrv2si3", SH_BLTIN_SH_SI, 0 },
{ CODE_FOR_nsb, "__builtin_sh_media_NSB", SH_BLTIN_SU, 0 }, { shmedia_builtin_p,
{ CODE_FOR_byterev, "__builtin_sh_media_BYTEREV", SH_BLTIN_2, 0 }, CODE_FOR_ashrv4hi3, "__builtin_ashrv4hi3", SH_BLTIN_SH_HI, 0 },
{ CODE_FOR_prefetch, "__builtin_sh_media_PREFO", SH_BLTIN_PSSV, 0 }, { shmedia_builtin_p,
CODE_FOR_mshards_q, "__builtin_sh_media_MSHARDS_Q", SH_BLTIN_SUS, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshfhi_b, "__builtin_sh_media_MSHFHI_B", SH_BLTIN_V8QI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshfhi_l, "__builtin_sh_media_MSHFHI_L", SH_BLTIN_V2SI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshfhi_w, "__builtin_sh_media_MSHFHI_W", SH_BLTIN_V4HI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshflo_b, "__builtin_sh_media_MSHFLO_B", SH_BLTIN_V8QI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshflo_l, "__builtin_sh_media_MSHFLO_L", SH_BLTIN_V2SI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_mshflo_w, "__builtin_sh_media_MSHFLO_W", SH_BLTIN_V4HI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_ashlv2si3, "__builtin_ashlv2si3", SH_BLTIN_SH_SI, 0 },
{ shmedia_builtin_p,
CODE_FOR_ashlv4hi3, "__builtin_ashlv4hi3", SH_BLTIN_SH_HI, 0 },
{ shmedia_builtin_p,
CODE_FOR_lshrv2si3, "__builtin_lshrv2si3", SH_BLTIN_SH_SI, 0 },
{ shmedia_builtin_p,
CODE_FOR_lshrv4hi3, "__builtin_lshrv4hi3", SH_BLTIN_SH_HI, 0 },
{ shmedia_builtin_p,
CODE_FOR_subv2si3, "__builtin_subv2si3", SH_BLTIN_V2SI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_subv4hi3, "__builtin_subv4hi3", SH_BLTIN_V4HI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_sssubv2si3,"__builtin_sssubv2si3", SH_BLTIN_V2SI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_ussubv8qi3,"__builtin_ussubv8qi3", SH_BLTIN_V8QI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_sssubv4hi3,"__builtin_sssubv4hi3", SH_BLTIN_V4HI3, 0 },
{ shmedia_builtin_p,
CODE_FOR_fcosa_s, "__builtin_sh_media_FCOSA_S", SH_BLTIN_SISF, 0 },
{ shmedia_builtin_p,
CODE_FOR_fsina_s, "__builtin_sh_media_FSINA_S", SH_BLTIN_SISF, 0 },
{ shmedia_builtin_p,
CODE_FOR_fipr, "__builtin_sh_media_FIPR_S", SH_BLTIN_3, 0 },
{ shmedia_builtin_p,
CODE_FOR_ftrv, "__builtin_sh_media_FTRV_S", SH_BLTIN_3, 0 },
{ shmedia_builtin_p,
CODE_FOR_sqrtdf2, "__builtin_sh_media_FSQRT_D", SH_BLTIN_2, 0 },
{ shmedia_builtin_p,
CODE_FOR_sqrtsf2, "__builtin_sh_media_FSQRT_S", SH_BLTIN_2, 0 },
{ shmedia_builtin_p,
CODE_FOR_fsrra_s, "__builtin_sh_media_FSRRA_S", SH_BLTIN_2, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldhi_l, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldhi_q, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldlo_l, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldlo_q, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q, 0 },
{ shmedia_builtin_p,
CODE_FOR_sthi_l, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L, 0 },
{ shmedia_builtin_p,
CODE_FOR_sthi_q, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q, 0 },
{ shmedia_builtin_p,
CODE_FOR_stlo_l, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L, 0 },
{ shmedia_builtin_p,
CODE_FOR_stlo_q, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldhi_l64, "__builtin_sh_media_LDHI_L", SH_BLTIN_LDUA_L64, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldhi_q64, "__builtin_sh_media_LDHI_Q", SH_BLTIN_LDUA_Q64, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldlo_l64, "__builtin_sh_media_LDLO_L", SH_BLTIN_LDUA_L64, 0 },
{ shmedia_builtin_p,
CODE_FOR_ldlo_q64, "__builtin_sh_media_LDLO_Q", SH_BLTIN_LDUA_Q64, 0 },
{ shmedia_builtin_p,
CODE_FOR_sthi_l64, "__builtin_sh_media_STHI_L", SH_BLTIN_STUA_L64, 0 },
{ shmedia_builtin_p,
CODE_FOR_sthi_q64, "__builtin_sh_media_STHI_Q", SH_BLTIN_STUA_Q64, 0 },
{ shmedia_builtin_p,
CODE_FOR_stlo_l64, "__builtin_sh_media_STLO_L", SH_BLTIN_STUA_L64, 0 },
{ shmedia_builtin_p,
CODE_FOR_stlo_q64, "__builtin_sh_media_STLO_Q", SH_BLTIN_STUA_Q64, 0 },
{ shmedia_builtin_p,
CODE_FOR_nsb, "__builtin_sh_media_NSB", SH_BLTIN_SU, 0 },
{ shmedia_builtin_p,
CODE_FOR_byterev, "__builtin_sh_media_BYTEREV", SH_BLTIN_2, 0 },
{ shmedia_builtin_p,
CODE_FOR_prefetch, "__builtin_sh_media_PREFO", SH_BLTIN_PSSV, 0 },
}; };
static void static void
sh_media_init_builtins (void) sh_init_builtins (void)
{ {
tree shared[SH_BLTIN_NUM_SHARED_SIGNATURES]; tree shared[SH_BLTIN_NUM_SHARED_SIGNATURES];
struct builtin_description *d;
memset (shared, 0, sizeof shared); memset (shared, 0, sizeof shared);
for (d = bdesc; d - bdesc < (int) ARRAY_SIZE (bdesc); d++)
for (unsigned int di = 0; di < ARRAY_SIZE (bdesc); ++di)
{ {
tree type, arg_type = 0; builtin_description* d = &bdesc[di];
if (!d->is_enabled ())
continue;
tree type, arg_type = NULL_TREE;
int signature = d->signature; int signature = d->signature;
int i;
if (signature < SH_BLTIN_NUM_SHARED_SIGNATURES && shared[signature]) if (signature < SH_BLTIN_NUM_SHARED_SIGNATURES && shared[signature])
type = shared[signature]; type = shared[signature];
...@@ -11694,9 +11785,9 @@ sh_media_init_builtins (void) ...@@ -11694,9 +11785,9 @@ sh_media_init_builtins (void)
if (! TARGET_FPU_ANY if (! TARGET_FPU_ANY
&& FLOAT_MODE_P (insn_data[d->icode].operand[0].mode)) && FLOAT_MODE_P (insn_data[d->icode].operand[0].mode))
continue; continue;
for (i = 0; i < (int) ARRAY_SIZE (args); i++) for (unsigned int i = 0; i < ARRAY_SIZE (args); i++)
args[i] = NULL_TREE; args[i] = NULL_TREE;
for (i = 3; ; i--) for (int i = 3; ; i--)
{ {
int arg = signature_args[signature][i]; int arg = signature_args[signature][i];
int opno = i - 1 + has_result; int opno = i - 1 + has_result;
...@@ -11705,8 +11796,7 @@ sh_media_init_builtins (void) ...@@ -11705,8 +11796,7 @@ sh_media_init_builtins (void)
arg_type = ptr_type_node; arg_type = ptr_type_node;
else if (arg) else if (arg)
arg_type = (*lang_hooks.types.type_for_mode) arg_type = (*lang_hooks.types.type_for_mode)
(insn_data[d->icode].operand[opno].mode, (insn_data[d->icode].operand[opno].mode, (arg & 1));
(arg & 1));
else if (i) else if (i)
continue; continue;
else else
...@@ -11726,17 +11816,6 @@ sh_media_init_builtins (void) ...@@ -11726,17 +11816,6 @@ sh_media_init_builtins (void)
} }
} }
/* Returns the shmedia builtin decl for CODE. */
static tree
sh_media_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
{
if (code >= ARRAY_SIZE (bdesc))
return error_mark_node;
return bdesc[code].fndecl;
}
/* Implements target hook vector_mode_supported_p. */ /* Implements target hook vector_mode_supported_p. */
bool bool
sh_vector_mode_supported_p (enum machine_mode mode) sh_vector_mode_supported_p (enum machine_mode mode)
...@@ -11782,22 +11861,18 @@ sh_dwarf_calling_convention (const_tree func) ...@@ -11782,22 +11861,18 @@ sh_dwarf_calling_convention (const_tree func)
return DW_CC_normal; return DW_CC_normal;
} }
static void
sh_init_builtins (void)
{
if (TARGET_SHMEDIA)
sh_media_init_builtins ();
}
/* Returns the sh builtin decl for CODE. */ /* Returns the sh builtin decl for CODE. */
static tree static tree
sh_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED) sh_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
{ {
if (TARGET_SHMEDIA) if (code >= ARRAY_SIZE (bdesc))
return sh_media_builtin_decl (code, initialize_p); return error_mark_node;
if (!bdesc[code].is_enabled ())
return error_mark_node; return error_mark_node;
return bdesc[code].fndecl;
} }
/* Expand an expression EXP that calls a built-in function, /* Expand an expression EXP that calls a built-in function,
...@@ -11815,27 +11890,24 @@ sh_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, ...@@ -11815,27 +11890,24 @@ sh_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
const struct builtin_description *d = &bdesc[fcode]; const struct builtin_description *d = &bdesc[fcode];
enum insn_code icode = d->icode; enum insn_code icode = d->icode;
int signature = d->signature; int signature = d->signature;
enum machine_mode tmode = VOIDmode; int nop = 0;
int nop = 0, i;
rtx op[4]; rtx op[4];
rtx pat = NULL_RTX;
if (signature_args[signature][0]) if (signature_args[signature][0])
{ {
if (ignore) if (ignore)
return NULL_RTX; return NULL_RTX;
tmode = insn_data[icode].operand[0].mode; enum machine_mode tmode = insn_data[icode].operand[0].mode;
if (! target if (! target || GET_MODE (target) != tmode
|| GET_MODE (target) != tmode
|| ! (*insn_data[icode].operand[0].predicate) (target, tmode)) || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
target = gen_reg_rtx (tmode); target = gen_reg_rtx (tmode);
op[nop++] = target; op[nop++] = target;
} }
else else
target = 0; target = NULL_RTX;
for (i = 1; i <= 3; i++, nop++) for (int i = 1; i <= 3; i++, nop++)
{ {
tree arg; tree arg;
enum machine_mode opmode, argmode; enum machine_mode opmode, argmode;
...@@ -11864,6 +11936,8 @@ sh_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, ...@@ -11864,6 +11936,8 @@ sh_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
op[nop] = copy_to_mode_reg (opmode, op[nop]); op[nop] = copy_to_mode_reg (opmode, op[nop]);
} }
rtx pat = NULL_RTX;
switch (nop) switch (nop)
{ {
case 1: case 1:
...@@ -13158,7 +13232,6 @@ sh_can_use_simple_return_p (void) ...@@ -13158,7 +13232,6 @@ sh_can_use_simple_return_p (void)
return false; return false;
return true; return true;
} }
#include "gt-sh.h" #include "gt-sh.h"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment