[Pixman] [PATCH] ARM: use pixman_asm_function in internal headers

Pekka Paalanen pekka.paalanen at collabora.co.uk
Tue Apr 8 07:17:43 PDT 2014


On Mon,  7 Apr 2014 14:57:10 +0300
Pekka Paalanen <ppaalanen at gmail.com> wrote:

> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> 
> The two ARM headers contained open-coded copies of pixman_asm_function,
> replace these.
> 
> Since it seems customary that ARM headers do not use CPP include guards,
> rely on the .S files to #include "pixman-arm-asm.h" first. They all
> already do.
> ---
>  pixman/pixman-arm-neon-asm.h | 20 ++++----------------
>  pixman/pixman-arm-simd-asm.h |  9 +--------
>  2 files changed, 5 insertions(+), 24 deletions(-)
> 
> diff --git a/pixman/pixman-arm-neon-asm.h b/pixman/pixman-arm-neon-asm.h
> index d0d92d7..bdcf6a9 100644
> --- a/pixman/pixman-arm-neon-asm.h
> +++ b/pixman/pixman-arm-neon-asm.h
> @@ -631,14 +631,8 @@ local skip1
>                                     src_basereg_   = 0, \
>                                     mask_basereg_  = 24
>  
> -    .func fname
> -    .global fname
> -    /* For ELF format also set function visibility to hidden */
> -#ifdef __ELF__
> -    .hidden fname
> -    .type fname, %function
> -#endif
> -fname:
> +    pixman_asm_function fname
> +
>      push        {r4-r12, lr}        /* save all registers */
>  
>  /*
> @@ -945,14 +939,8 @@ fname:
>                                                     src_basereg_   = 0, \
>                                                     mask_basereg_  = 24
>  
> -    .func fname
> -    .global fname
> -    /* For ELF format also set function visibility to hidden */
> -#ifdef __ELF__
> -    .hidden fname
> -    .type fname, %function
> -#endif
> -fname:
> +    pixman_asm_function fname
> +
>      .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
>  /*
>   * Make some macro arguments globally visible and accessible
> diff --git a/pixman/pixman-arm-simd-asm.h b/pixman/pixman-arm-simd-asm.h
> index 24b1ad2..1b2c592 100644
> --- a/pixman/pixman-arm-simd-asm.h
> +++ b/pixman/pixman-arm-simd-asm.h
> @@ -561,13 +561,7 @@
>                                     process_tail, \
>                                     process_inner_loop
>  
> - .func fname
> - .global fname
> - /* For ELF format also set function visibility to hidden */
> -#ifdef __ELF__
> - .hidden fname
> - .type fname, %function
> -#endif
> +    pixman_asm_function fname
>  
>  /*
>   * Make some macro arguments globally visible and accessible
> @@ -679,7 +673,6 @@
>      SCRATCH     .req    r12
>      ORIG_W      .req    r14 /* width (pixels) */
>  
> -fname:
>          push    {r4-r11, lr}        /* save all registers */
>  
>          subs    Y, Y, #1

Sorry, there is something wrong with this one. I asked a friend to
compile-test it on an ARM box with NEON, and it worked fine, but when I
compile on RPi, I get:

  CPPAS  pixman-arm-simd-asm.lo
pixman-arm-simd-asm.h: Assembler messages:
pixman-arm-simd-asm.h:563: Error: bad instruction `pixman_asm_function pixman_composite_src_8888_8888_asm_armv6'
pixman-arm-simd-asm.h:660: Error: missing .func

And I've no idea what it's about. Maybe the assembler cannot expand
nested macros?

So, ignore this patch for the moment.


Thanks,
pq


More information about the Pixman mailing list