This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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: [libitm] Port to ARM


On 23/11/11 23:47, Richard Henderson wrote:
> To get the ball rolling for other targets, and to let port maintainers see how easy it really is, here's a first cut at a port to ARM.
> 
> Only cross-compiled as yet, and qemu-linux-user isn't good enough to emulate.  I'll do another build on the armv7 host once my current bootstrap and test for the atomic optabs is complete.
> 
> Please review, especially the local setjmp-alike implementation.
> 
> 
> r~
> 
> 
> d-arm-libitm
> 
>
> +	.text
> +	.align	2
> +	.global	_ITM_beginTransaction
> +	.type	_ITM_beginTransaction, %function
> +
> +_ITM_beginTransaction:
> +	push	{ r4-r11, sp, lr }
> +	mov	r1, sp
> +	bl	GTM_begin_transaction


What about systems with floating-point or vector registers?  Ie VFP or
WMMX on XScale?  Do the callee saved registers in those register banks
also have to be saved?

> diff --git a/libitm/config/arm/target.h b/libitm/config/arm/target.h

> +  unsigned long s[8];	/* r4-r12 */

R4-R12 is 9 registers.  But R12 is callee clobbered.  So is the code or
the comment incorrect?

> +/* ARM generally uses a fixed page size of 4K.  */
> +#define PAGE_SIZE	4096
> +#define FIXED_PAGE_SIZE	1

So I know that on AArch64 there's some interest in moving to larger
pages than this in order to reduce the number of TLB walks needed; this
may impact on the ARM code as well, long term.

> +
> +/* ??? The size of one line in hardware caches (in bytes). */
> +#define HW_CACHELINE_SIZE 64

You can't assume this.  It can vary per core (and I think it may even
vary depending on the cache level).

> +
> +static inline void
> +cpu_relax (void)
> +{
> +  /* ??? Maybe use WFE.  */

Maybe, but WFE doesn't exist on older CPUs

> diff --git a/libitm/config/linux/arm/futex_bits.h b/libitm/config/linux/arm/futex_bits.h

As discussed elsewhere, better to use syscall here rather than try to
inline it.


R.


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