mips16.S (CE_STARTFN, CE_ENDFN): New macros.

* config/mips/mips16.S (CE_STARTFN, CE_ENDFN): New macros.
	(RET_FUNCTION): Use them in place of STARTFN and ENDFN.
	(CALL_STUB_NO_RET): Likewise.
	(CALL_STUB_RET): Likewise.
	* config/mips/libgcc-mips16.ver: Remove __mips16_call_stub and
	__mips16_ret call/return stub symbols.
	* config.host <mips*-*-linux>: For non-R5900 add t-slibgcc-libgcc
	to tmake_file.

Co-Authored-By: Catherine Moore <clm@codesourcery.com>
Co-Authored-By: Richard Sandiford <rdsandiford@googlemail.com>

From-SVN: r201805
This commit is contained in:
Maciej W. Rozycki 2013-08-16 22:23:29 +00:00 committed by Maciej W. Rozycki
parent c74f54a0c1
commit 0f9bde1fac
4 changed files with 48 additions and 51 deletions

View File

@ -1,3 +1,16 @@
2013-08-16 Maciej W. Rozycki <macro@codesourcery.com>
Catherine Moore <clm@codesourcery.com>
Richard Sandiford <rdsandiford@googlemail.com>
* config/mips/mips16.S (CE_STARTFN, CE_ENDFN): New macros.
(RET_FUNCTION): Use them in place of STARTFN and ENDFN.
(CALL_STUB_NO_RET): Likewise.
(CALL_STUB_RET): Likewise.
* config/mips/libgcc-mips16.ver: Remove __mips16_call_stub and
__mips16_ret call/return stub symbols.
* config.host <mips*-*-linux>: For non-R5900 add t-slibgcc-libgcc
to tmake_file.
2013-08-13 Maciej W. Rozycki <macro@codesourcery.com>
* config.host <mips*-*-linux*>: Remove a stray comment.

View File

@ -741,13 +741,13 @@ mips*-*-linux*) # Linux MIPS, either endian.
extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} t-crtfm"
case ${host} in
mips64r5900* | mipsr5900*)
# The MIPS16 support code uses floating point
# instructions that are not supported on r5900.
;;
*)
tmake_file="${tmake_file} mips/t-mips16"
;;
mips64r5900* | mipsr5900*)
# The MIPS16 support code uses floating point
# instructions that are not supported on r5900.
;;
*)
tmake_file="${tmake_file} mips/t-mips16 t-slibgcc-libgcc"
;;
esac
md_unwind_header=mips/linux-unwind.h
if test "${ac_cv_sizeof_long_double}" = 16; then

View File

@ -45,42 +45,4 @@ GCC_4.4.0 {
__mips16_floatsidf
__mips16_floatunsidf
__mips16_fix_truncdfsi
__mips16_ret_sf
__mips16_ret_sc
__mips16_ret_df
__mips16_ret_dc
__mips16_call_stub_1
__mips16_call_stub_5
__mips16_call_stub_2
__mips16_call_stub_6
__mips16_call_stub_9
__mips16_call_stub_10
__mips16_call_stub_sf_0
__mips16_call_stub_sf_1
__mips16_call_stub_sf_5
__mips16_call_stub_sf_2
__mips16_call_stub_sf_6
__mips16_call_stub_sf_9
__mips16_call_stub_sf_10
__mips16_call_stub_sc_0
__mips16_call_stub_sc_1
__mips16_call_stub_sc_5
__mips16_call_stub_sc_2
__mips16_call_stub_sc_6
__mips16_call_stub_sc_9
__mips16_call_stub_sc_10
__mips16_call_stub_df_0
__mips16_call_stub_df_1
__mips16_call_stub_df_5
__mips16_call_stub_df_2
__mips16_call_stub_df_6
__mips16_call_stub_df_9
__mips16_call_stub_df_10
__mips16_call_stub_dc_0
__mips16_call_stub_dc_1
__mips16_call_stub_dc_5
__mips16_call_stub_dc_2
__mips16_call_stub_dc_6
__mips16_call_stub_dc_9
__mips16_call_stub_dc_10
}

View File

@ -479,13 +479,35 @@ STARTFN (__mips16_fix_truncdfsi)
#endif
#endif /* !__mips_single_float */
/* We don't export stubs from libgcc_s.so and always require static
versions to be pulled from libgcc.a as needed because they use $2
and possibly $3 as arguments, diverging from the standard SysV ABI,
and as such would require severe pessimisation of MIPS16 PLT entries
just for this single special case.
For compatibility with old binaries that used safe standard MIPS PLT
entries and referred to these functions we still export them at
version GCC_4.4.0 for run-time loading only. */
#ifdef SHARED
#define CE_STARTFN(NAME) \
STARTFN (NAME##_compat); \
.symver NAME##_compat, NAME@GCC_4.4.0
#define CE_ENDFN(NAME) ENDFN (NAME##_compat)
#else
#define CE_STARTFN(NAME) \
STARTFN (NAME); \
.hidden NAME
#define CE_ENDFN(NAME) ENDFN (NAME)
#endif
/* Define a function NAME that moves a return value of mode MODE from
FPRs to GPRs. */
#define RET_FUNCTION(NAME, MODE) \
STARTFN (NAME); \
CE_STARTFN (NAME); \
MOVE_##MODE##_RET (t, $31); \
ENDFN (NAME)
CE_ENDFN (NAME)
#ifdef L_m16retsf
RET_FUNCTION (__mips16_ret_sf, SF)
@ -526,13 +548,13 @@ RET_FUNCTION (__mips16_ret_dc, DC)
to FPRs and then call function $2. */
#define CALL_STUB_NO_RET(NAME, CODE) \
STARTFN (NAME); \
CE_STARTFN (NAME); \
STUB_ARGS_##CODE; \
.set noreorder; \
jr $2; \
move $25,$2; \
.set reorder; \
ENDFN (NAME)
CE_ENDFN (NAME)
#ifdef L_m16stub1
CALL_STUB_NO_RET (__mips16_call_stub_1, 1)
@ -575,7 +597,7 @@ CALL_STUB_NO_RET (__mips16_call_stub_10, 10)
however, it's faster to always do the copy. */
#define CALL_STUB_RET(NAME, CODE, MODE) \
STARTFN (NAME); \
CE_STARTFN (NAME); \
.cfi_startproc; \
/* Create a fake CFA 4 bytes below the stack pointer. */ \
.cfi_def_cfa 29,-4; \
@ -591,7 +613,7 @@ STARTFN (NAME); \
.set reorder; \
MOVE_##MODE##_RET (f, $18); \
.cfi_endproc; \
ENDFN (NAME)
CE_ENDFN (NAME)
/* First, instantiate the single-float set. */