This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Miscellaneous ColdFire patches


"Joseph S. Myers" <joseph@codesourcery.com> writes:

> 2013-06-28  Joseph Myers  <joseph@codesourcery.com>
>
> 	* sysdeps/unix/sysv/linux/m68k/kernel-features.h [__mcoldfire__]
> 	(MMAP2_PAGE_SHIFT): Define to -1.

kernel-features.h is the wrong place to define this (mmap64.c should
actually no longer include it).  You should create a mmap64.c that
defines MMAP2_PAGE_SHIFT and then falls through to the real
implementation.  Also, this is an issue for sun3 as well, so it needs to
be defined for all m68k variants.

Finally, you need to fix sysdeps/unix/sysv/linux/mmap64.c so that it
doesn't shift by -1.

(Looks like cris and microblaze have the same bug.)

> 2013-06-28  Nathan Sidwell  <nathan@codesourcery.com>
>
> 	* sysdeps/m68k/fpu_control.h [__mcoldfire__ && !__mcffpu__]
> 	(_FPU_RESERVED): Provide alternative definition.
> 	[__mcoldfire__ && !__mcffpu__] (_FPU_DEFAULT): Likewise.
> 	[__mcoldfire__ && !__mcffpu__] (_FPU_GETCW): Likewise.
> 	[__mcoldfire__ && !__mcffpu__] (_FPU_SETCW): Likewise.
> 	[!(__mcoldfire__ && !__mcffpu__)]: Make existing macro definitions
> 	conditional.
>
> diff --git a/ports/sysdeps/m68k/fpu_control.h b/ports/sysdeps/m68k/fpu_control.h
> index c37fcf4..848b5ba 100644
> --- a/ports/sysdeps/m68k/fpu_control.h
> +++ b/ports/sysdeps/m68k/fpu_control.h
> @@ -53,6 +53,15 @@
>  
>  #include <features.h>
>  
> +#if defined (__mcoldfire__) && !defined (__mcffpu__)
> +
> +#define _FPU_RESERVED 0xffffffff
> +#define _FPU_DEFAULT  0x00000000
> +#define _FPU_GETCW(cw) ((cw) = 0)
> +#define _FPU_SETCW(cw) ((void) (cw))
> +
> +#else
> +
>  /* masking of interrupts */
>  #define _FPU_MASK_BSUN  0x8000
>  #define _FPU_MASK_SNAN  0x4000
> @@ -95,12 +104,13 @@
>     that __setfpucw works.  This bit will be ignored.  */
>  #define _FPU_IEEE     0x00000001
>  
> -/* Type of the control word.  */
> -typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
> -
>  /* Macros for accessing the hardware control word.  */
>  #define _FPU_GETCW(cw) __asm__ ("fmove%.l %!, %0" : "=dm" (cw))
>  #define _FPU_SETCW(cw) __asm__ volatile ("fmove%.l %0, %!" : : "dm" (cw))
> +#endif
> +
> +/* Type of the control word.  */
> +typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
>  
>  /* Default control word set at startup.  */
>  extern fpu_control_t __fpu_control;

Please fix up the preprocessor indentation, possibly in a separate
commit.

> 2013-06-28  Nathan Sidwell  <nathan@codesourcery.com>
> 	    Joseph Myers  <joseph@codesourcery.com>
>
> 	* sysdeps/m68k/dl-trampoline.S (_dl_runtime_profile)
> 	[__mcoldfire__ && !__mcffpu]: Do not save floating-point
> 	registers.
>
> diff --git a/ports/sysdeps/m68k/dl-trampoline.S b/ports/sysdeps/m68k/dl-trampoline.S
> index 5aeafc7..16f20dc 100644
> --- a/ports/sysdeps/m68k/dl-trampoline.S
> +++ b/ports/sysdeps/m68k/dl-trampoline.S
> @@ -174,12 +174,16 @@ _dl_runtime_profile:
>  	    +4      %a1
>  	   %sp      %a0
>  	*/
> -#ifdef __mcoldfire__
> +#if !defined (__mcoldfire__)
> +	fmove.x %fp0, -(%sp)
> +	cfi_adjust_cfa_offset (12)
> +#elif defined (__mcffpu__)
>  	fmove.d %fp0, -(%sp)
>  	cfi_adjust_cfa_offset (8)
>  #else
> -	fmove.x %fp0, -(%sp)
> -	cfi_adjust_cfa_offset (12)
> +	clr.l -(%sp)
> +	clr.l -(%sp)
> +	cfi_adjust_cfa_offset (8)

There should be no need to even allocate the stack space.

>  #endif
>  	move.l %a0, -(%sp)
>  	cfi_adjust_cfa_offset (4)
> @@ -213,15 +217,20 @@ _dl_runtime_profile:
>  	cfi_adjust_cfa_offset (-4)
>  	move.l (%sp)+, %a0
>  	cfi_adjust_cfa_offset (-4)
> -#ifdef __mcoldfire__
> -	fmove.d (%sp)+, %fp0
> -	cfi_adjust_cfa_offset (-8)
> -#else
> +#if !defined (__mcoldfire__)
>  	fmove.x (%sp)+, %fp0
>  	cfi_adjust_cfa_offset (-12)
> -#endif
>  	lea 20(%sp), %sp
>  	cfi_adjust_cfa_offset (-20)
> +#elif defined (__mcffpu__)
> +	fmove.l (%sp)+, %fp0

fmove.d

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]