Your message dated Thu, 2 Jan 2025 06:00:22 +0900
with message-id <20250101210022.ul66qhyyuhdvg...@glandium.org>
and subject line Re: Bug#1073870: as: Error: garbage following instruction -- 
`bne 01f' (firefox FTBFS on armhf)
has caused the Debian Bug report #1073870,
regarding as: Error: garbage following instruction -- `bne 01f' (firefox FTBFS 
on armhf)
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1073870: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1073870
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: binutils
Version: 2.42.50.20240618-1
Severity: important

Dear Maintainer,

Firefox is failing to build with a mountain of errors that start with:

/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:823: Error: 
garbage following instruction -- `bne 01f'
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:871:  Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:326:   Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:343:    Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:354:     Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:408:      Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:793:       Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S:877:        
Info: macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:824: Error: 
garbage following instruction -- `bcc 03f'
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:871:  Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:326:   Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:343:    Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:354:     Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:408:      Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h:793:       Info: 
macro invoked from here
/<<PKGBUILDDIR>>/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S:877:        
Info: macro invoked from here

See the buildd log 
https://buildd.debian.org/status/fetch.php?pkg=firefox&arch=armhf&ver=127.0.1-1&stamp=1718848469&raw=0

This does *NOT* happen with binutils 2.42-4 from testing.

I'm attaching the preprocessed assembly file that triggers the problem.

Command line: as --gdwarf-5 -march=armv7-a+fp -mfloat-abi=hard -meabi=5 
--noexecstack -o pixman-arm-simd-asm.o pixman-arm-simd-asm.s

Mike
# 0 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
# 1 "/home/glandium/firefox-127.0.1/build-browser/gfx/cairo/libpixman/src//"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "/home/glandium/firefox-127.0.1/build-browser/mozilla-config.h" 1
# 0 "<command-line>" 2
# 1 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
# 30 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.section .note.GNU-stack,"",%progbits


 .text
 .arch armv6
 .object_arch armv4
 .arm
 .altmacro
 .p2align 2

# 1 "/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-asm.h" 1
# 33 "/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-asm.h"
.macro pixman_asm_function_impl fname



 .global \fname

 .hidden \fname
 .type \fname, %function

\fname:
.endm

.macro pixman_asm_function fname



 pixman_asm_function_impl \fname

.endm

.macro pixman_syntax_unified

 .syntax unified

.endm

.macro pixman_end_asm_function



.endm
# 41 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S" 2
# 1 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h" 1
# 65 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h"
.set FLAG_DST_WRITEONLY, 0
.set FLAG_DST_READWRITE, 1
.set FLAG_COND_EXEC, 0
.set FLAG_BRANCH_OVER, 2
.set FLAG_PROCESS_PRESERVES_PSR, 0
.set FLAG_PROCESS_CORRUPTS_PSR, 4
.set FLAG_PROCESS_DOESNT_STORE, 0
.set FLAG_PROCESS_DOES_STORE, 8
.set FLAG_NO_SPILL_LINE_VARS, 0
.set FLAG_SPILL_LINE_VARS_WIDE, 16
.set FLAG_SPILL_LINE_VARS_NON_WIDE, 32
.set FLAG_SPILL_LINE_VARS, 48
.set FLAG_PROCESS_CORRUPTS_SCRATCH, 0
.set FLAG_PROCESS_PRESERVES_SCRATCH, 64
.set FLAG_PROCESS_PRESERVES_WK0, 0
.set FLAG_PROCESS_CORRUPTS_WK0, 128
.set FLAG_PRELOAD_DST, 0
.set FLAG_NO_PRELOAD_DST, 256





.set DST_PRELOAD_BIAS, 0







.set ARGS_STACK_OFFSET, (9*4)





.set LOCALS_STACK_OFFSET, 0




.set PREFETCH_TYPE_NONE, 0
.set PREFETCH_TYPE_STANDARD, 1





.macro pixldst op, cond=al, numbytes, reg0, reg1, reg2, reg3, base, unaligned=0
 .if \numbytes == 16
  .if \unaligned == 1
        \op\()r\()\cond WK\()\reg0, [\base], #4
        \op\()r\()\cond WK\()\reg1, [\base], #4
        \op\()r\()\cond WK\()\reg2, [\base], #4
        \op\()r\()\cond WK\()\reg3, [\base], #4
  .else
        \op\()mia\()\cond \base!, {WK\()\reg0,WK\()\reg1,WK\()\reg2,WK\()\reg3}
  .endif
 .elseif \numbytes == 8
  .if \unaligned == 1
        \op\()r\()\cond WK\()\reg0, [\base], #4
        \op\()r\()\cond WK\()\reg1, [\base], #4
  .else
        \op\()mia\()\cond \base!, {WK\()\reg0,WK\()\reg1}
  .endif
 .elseif \numbytes == 4
        \op\()r\()\cond WK\()\reg0, [\base], #4
 .elseif \numbytes == 2
        \op\()rh\()\cond WK\()\reg0, [\base], #2
 .elseif \numbytes == 1
        \op\()rb\()\cond WK\()\reg0, [\base], #1
 .else
  .error "unsupported size: \numbytes"
 .endif
.endm

.macro pixst_baseupdated cond, numbytes, reg0, reg1, reg2, reg3, base
 .if \numbytes == 16
        stm\()\cond\()db \base, {WK\()\reg0,WK\()\reg1,WK\()\reg2,WK\()\reg3}
 .elseif \numbytes == 8
        stmdb\()\cond \base, {WK\()\reg0,WK\()\reg1}
 .elseif \numbytes == 4
        str\()\cond WK\()\reg0, [\base, #-4]
 .elseif \numbytes == 2
        strh\()\cond WK\()\reg0, [\base, #-2]
 .elseif \numbytes == 1
        strb\()\cond WK\()\reg0, [\base, #-1]
 .else
  .error "unsupported size: \numbytes"
 .endif
.endm

.macro pixld cond, numbytes, firstreg, base, unaligned
        pixldst ld, \cond, \numbytes, %(\firstreg+0), %(\firstreg+1), 
%(\firstreg+2), %(\firstreg+3), \base, \unaligned
.endm

.macro pixst cond, numbytes, firstreg, base
 .if (flags) & FLAG_DST_READWRITE
        pixst_baseupdated \cond, \numbytes, %(\firstreg+0), %(\firstreg+1), 
%(\firstreg+2), %(\firstreg+3), \base
 .else
        pixldst st, \cond, \numbytes, %(\firstreg+0), %(\firstreg+1), 
%(\firstreg+2), %(\firstreg+3), \base
 .endif
.endm

.macro PF a, x:vararg
 .if (PREFETCH_TYPE_CURRENT == PREFETCH_TYPE_STANDARD)
        \a \x
 .endif
.endm


.macro preload_leading_step1 bpp, ptr, base




 .if \bpp > 0
        PF bic, \ptr, \base, #31
  .set OFFSET, 0
  .rept prefetch_distance+1
        PF pld, [\ptr, #OFFSET]
   .set OFFSET, OFFSET+32
  .endr
 .endif
.endm

.macro preload_leading_step2 bpp, bpp_shift, ptr, base
# 204 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h"
 .if \bpp > 0
  .ifc \base,DST

        PF tst, \base, #16
        PF beq, 61f
  .else
   .if \bpp/dst_w_bpp == 4
        PF add, SCRATCH, \base, WK0, lsl #\bpp_shift-dst_bpp_shift
        PF and, SCRATCH, SCRATCH, #31
        PF rsb, SCRATCH, SCRATCH, WK0, lsl #\bpp_shift-dst_bpp_shift
        PF sub, SCRATCH, SCRATCH, #1
        PF movs, SCRATCH, SCRATCH, lsl #32-6
        PF bcs, 61f
        PF bpl, 60f
        PF pld, [ptr, #32*(prefetch_distance+2)]
   .else
        PF mov, SCRATCH, \base, lsl #32-5
        PF add, SCRATCH, SCRATCH, WK0, lsl #32-5+\bpp_shift-dst_bpp_shift
        PF rsbs, SCRATCH, SCRATCH, WK0, lsl #32-5+\bpp_shift-dst_bpp_shift
        PF bls, 61f
   .endif
  .endif
60: PF pld, [\ptr, #32*(prefetch_distance+1)]
61:
 .endif
.endm


.macro preload_middle bpp, base, scratch_holds_offset
 .if \bpp > 0

  .if ((256/128*dst_w_bpp/\bpp) < 2 || ((SUBBLOCK) & ~((SUBBLOCK)+1)) & 
((256/128*dst_w_bpp/\bpp)/2))
   .if \scratch_holds_offset
        PF pld, [\base, SCRATCH]
   .else
        PF bic, SCRATCH, \base, #31
        PF pld, [SCRATCH, #32*prefetch_distance]
   .endif
  .endif
 .endif
.endm

.macro preload_trailing bpp, bpp_shift, base
 .if \bpp > 0
  .if \bpp*pix_per_block > 256

        PF and, WK1, \base, #31
        PF add, WK1, WK1, WK0, lsl #\bpp_shift
        PF add, WK1, WK1, #32*(\bpp*pix_per_block/256-1)*(prefetch_distance+1)
        PF bic, SCRATCH, \base, #31
80: PF pld, [SCRATCH, #32*(prefetch_distance+1)]
        PF add, SCRATCH, SCRATCH, #32
        PF subs, WK1, WK1, #32
        PF bhi, 80b
  .else

        PF mov, SCRATCH, \base, lsl #32-5
        PF adds, SCRATCH, SCRATCH, X, lsl #32-5+\bpp_shift
        PF adcseq, SCRATCH, SCRATCH, #0




        PF beq, 82f
        PF bic, SCRATCH, \base, #31
        PF bcc, 81f
        PF pld, [SCRATCH, #32*(prefetch_distance+2)]
81: PF pld, [SCRATCH, #32*(prefetch_distance+1)]
82:
  .endif
 .endif
.endm


.macro preload_line narrow_case, bpp, bpp_shift, base
# 291 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h"
 .if \bpp > 0
  .if \narrow_case && (\bpp <= dst_w_bpp)

        PF bic, WK0, \base, #31
        PF pld, [WK0]
        PF add, WK1, \base, X, LSL #\bpp_shift
        PF sub, WK1, WK1, #1
        PF bic, WK1, WK1, #31
        PF cmp, WK1, WK0
        PF beq, 90f
        PF pld, [WK1]
90:
  .else
        PF bic, WK0, \base, #31
        PF pld, [WK0]
        PF add, WK1, \base, X, lsl #\bpp_shift
        PF sub, WK1, WK1, #1
        PF bic, WK1, WK1, #31
        PF cmp, WK1, WK0
        PF beq, 92f
91: PF add, WK0, WK0, #32
        PF cmp, WK0, WK1
        PF pld, [WK0]
        PF bne, 91b
92:
  .endif
 .endif
.endm


.macro conditional_process1_helper cond, process_head, process_tail, numbytes, 
firstreg, unaligned_src, unaligned_mask, decrementx
        \process_head \cond, \numbytes, \firstreg, \unaligned_src, 
\unaligned_mask, 0
 .if \decrementx
        sub\()\cond X, X, #8*\numbytes/dst_w_bpp
 .endif
        \process_tail \cond, \numbytes, \firstreg
 .if !((flags) & FLAG_PROCESS_DOES_STORE)
        pixst \cond, \numbytes, \firstreg, DST
 .endif
.endm

.macro conditional_process1 cond, process_head, process_tail, numbytes, 
firstreg, unaligned_src, unaligned_mask, decrementx
 .if (flags) & FLAG_BRANCH_OVER
  .ifc \cond,mi
        bpl 100f
  .endif
  .ifc \cond,cs
        bcc 100f
  .endif
  .ifc \cond,ne
        beq 100f
  .endif
        conditional_process1_helper , \process_head, \process_tail, \numbytes, 
\firstreg, \unaligned_src, \unaligned_mask, \decrementx
100:
 .else
        conditional_process1_helper \cond, \process_head, \process_tail, 
\numbytes, \firstreg, \unaligned_src, \unaligned_mask, \decrementx
 .endif
.endm

.macro conditional_process2 test, cond1, cond2, process_head, process_tail, 
numbytes1, numbytes2, firstreg1, firstreg2, unaligned_src, unaligned_mask, 
decrementx
 .if (flags) & (FLAG_DST_READWRITE | FLAG_BRANCH_OVER | 
FLAG_PROCESS_CORRUPTS_PSR | FLAG_PROCESS_DOES_STORE)

        \test
        conditional_process1 \cond1, \process_head, \process_tail, \numbytes1, 
\firstreg1, \unaligned_src, \unaligned_mask, \decrementx
  .if (flags) & FLAG_PROCESS_CORRUPTS_PSR
        \test
  .endif
        conditional_process1 \cond2, \process_head, \process_tail, \numbytes2, 
\firstreg2, \unaligned_src, \unaligned_mask, \decrementx
 .else

        \test
        \process_head \cond1, \numbytes1, \firstreg1, \unaligned_src, 
\unaligned_mask, 0
        \process_head \cond2, \numbytes2, \firstreg2, \unaligned_src, 
\unaligned_mask, 0
  .if \decrementx
        sub\()\cond1 X, X, #8*\numbytes1/dst_w_bpp
        sub\()\cond2 X, X, #8*\numbytes2/dst_w_bpp
  .endif
        \process_tail \cond1, \numbytes1, \firstreg1
        \process_tail \cond2, \numbytes2, \firstreg2
        pixst \cond1, \numbytes1, \firstreg1, DST
        pixst \cond2, \numbytes2, \firstreg2, DST
 .endif
.endm


.macro test_bits_1_0_ptr
 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
        movs SCRATCH, X, lsl #32-1
 .else
        movs SCRATCH, WK0, lsl #32-1
 .endif
.endm

.macro test_bits_3_2_ptr
 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
        movs SCRATCH, X, lsl #32-3
 .else
        movs SCRATCH, WK0, lsl #32-3
 .endif
.endm

.macro leading_15bytes process_head, process_tail

 .set DECREMENT_X, 1
 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
  .set DECREMENT_X, 0
        sub X, X, WK0, lsr #dst_bpp_shift
        str X, [sp, #LINE_SAVED_REG_COUNT*4]
        mov X, WK0
 .endif

 .if dst_w_bpp == 8
        conditional_process2 test_bits_1_0_ptr, mi, cs, \process_head, 
\process_tail, 1, 2, 1, 2, 1, 1, DECREMENT_X
 .elseif dst_w_bpp == 16
        test_bits_1_0_ptr
        conditional_process1 cs, \process_head, \process_tail, 2, 2, 1, 1, 
DECREMENT_X
 .endif
        conditional_process2 test_bits_3_2_ptr, mi, cs, \process_head, 
\process_tail, 4, 8, 1, 2, 1, 1, DECREMENT_X
 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
        ldr X, [sp, #LINE_SAVED_REG_COUNT*4]
 .endif
.endm

.macro test_bits_3_2_pix
        movs SCRATCH, X, lsl #dst_bpp_shift+32-3
.endm

.macro test_bits_1_0_pix
 .if dst_w_bpp == 8
        movs SCRATCH, X, lsl #dst_bpp_shift+32-1
 .else
        movs SCRATCH, X, lsr #1
 .endif
.endm

.macro trailing_15bytes process_head, process_tail, unaligned_src, 
unaligned_mask
        conditional_process2 test_bits_3_2_pix, cs, mi, \process_head, 
\process_tail, 8, 4, 0, 2, \unaligned_src, \unaligned_mask, 0
 .if dst_w_bpp == 16
        test_bits_1_0_pix
        conditional_process1 cs, \process_head, \process_tail, 2, 0, 
\unaligned_src, \unaligned_mask, 0
 .elseif dst_w_bpp == 8
        conditional_process2 test_bits_1_0_pix, cs, mi, \process_head, 
\process_tail, 2, 1, 0, 1, \unaligned_src, \unaligned_mask, 0
 .endif
.endm


.macro wide_case_inner_loop process_head, process_tail, unaligned_src, 
unaligned_mask, dst_alignment
110:
 .set SUBBLOCK, 0
 .rept pix_per_block*dst_w_bpp/128
        \process_head , 16, 0, \unaligned_src, \unaligned_mask, 1
  .if (src_bpp > 0) && (mask_bpp == 0) && ((flags) & 
FLAG_PROCESS_PRESERVES_SCRATCH)
        preload_middle src_bpp, SRC, 1
  .elseif (src_bpp == 0) && (mask_bpp > 0) && ((flags) & 
FLAG_PROCESS_PRESERVES_SCRATCH)
        preload_middle mask_bpp, MASK, 1
  .else
        preload_middle src_bpp, SRC, 0
        preload_middle mask_bpp, MASK, 0
  .endif
  .if (dst_r_bpp > 0) && ((SUBBLOCK % 2) == 0) && (((flags) & 
FLAG_NO_PRELOAD_DST) == 0)





        PF pld, [DST, #32*prefetch_distance - \dst_alignment]
  .endif
        \process_tail , 16, 0
  .if !((flags) & FLAG_PROCESS_DOES_STORE)
        pixst , 16, 0, DST
  .endif
  .set SUBBLOCK, SUBBLOCK+1
 .endr
        subs X, X, #pix_per_block
        bhs 110b
.endm

.macro wide_case_inner_loop_and_trailing_pixels process_head, process_tail, 
process_inner_loop, exit_label, unaligned_src, unaligned_mask

 .if dst_r_bpp > 0
        tst DST, #16
        bne 111f
        \process_inner_loop \process_head, \process_tail, \unaligned_src, 
\unaligned_mask, 16 + DST_PRELOAD_BIAS
        b 112f
111:
 .endif
        \process_inner_loop \process_head, \process_tail, \unaligned_src, 
\unaligned_mask, 0 + DST_PRELOAD_BIAS
112:

 .if (src_bpp*pix_per_block > 256) || (mask_bpp*pix_per_block > 256) || 
(dst_r_bpp*pix_per_block > 256)
        PF and, WK0, X, #pix_per_block-1
 .endif
        preload_trailing src_bpp, src_bpp_shift, SRC
        preload_trailing mask_bpp, mask_bpp_shift, MASK
 .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
        preload_trailing dst_r_bpp, dst_bpp_shift, DST
 .endif
        add X, X, #(prefetch_distance+2)*pix_per_block - 128/dst_w_bpp

        medium_case_inner_loop_and_trailing_pixels \process_head, 
\process_tail,, \exit_label, \unaligned_src, \unaligned_mask
.endm

.macro medium_case_inner_loop_and_trailing_pixels process_head, process_tail, 
unused, exit_label, unaligned_src, unaligned_mask
120:
        \process_head , 16, 0, \unaligned_src, \unaligned_mask, 0
        \process_tail , 16, 0
 .if !((flags) & FLAG_PROCESS_DOES_STORE)
        pixst , 16, 0, DST
 .endif
        subs X, X, #128/dst_w_bpp
        bhs 120b

        tst X, #128/dst_w_bpp - 1
        beq \exit_label
        trailing_15bytes \process_head, \process_tail, \unaligned_src, 
\unaligned_mask
.endm

.macro narrow_case_inner_loop_and_trailing_pixels process_head, process_tail, 
unused, exit_label, unaligned_src, unaligned_mask
        tst X, #16*8/dst_w_bpp
        conditional_process1 ne, \process_head, \process_tail, 16, 0, 
\unaligned_src, \unaligned_mask, 0


        trailing_15bytes \process_head, \process_tail, \unaligned_src, 
\unaligned_mask
.endm

.macro switch_on_alignment action, process_head, process_tail, 
process_inner_loop, exit_label

 .if mask_bpp == 8 || mask_bpp == 16
        tst MASK, #3
        bne 141f
 .endif
  .if src_bpp == 8 || src_bpp == 16
        tst SRC, #3
        bne 140f
  .endif
        \action \process_head, \process_tail, \process_inner_loop, \exit_label, 
0, 0
  .if src_bpp == 8 || src_bpp == 16
        b \exit_label
140:
        \action \process_head, \process_tail, \process_inner_loop, \exit_label, 
1, 0
  .endif
 .if mask_bpp == 8 || mask_bpp == 16
        b \exit_label
141:
  .if src_bpp == 8 || src_bpp == 16
        tst SRC, #3
        bne 142f
  .endif
        \action \process_head, \process_tail, \process_inner_loop, \exit_label, 
0, 1
  .if src_bpp == 8 || src_bpp == 16
        b \exit_label
142:
        \action \process_head, \process_tail, \process_inner_loop, \exit_label, 
1, 1
  .endif
 .endif
.endm


.macro end_of_line restore_x, vars_spilled, loop_label, last_one
 .if \vars_spilled


        .word 0xE89D0000 | LINE_SAVED_REGS
 .endif
        subs Y, Y, #1
 .if \vars_spilled
  .if (LINE_SAVED_REGS) & (1<<1)
        str Y, [sp]
  .endif
 .endif
        add DST, DST, STRIDE_D
 .if src_bpp > 0
        add SRC, SRC, STRIDE_S
 .endif
 .if mask_bpp > 0
        add MASK, MASK, STRIDE_M
 .endif
 .if \restore_x
        mov X, ORIG_W
 .endif
        bhs \loop_label
 .ifc "\last_one",""
  .if \vars_spilled
        b 197f
  .else
        b 198f
  .endif
 .else
  .if (!\vars_spilled) && ((flags) & FLAG_SPILL_LINE_VARS)
        b 198f
  .endif
 .endif
.endm


.macro generate_composite_function fname, src_bpp_, mask_bpp_, dst_w_bpp_, 
flags_, prefetch_distance_, init, newline, cleanup, process_head, process_tail, 
process_inner_loop
# 599 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h"
    pixman_asm_function \fname





 .set src_bpp, \src_bpp_
 .set mask_bpp, \mask_bpp_
 .set dst_w_bpp, \dst_w_bpp_
 .set flags, \flags_
 .set prefetch_distance, \prefetch_distance_




 .if prefetch_distance == 0
  .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_NONE
 .else
  .set PREFETCH_TYPE_CURRENT, PREFETCH_TYPE_STANDARD
 .endif

 .if src_bpp == 32
  .set src_bpp_shift, 2
 .elseif src_bpp == 24
  .set src_bpp_shift, 0
 .elseif src_bpp == 16
  .set src_bpp_shift, 1
 .elseif src_bpp == 8
  .set src_bpp_shift, 0
 .elseif src_bpp == 0
  .set src_bpp_shift, -1
 .else
  .error "requested src bpp (src_bpp) is not supported"
 .endif

 .if mask_bpp == 32
  .set mask_bpp_shift, 2
 .elseif mask_bpp == 24
  .set mask_bpp_shift, 0
 .elseif mask_bpp == 8
  .set mask_bpp_shift, 0
 .elseif mask_bpp == 0
  .set mask_bpp_shift, -1
 .else
  .error "requested mask bpp (mask_bpp) is not supported"
 .endif

 .if dst_w_bpp == 32
  .set dst_bpp_shift, 2
 .elseif dst_w_bpp == 24
  .set dst_bpp_shift, 0
 .elseif dst_w_bpp == 16
  .set dst_bpp_shift, 1
 .elseif dst_w_bpp == 8
  .set dst_bpp_shift, 0
 .else
  .error "requested dst bpp (dst_w_bpp) is not supported"
 .endif

 .if (((flags) & FLAG_DST_READWRITE) != 0)
  .set dst_r_bpp, dst_w_bpp
 .else
  .set dst_r_bpp, 0
 .endif

 .set pix_per_block, 16*8/dst_w_bpp
 .if src_bpp != 0
  .if 32*8/src_bpp > pix_per_block
   .set pix_per_block, 32*8/src_bpp
  .endif
 .endif
 .if mask_bpp != 0
  .if 32*8/mask_bpp > pix_per_block
   .set pix_per_block, 32*8/mask_bpp
  .endif
 .endif
 .if dst_r_bpp != 0
  .if 32*8/dst_r_bpp > pix_per_block
   .set pix_per_block, 32*8/dst_r_bpp
  .endif
 .endif
# 696 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.h"
    X .req r0
    Y .req r1
    DST .req r2
    STRIDE_D .req r3
    SRC .req r4
    STRIDE_S .req r5
    MASK .req r6
    STRIDE_M .req r7
    WK0 .req r8
    WK1 .req r9
    WK2 .req r10
    WK3 .req r11
    SCRATCH .req r12
    ORIG_W .req r14

        push {r4-r11, lr}

        subs Y, Y, #1
        blo 199f





 .if src_bpp > 0
        ldr SRC, [sp, #ARGS_STACK_OFFSET]
        ldr STRIDE_S, [sp, #ARGS_STACK_OFFSET+4]
 .endif
 .if mask_bpp > 0
        ldr MASK, [sp, #ARGS_STACK_OFFSET+8]
        ldr STRIDE_M, [sp, #ARGS_STACK_OFFSET+12]
 .endif







        \init

 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0

        sub sp, sp, #4
  .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET+4
  .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET+4
 .endif

        lsl STRIDE_D, #dst_bpp_shift
        sub STRIDE_D, STRIDE_D, X, lsl #dst_bpp_shift
 .if src_bpp > 0
        lsl STRIDE_S, #src_bpp_shift
        sub STRIDE_S, STRIDE_S, X, lsl #src_bpp_shift
 .endif
 .if mask_bpp > 0
        lsl STRIDE_M, #mask_bpp_shift
        sub STRIDE_M, STRIDE_M, X, lsl #mask_bpp_shift
 .endif


        cmp X, #2*16*8/dst_w_bpp - 1
        blo 170f
 .if src_bpp || mask_bpp || dst_r_bpp

        cmp X, #(prefetch_distance+3)*pix_per_block - 1
        blo 160f





        sub X, X, #(prefetch_distance+2)*pix_per_block
        mov ORIG_W, X
  .if (flags) & FLAG_SPILL_LINE_VARS_WIDE

        .word 0xE92D0000 | LINE_SAVED_REGS
   .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
   .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
  .endif
151:
        \newline
        preload_leading_step1 src_bpp, WK1, SRC
        preload_leading_step1 mask_bpp, WK2, MASK
  .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
        preload_leading_step1 dst_r_bpp, WK3, DST
  .endif

        ands WK0, DST, #15
        beq 154f
        rsb WK0, WK0, #16

        preload_leading_step2 src_bpp, src_bpp_shift, WK1, SRC
        preload_leading_step2 mask_bpp, mask_bpp_shift, WK2, MASK
  .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
        preload_leading_step2 dst_r_bpp, dst_bpp_shift, WK3, DST
  .endif

        leading_15bytes \process_head, \process_tail

154:
  .if (src_bpp > 0) && (mask_bpp == 0) && ((flags) & 
FLAG_PROCESS_PRESERVES_SCRATCH)
        and SCRATCH, SRC, #31
        rsb SCRATCH, SCRATCH, #32*prefetch_distance
  .elseif (src_bpp == 0) && (mask_bpp > 0) && ((flags) & 
FLAG_PROCESS_PRESERVES_SCRATCH)
        and SCRATCH, MASK, #31
        rsb SCRATCH, SCRATCH, #32*prefetch_distance
  .endif
  .ifc "\process_inner_loop",""
        switch_on_alignment wide_case_inner_loop_and_trailing_pixels, 
\process_head, \process_tail, wide_case_inner_loop, 157f
  .else
        switch_on_alignment wide_case_inner_loop_and_trailing_pixels, 
\process_head, \process_tail, \process_inner_loop, 157f
  .endif

157:
        end_of_line 1, %((flags) & FLAG_SPILL_LINE_VARS_WIDE), 151b
  .if (flags) & FLAG_SPILL_LINE_VARS_WIDE
   .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
   .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
  .endif
 .endif

 .ltorg

160:
        mov ORIG_W, X
 .if (flags) & FLAG_SPILL_LINE_VARS_NON_WIDE

        .word 0xE92D0000 | LINE_SAVED_REGS
  .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
  .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET + LINE_SAVED_REG_COUNT*4
 .endif
161:
        \newline
        preload_line 0, src_bpp, src_bpp_shift, SRC
        preload_line 0, mask_bpp, mask_bpp_shift, MASK
 .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
        preload_line 0, dst_r_bpp, dst_bpp_shift, DST
 .endif

        sub X, X, #128/dst_w_bpp
        ands WK0, DST, #15
        beq 164f
        rsb WK0, WK0, #16

        leading_15bytes \process_head, \process_tail

164:
        switch_on_alignment medium_case_inner_loop_and_trailing_pixels, 
\process_head, \process_tail,, 167f

167:
        end_of_line 1, %((flags) & FLAG_SPILL_LINE_VARS_NON_WIDE), 161b

 .ltorg

170:
 .if dst_w_bpp < 32
        mov ORIG_W, X
 .endif
 .if (flags) & FLAG_SPILL_LINE_VARS_NON_WIDE

        .word 0xE92D0000 | LINE_SAVED_REGS
 .endif
171:
        \newline
        preload_line 1, src_bpp, src_bpp_shift, SRC
        preload_line 1, mask_bpp, mask_bpp_shift, MASK
 .if ((flags) & FLAG_NO_PRELOAD_DST) == 0
        preload_line 1, dst_r_bpp, dst_bpp_shift, DST
 .endif

 .if dst_w_bpp == 8
        tst DST, #3
        beq 174f
172: subs X, X, #1
        blo 177f
        \process_head , 1, 0, 1, 1, 0
        \process_tail , 1, 0
  .if !((flags) & FLAG_PROCESS_DOES_STORE)
        pixst , 1, 0, DST
  .endif
        tst DST, #3
        bne 172b
 .elseif dst_w_bpp == 16
        tst DST, #2
        beq 174f
        subs X, X, #1
        blo 177f
        \process_head , 2, 0, 1, 1, 0
        \process_tail , 2, 0
  .if !((flags) & FLAG_PROCESS_DOES_STORE)
        pixst , 2, 0, DST
  .endif
 .endif

174:
        switch_on_alignment narrow_case_inner_loop_and_trailing_pixels, 
\process_head, \process_tail,, 177f

177:
        end_of_line %(dst_w_bpp < 32), %((flags) & 
FLAG_SPILL_LINE_VARS_NON_WIDE), 171b, last_one
 .if (flags) & FLAG_SPILL_LINE_VARS_NON_WIDE
  .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
  .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET - LINE_SAVED_REG_COUNT*4
 .endif

197:
 .if (flags) & FLAG_SPILL_LINE_VARS
        add sp, sp, #LINE_SAVED_REG_COUNT*4
 .endif
198:
 .if (flags) & FLAG_PROCESS_CORRUPTS_WK0
  .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET-4
  .set LOCALS_STACK_OFFSET, LOCALS_STACK_OFFSET-4
        add sp, sp, #4
 .endif

        \cleanup




199:
        pop {r4-r11, pc}

 .ltorg

    .unreq X
    .unreq Y
    .unreq DST
    .unreq STRIDE_D
    .unreq SRC
    .unreq STRIDE_S
    .unreq MASK
    .unreq STRIDE_M
    .unreq WK0
    .unreq WK1
    .unreq WK2
    .unreq WK3
    .unreq SCRATCH
    .unreq ORIG_W
    pixman_end_asm_function
.endm

.macro line_saved_regs x:vararg
 .set LINE_SAVED_REGS, 0
 .set LINE_SAVED_REG_COUNT, 0
 .irp SAVED_REG,\x
  .ifc "SAVED_REG","Y"
   .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<1)
   .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
  .endif
  .ifc "SAVED_REG","STRIDE_D"
   .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<3)
   .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
  .endif
  .ifc "SAVED_REG","STRIDE_S"
   .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<5)
   .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
  .endif
  .ifc "SAVED_REG","STRIDE_M"
   .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<7)
   .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
  .endif
  .ifc "SAVED_REG","ORIG_W"
   .set LINE_SAVED_REGS, LINE_SAVED_REGS | (1<<14)
   .set LINE_SAVED_REG_COUNT, LINE_SAVED_REG_COUNT + 1
  .endif
 .endr
.endm

.macro nop_macro x:vararg
.endm
# 42 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S" 2

 pixman_syntax_unified
# 57 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro blit_init
        line_saved_regs STRIDE_D, STRIDE_S
.endm

.macro blit_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
        pixld \cond, \numbytes, \firstreg, SRC, \unaligned_src
.endm

.macro blit_inner_loop process_head, process_tail, unaligned_src, 
unaligned_mask, dst_alignment
    WK4 .req STRIDE_D
    WK5 .req STRIDE_S
    WK6 .req MASK
    WK7 .req STRIDE_M
110: pixld , 16, 0, SRC, \unaligned_src
        pixld , 16, 4, SRC, \unaligned_src
        pld [SRC, SCRATCH]
        pixst , 16, 0, DST
        pixst , 16, 4, DST
        subs X, X, #32*8/src_bpp
        bhs 110b
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

generate_composite_function pixman_composite_src_8888_8888_asm_armv6, 32, 0, 
32, FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_SPILL_LINE_VARS_WIDE | 
FLAG_PROCESS_PRESERVES_SCRATCH, 4, blit_init, nop_macro, nop_macro, 
blit_process_head, nop_macro, blit_inner_loop
# 94 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
generate_composite_function pixman_composite_src_0565_0565_asm_armv6, 16, 0, 
16, FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_SPILL_LINE_VARS_WIDE | 
FLAG_PROCESS_PRESERVES_SCRATCH, 4, blit_init, nop_macro, nop_macro, 
blit_process_head, nop_macro, blit_inner_loop
# 105 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
generate_composite_function pixman_composite_src_8_8_asm_armv6, 8, 0, 8, 
FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_SPILL_LINE_VARS_WIDE | 
FLAG_PROCESS_PRESERVES_SCRATCH, 3, blit_init, nop_macro, nop_macro, 
blit_process_head, nop_macro, blit_inner_loop
# 118 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro src_n_8888_init
        ldr SRC, [sp, #ARGS_STACK_OFFSET]
        mov STRIDE_S, SRC
        mov MASK, SRC
        mov STRIDE_M, SRC
.endm

.macro src_n_0565_init
        ldrh SRC, [sp, #ARGS_STACK_OFFSET]
        orr SRC, SRC, SRC, lsl #16
        mov STRIDE_S, SRC
        mov MASK, SRC
        mov STRIDE_M, SRC
.endm

.macro src_n_8_init
        ldrb SRC, [sp, #ARGS_STACK_OFFSET]
        orr SRC, SRC, SRC, lsl #8
        orr SRC, SRC, SRC, lsl #16
        mov STRIDE_S, SRC
        mov MASK, SRC
        mov STRIDE_M, SRC
.endm

.macro fill_process_tail cond, numbytes, firstreg
    WK4 .req SRC
    WK5 .req STRIDE_S
    WK6 .req MASK
    WK7 .req STRIDE_M
        pixst \cond, \numbytes, 4, DST
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

generate_composite_function pixman_composite_src_n_8888_asm_armv6, 0, 0, 32, 
FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH 0, src_n_8888_init 
nop_macro, nop_macro nop_macro fill_process_tail
# 164 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
generate_composite_function pixman_composite_src_n_0565_asm_armv6, 0, 0, 16, 
FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH 0, src_n_0565_init 
nop_macro, nop_macro nop_macro fill_process_tail
# 174 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
generate_composite_function pixman_composite_src_n_8_asm_armv6, 0, 0, 8, 
FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_PROCESS_PRESERVES_SCRATCH 0, src_n_8_init 
nop_macro, nop_macro nop_macro fill_process_tail
# 186 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro src_x888_8888_pixel, cond, reg
        orr\()\cond WK\()\reg, WK\()\reg, #0xFF000000
.endm

.macro pixman_composite_src_x888_8888_process_head cond, numbytes, firstreg, 
unaligned_src, unaligned_mask, preload
        pixld \cond, \numbytes, \firstreg, SRC, \unaligned_src
.endm

.macro pixman_composite_src_x888_8888_process_tail cond, numbytes, firstreg
        src_x888_8888_pixel \cond, %(\firstreg+0)
 .if \numbytes >= 8
        src_x888_8888_pixel \cond, %(\firstreg+1)
  .if \numbytes == 16
        src_x888_8888_pixel \cond, %(\firstreg+2)
        src_x888_8888_pixel \cond, %(\firstreg+3)
  .endif
 .endif
.endm

generate_composite_function pixman_composite_src_x888_8888_asm_armv6, 32, 0, 
32, FLAG_DST_WRITEONLY | FLAG_COND_EXEC | FLAG_PROCESS_PRESERVES_SCRATCH, 3, 
nop_macro, nop_macro, nop_macro, pixman_composite_src_x888_8888_process_head, 
pixman_composite_src_x888_8888_process_tail
# 217 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro src_0565_8888_init

        ldr MASK, =0x07E007E0
        mov STRIDE_M, #0xFF000000

        ldr SCRATCH, =0x80008000
        uadd8 SCRATCH, SCRATCH, SCRATCH
.endm

.macro src_0565_8888_2pixels, reg1, reg2
        and SCRATCH, WK\()\reg1, MASK @ 00000GGGGGG0000000000gggggg00000
        bic WK\()\reg2, WK\()\reg1, MASK @ RRRRR000000BBBBBrrrrr000000bbbbb
        orr SCRATCH, SCRATCH, SCRATCH, lsr #6 @ 00000GGGGGGGGGGGG0000ggggggggggg
        mov WK\()\reg1, WK\()\reg2, lsl #16 @ rrrrr000000bbbbb0000000000000000
        mov SCRATCH, SCRATCH, ror #19 @ GGGG0000ggggggggggg00000GGGGGGGG
        bic WK\()\reg2, WK\()\reg2, WK\()\reg1, lsr #16 @ 
RRRRR000000BBBBB0000000000000000
        orr WK\()\reg1, WK\()\reg1, WK\()\reg1, lsr #5 @ 
rrrrrrrrrr0bbbbbbbbbb00000000000
        orr WK\()\reg2, WK\()\reg2, WK\()\reg2, lsr #5 @ 
RRRRRRRRRR0BBBBBBBBBB00000000000
        pkhtb WK\()\reg1, WK\()\reg1, WK\()\reg1, asr #5 @ 
rrrrrrrr--------bbbbbbbb--------
        sel WK\()\reg1, WK\()\reg1, SCRATCH @ rrrrrrrrggggggggbbbbbbbb--------
        mov SCRATCH, SCRATCH, ror #16 @ ggg00000GGGGGGGGGGGG0000gggggggg
        pkhtb WK\()\reg2, WK\()\reg2, WK\()\reg2, asr #5 @ 
RRRRRRRR--------BBBBBBBB--------
        sel WK\()\reg2, WK\()\reg2, SCRATCH @ RRRRRRRRGGGGGGGGBBBBBBBB--------
        orr WK\()\reg1, STRIDE_M, WK\()\reg1, lsr #8 @ 
11111111rrrrrrrrggggggggbbbbbbbb
        orr WK\()\reg2, STRIDE_M, WK\()\reg2, lsr #8 @ 
11111111RRRRRRRRGGGGGGGGBBBBBBBB
.endm
# 264 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro src_0565_8888_1pixel, reg
        bic SCRATCH, WK\()\reg, MASK @ 0000000000000000rrrrr000000bbbbb
        and WK\()\reg, WK\()\reg, MASK @ 000000000000000000000gggggg00000
        mov SCRATCH, SCRATCH, lsl #3 @ 0000000000000rrrrr000000bbbbb000
        mov WK\()\reg, WK\()\reg, lsl #5 @ 0000000000000000gggggg0000000000
        orr SCRATCH, SCRATCH, SCRATCH, lsr #5 @ 0000000000000rrrrrrrrrr0bbbbbbbb
        orr WK\()\reg, WK\()\reg, WK\()\reg, lsr #6 @ 
000000000000000gggggggggggg00000
        pkhbt SCRATCH, SCRATCH, SCRATCH, lsl #5 @ 
--------rrrrrrrr--------bbbbbbbb
        sel WK\()\reg, WK\()\reg, SCRATCH @ --------rrrrrrrrggggggggbbbbbbbb
        orr WK\()\reg, WK\()\reg, #0xFF000000 @ 11111111rrrrrrrrggggggggbbbbbbbb
.endm

.macro src_0565_8888_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
 .if \numbytes == 16
        pixldst ld,, 8, \firstreg, %(\firstreg+2),,, SRC, \unaligned_src
 .elseif \numbytes == 8
        pixld , 4, \firstreg, SRC, \unaligned_src
 .elseif \numbytes == 4
        pixld , 2, \firstreg, SRC, \unaligned_src
 .endif
.endm

.macro src_0565_8888_process_tail cond, numbytes, firstreg
 .if \numbytes == 16
        src_0565_8888_2pixels \firstreg, %(\firstreg+1)
        src_0565_8888_2pixels %(\firstreg+2), %(\firstreg+3)
 .elseif \numbytes == 8
        src_0565_8888_2pixels \firstreg, %(\firstreg+1)
 .else
        src_0565_8888_1pixel \firstreg
 .endif
.endm

generate_composite_function pixman_composite_src_0565_8888_asm_armv6, 16, 0, 
32, FLAG_DST_WRITEONLY | FLAG_BRANCH_OVER, 3, src_0565_8888_init, nop_macro, 
nop_macro, src_0565_8888_process_head, src_0565_8888_process_tail
# 309 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro src_x888_0565_init

        ldr MASK, =0x001F001F
        line_saved_regs STRIDE_S, ORIG_W
.endm

.macro src_x888_0565_1pixel s, d
        and WK\()\d, MASK, WK\()\s, lsr #3 @ 00000000000rrrrr00000000000bbbbb
        and STRIDE_S, WK\()\s, #0xFC00 @ 0000000000000000gggggg0000000000
        orr WK\()\d, WK\()\d, WK\()\d, lsr #5 @ 00000000000-----rrrrr000000bbbbb
        orr WK\()\d, WK\()\d, STRIDE_S, lsr #5 @ 
00000000000-----rrrrrggggggbbbbb

.endm

.macro src_x888_0565_2pixels slo, shi, d, tmp
        and SCRATCH, WK\()\shi, #0xFC00 @ 0000000000000000GGGGGG0000000000
        and WK\()\tmp, MASK, WK\()\shi, lsr #3 @ 
00000000000RRRRR00000000000BBBBB
        and WK\()\shi, MASK, WK\()\slo, lsr #3 @ 
00000000000rrrrr00000000000bbbbb
        orr WK\()\tmp, WK\()\tmp, WK\()\tmp, lsr #5 @ 
00000000000-----RRRRR000000BBBBB
        orr WK\()\tmp, WK\()\tmp, SCRATCH, lsr #5 @ 
00000000000-----RRRRRGGGGGGBBBBB
        and SCRATCH, WK\()\slo, #0xFC00 @ 0000000000000000gggggg0000000000
        orr WK\()\shi, WK\()\shi, WK\()\shi, lsr #5 @ 
00000000000-----rrrrr000000bbbbb
        orr WK\()\shi, WK\()\shi, SCRATCH, lsr #5 @ 
00000000000-----rrrrrggggggbbbbb
        pkhbt WK\()\d, WK\()\shi, WK\()\tmp, lsl #16 @ 
RRRRRGGGGGGBBBBBrrrrrggggggbbbbb
.endm

.macro src_x888_0565_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
        WK4 .req STRIDE_S
        WK5 .req STRIDE_M
        WK6 .req WK3
        WK7 .req ORIG_W
 .if \numbytes == 16
        pixld , 16, 4, SRC, 0
        src_x888_0565_2pixels 4, 5, 0, 0
        pixld , 8, 4, SRC, 0
        src_x888_0565_2pixels 6, 7, 1, 1
        pixld , 8, 6, SRC, 0
 .else
        pixld , \numbytes*2, 4, SRC, 0
 .endif
.endm

.macro src_x888_0565_process_tail cond, numbytes, firstreg
 .if \numbytes == 16
        src_x888_0565_2pixels 4, 5, 2, 2
        src_x888_0565_2pixels 6, 7, 3, 4
 .elseif \numbytes == 8
        src_x888_0565_2pixels 4, 5, 1, 1
        src_x888_0565_2pixels 6, 7, 2, 2
 .elseif \numbytes == 4
        src_x888_0565_2pixels 4, 5, 1, 1
 .else
        src_x888_0565_1pixel 4, 1
 .endif
 .if \numbytes == 16
        pixst , \numbytes, 0, DST
 .else
        pixst , \numbytes, 1, DST
 .endif
        .unreq WK4
        .unreq WK5
        .unreq WK6
        .unreq WK7
.endm

generate_composite_function pixman_composite_src_x888_0565_asm_armv6, 32, 0, 
16, FLAG_DST_WRITEONLY | FLAG_BRANCH_OVER | FLAG_PROCESS_DOES_STORE | 
FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_SCRATCH, 3, src_x888_0565_init, 
nop_macro, nop_macro, src_x888_0565_process_head, src_x888_0565_process_tail
# 386 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro add_8_8_8pixels cond, dst1, dst2
        uqadd8\()\cond WK\()\dst1, WK\()\dst1, MASK
        uqadd8\()\cond WK\()\dst2, WK\()\dst2, STRIDE_M
.endm

.macro add_8_8_4pixels cond, dst
        uqadd8\()\cond WK\()\dst, WK\()\dst, MASK
.endm

.macro add_8_8_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
    WK4 .req MASK
    WK5 .req STRIDE_M
 .if \numbytes == 16
        pixld \cond, 8, 4, SRC, \unaligned_src
        pixld \cond, 16, \firstreg, DST, 0
        add_8_8_8pixels \cond, \firstreg, %(\firstreg+1)
        pixld \cond, 8, 4, SRC, \unaligned_src
 .else
        pixld \cond, \numbytes, 4, SRC, \unaligned_src
        pixld \cond, \numbytes, \firstreg, DST, 0
 .endif
    .unreq WK4
    .unreq WK5
.endm

.macro add_8_8_process_tail cond, numbytes, firstreg
 .if \numbytes == 16
        add_8_8_8pixels \cond, %(\firstreg+2), %(\firstreg+3)
 .elseif \numbytes == 8
        add_8_8_8pixels \cond, \firstreg, %(\firstreg+1)
 .else
        add_8_8_4pixels \cond, \firstreg
 .endif
.endm

generate_composite_function pixman_composite_add_8_8_asm_armv6, 8, 0, 8, 
FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_PRESERVES_SCRATCH, 2, 
nop_macro, nop_macro, nop_macro, add_8_8_process_head, add_8_8_process_tail
# 433 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_8888_8888_init

        ldr MASK, =0x00800080

        uadd8 SCRATCH, MASK, MASK
        line_saved_regs STRIDE_D, STRIDE_S, ORIG_W
.endm

.macro over_8888_8888_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
    WK4 .req STRIDE_D
    WK5 .req STRIDE_S
    WK6 .req STRIDE_M
    WK7 .req ORIG_W
        pixld , \numbytes, %(4+\firstreg), SRC, \unaligned_src
        pixld , \numbytes, \firstreg, DST, 0
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

.macro over_8888_8888_check_transparent numbytes, reg0, reg1, reg2, reg3

        teq WK\()\reg0, #0
 .if \numbytes > 4
        teqeq WK\()\reg1, #0
  .if \numbytes > 8
        teqeq WK\()\reg2, #0
        teqeq WK\()\reg3, #0
  .endif
 .endif
.endm

.macro over_8888_8888_prepare next
        mov WK\()\next, WK\()\next, lsr #24
.endm

.macro over_8888_8888_1pixel src, dst, offset, next

        rsb WK\()\src, WK\()\src, #255

        uxtb16 SCRATCH, WK\()\dst
        uxtb16 WK\()\dst, WK\()\dst, ror #8

        mla SCRATCH, SCRATCH, WK\()\src, MASK
        mla WK\()\dst, WK\()\dst, WK\()\src, MASK


        ldr WK\()\src, [SRC, #\offset]

        uxtab16 SCRATCH, SCRATCH, SCRATCH, ror #8

 .if \offset < -4
        mov WK\()\next, WK\()\next, lsr #24
 .endif
        uxtab16 WK\()\dst, WK\()\dst, WK\()\dst, ror #8

        mov SCRATCH, SCRATCH, ror #8
        sel WK\()\dst, SCRATCH, WK\()\dst

        uqadd8 WK\()\dst, WK\()\dst, WK\()\src
.endm

.macro over_8888_8888_process_tail cond, numbytes, firstreg
    WK4 .req STRIDE_D
    WK5 .req STRIDE_S
    WK6 .req STRIDE_M
    WK7 .req ORIG_W
        over_8888_8888_check_transparent \numbytes, %(4+\firstreg), 
%(5+\firstreg), %(6+\firstreg), %(7+\firstreg)
        beq 10f
        over_8888_8888_prepare %(4+\firstreg)
 .set PROCESS_REG, \firstreg
 .set PROCESS_OFF, -\numbytes
 .rept \numbytes / 4
        over_8888_8888_1pixel %(4+PROCESS_REG), %(0+PROCESS_REG), PROCESS_OFF, 
%(5+PROCESS_REG)
  .set PROCESS_REG, PROCESS_REG+1
  .set PROCESS_OFF, PROCESS_OFF+4
 .endr
        pixst , \numbytes, \firstreg, DST
10:
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

generate_composite_function pixman_composite_over_8888_8888_asm_armv6, 32, 0, 
32 FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS 2, over_8888_8888_init, 
nop_macro, nop_macro, over_8888_8888_process_head, over_8888_8888_process_tail
# 539 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro mul_8888_8 word, byte, tmp, half

        uxtb16 \tmp, \word
        uxtb16 \word, \word, ror #8

        mla \tmp, \tmp, \byte, \half
        mla \word, \word, \byte, \half
        uxtab16 \tmp, \tmp, \tmp, ror #8
        uxtab16 \word, \word, \word, ror #8

        mov \tmp, \tmp, ror #8
        sel \word, \tmp, \word
.endm



.macro over_8888_n_8888_init

        ldr MASK, [sp, #ARGS_STACK_OFFSET+8]

        ldr STRIDE_M, =0x00800080

        mov MASK, MASK, lsr #24

        uadd8 SCRATCH, STRIDE_M, STRIDE_M
        line_saved_regs Y, STRIDE_D, STRIDE_S, ORIG_W
.endm

.macro over_8888_n_8888_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
    WK4 .req Y
    WK5 .req STRIDE_D
    WK6 .req STRIDE_S
    WK7 .req ORIG_W
        pixld , \numbytes, %(4+(\firstreg%2)), SRC, \unaligned_src
        pixld , \numbytes, \firstreg, DST, 0
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

.macro over_8888_n_8888_1pixel src, dst
        mul_8888_8 WK\()\src, MASK, SCRATCH, STRIDE_M
        sub WK7, WK6, WK\()\src, lsr #24
        mul_8888_8 WK\()\dst, WK7, SCRATCH, STRIDE_M
        uqadd8 WK\()\dst, WK\()\dst, WK\()\src
.endm

.macro over_8888_n_8888_process_tail cond, numbytes, firstreg
    WK4 .req Y
    WK5 .req STRIDE_D
    WK6 .req STRIDE_S
    WK7 .req ORIG_W
        over_8888_8888_check_transparent \numbytes, %(4+(\firstreg%2)), 
%(5+(\firstreg%2)), %(6+\firstreg), %(7+\firstreg)
        beq 10f
        mov WK6, #255
 .set PROCESS_REG, \firstreg
 .rept \numbytes / 4
  .if \numbytes == 16 && PROCESS_REG == 2



        ldmdb SRC, {WK4, WK5}
  .endif
        over_8888_n_8888_1pixel %(4+(PROCESS_REG%2)), %(PROCESS_REG)
  .set PROCESS_REG, PROCESS_REG+1
 .endr
        pixst , \numbytes, \firstreg, DST
10:
    .unreq WK4
    .unreq WK5
    .unreq WK6
    .unreq WK7
.endm

generate_composite_function pixman_composite_over_8888_n_8888_asm_armv6, 32, 0, 
32 FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS 2, over_8888_n_8888_init, 
nop_macro, nop_macro, over_8888_n_8888_process_head, 
over_8888_n_8888_process_tail
# 626 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_n_8_8888_init

        ldr SRC, [sp, #ARGS_STACK_OFFSET]

        ldr SCRATCH, =0x00800080
        uxtb16 STRIDE_S, SRC
        uxtb16 SRC, SRC, ror #8

        uadd8 SCRATCH, SCRATCH, SCRATCH
        line_saved_regs Y, STRIDE_D, STRIDE_M, ORIG_W
.endm

.macro over_n_8_8888_newline
        ldr STRIDE_D, =0x00800080
        b 1f
 .ltorg
1:
.endm

.macro over_n_8_8888_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
    WK4 .req STRIDE_M
        pixld , \numbytes/4, 4, MASK, \unaligned_mask
        pixld , \numbytes, \firstreg, DST, 0
    .unreq WK4
.endm

.macro over_n_8_8888_1pixel src, dst
        uxtb Y, WK4, ror #\src*8

        mla SCRATCH, STRIDE_S, Y, STRIDE_D
        mla Y, SRC, Y, STRIDE_D
        mov ORIG_W, #255
        uxtab16 SCRATCH, SCRATCH, SCRATCH, ror #8
        uxtab16 Y, Y, Y, ror #8
        mov SCRATCH, SCRATCH, ror #8
        sub ORIG_W, ORIG_W, Y, lsr #24
        sel Y, SCRATCH, Y

        mul_8888_8 WK\()\dst, ORIG_W, SCRATCH, STRIDE_D
        uqadd8 WK\()\dst, WK\()\dst, Y
.endm

.macro over_n_8_8888_process_tail cond, numbytes, firstreg
    WK4 .req STRIDE_M
        teq WK4, #0
        beq 10f
 .set PROCESS_REG, \firstreg
 .rept \numbytes / 4
        over_n_8_8888_1pixel %(PROCESS_REG-\firstreg), %(PROCESS_REG)
  .set PROCESS_REG, PROCESS_REG+1
 .endr
        pixst , \numbytes, \firstreg, DST
10:
    .unreq WK4
.endm

generate_composite_function pixman_composite_over_n_8_8888_asm_armv6, 0, 8, 32 
FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS 2, over_n_8_8888_init, 
over_n_8_8888_newline, nop_macro, over_n_8_8888_process_head, 
over_n_8_8888_process_tail
# 694 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_reverse_n_8888_init
        ldr SRC, [sp, #ARGS_STACK_OFFSET]
        ldr MASK, =0x00800080

        uxtb16 STRIDE_S, SRC
        uxtb16 STRIDE_M, SRC, ror #8

        uadd8 SCRATCH, MASK, MASK
        line_saved_regs STRIDE_D, ORIG_W
.endm

.macro over_reverse_n_8888_newline
        mov STRIDE_D, #0xFF
.endm

.macro over_reverse_n_8888_process_head cond, numbytes, firstreg, 
unaligned_src, unaligned_mask, preload
        pixld , \numbytes, \firstreg, DST, 0
.endm

.macro over_reverse_n_8888_1pixel d, is_only
        teq WK\()\d, #0
        beq 8f
        bics ORIG_W, STRIDE_D, WK\()\d, lsr #24
 .if \is_only == 1
        beq 49f
 .else
        beq 9f
 .endif
        mla SCRATCH, STRIDE_S, ORIG_W, MASK
        mla ORIG_W, STRIDE_M, ORIG_W, MASK
        uxtab16 SCRATCH, SCRATCH, SCRATCH, ror #8
        uxtab16 ORIG_W, ORIG_W, ORIG_W, ror #8
        mov SCRATCH, SCRATCH, ror #8
        sel ORIG_W, SCRATCH, ORIG_W
        uqadd8 WK\()\d, WK\()\d, ORIG_W
        b 9f
8: mov WK\()\d, SRC
9:
.endm

.macro over_reverse_n_8888_tail numbytes, reg1, reg2, reg3, reg4
 .if \numbytes == 4
        over_reverse_n_8888_1pixel \reg1, 1
 .else
        and SCRATCH, WK\()\reg1, WK\()\reg2
  .if \numbytes == 16
        and SCRATCH, SCRATCH, WK\()\reg3
        and SCRATCH, SCRATCH, WK\()\reg4
  .endif
        mvns SCRATCH, SCRATCH, asr #24
        beq 49f
        over_reverse_n_8888_1pixel \reg1, 0
        over_reverse_n_8888_1pixel \reg2, 0
  .if \numbytes == 16
        over_reverse_n_8888_1pixel \reg3, 0
        over_reverse_n_8888_1pixel \reg4, 0
  .endif
 .endif
        pixst , \numbytes, \reg1, DST
49:
.endm

.macro over_reverse_n_8888_process_tail cond, numbytes, firstreg
        over_reverse_n_8888_tail \numbytes, \firstreg, %(\firstreg+1), 
%(\firstreg+2), %(\firstreg+3)
.endm

generate_composite_function pixman_composite_over_reverse_n_8888_asm_armv6, 0, 
0, 32 FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_SCRATCH, 
3, over_reverse_n_8888_init, over_reverse_n_8888_newline, nop_macro, 
over_reverse_n_8888_process_head, over_reverse_n_8888_process_tail
# 772 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_white_8888_8888_ca_init
        HALF .req SRC
        TMP0 .req STRIDE_D
        TMP1 .req STRIDE_S
        TMP2 .req STRIDE_M
        TMP3 .req ORIG_W
        WK4 .req SCRATCH
        line_saved_regs STRIDE_D, STRIDE_M, ORIG_W
        ldr SCRATCH, =0x800080
        mov HALF, #0x80

        uadd8 SCRATCH, SCRATCH, SCRATCH
        .set DST_PRELOAD_BIAS, 8
.endm

.macro over_white_8888_8888_ca_cleanup
        .set DST_PRELOAD_BIAS, 0
        .unreq HALF
        .unreq TMP0
        .unreq TMP1
        .unreq TMP2
        .unreq TMP3
        .unreq WK4
.endm

.macro over_white_8888_8888_ca_combine m, d
        uxtb16 TMP1, TMP0
        uxtb16 TMP2, \d
        smlatt TMP3, TMP2, TMP1, HALF
        smlabb TMP2, TMP2, TMP1, HALF
        uxtb16 TMP0, TMP0, ror #8
        uxtb16 TMP1, \d, ror #8
        smlatt \d, TMP1, TMP0, HALF
        smlabb TMP1, TMP1, TMP0, HALF
        pkhbt TMP0, TMP2, TMP3, lsl #16
        pkhbt TMP1, TMP1, \d, lsl #16
        uxtab16 TMP0, TMP0, TMP0, ror #8
        uxtab16 TMP1, TMP1, TMP1, ror #8
        mov TMP0, TMP0, ror #8
        sel \d, TMP0, TMP1
        uqadd8 \d, \d, \m
.endm

.macro over_white_8888_8888_ca_1pixel_head
        pixld , 4, 1, MASK, 0
        pixld , 4, 3, DST, 0
.endm

.macro over_white_8888_8888_ca_1pixel_tail
        mvn TMP0, WK1
        teq WK1, WK1, asr #32
        bne 01f
        bcc 03f
        mov WK3, WK1
        b 02f
01: over_white_8888_8888_ca_combine WK1, WK3
02: pixst , 4, 3, DST
03:
.endm

.macro over_white_8888_8888_ca_2pixels_head
        pixld , 8, 1, MASK, 0
.endm

.macro over_white_8888_8888_ca_2pixels_tail
        pixld , 8, 3, DST
        mvn TMP0, WK1
        teq WK1, WK1, asr #32
        bne 01f
        movcs WK3, WK1
        bcs 02f
        teq WK2, #0
        beq 05f
        b 02f
01: over_white_8888_8888_ca_combine WK1, WK3
02: mvn TMP0, WK2
        teq WK2, WK2, asr #32
        bne 03f
        movcs WK4, WK2
        b 04f
03: over_white_8888_8888_ca_combine WK2, WK4
04: pixst , 8, 3, DST
05:
.endm

.macro over_white_8888_8888_ca_process_head cond, numbytes, firstreg, 
unaligned_src, unaligned_mask, preload
 .if \numbytes == 4
        over_white_8888_8888_ca_1pixel_head
 .else
  .if \numbytes == 16
        over_white_8888_8888_ca_2pixels_head
        over_white_8888_8888_ca_2pixels_tail
  .endif
        over_white_8888_8888_ca_2pixels_head
 .endif
.endm

.macro over_white_8888_8888_ca_process_tail cond, numbytes, firstreg
 .if \numbytes == 4
        over_white_8888_8888_ca_1pixel_tail
 .else
        over_white_8888_8888_ca_2pixels_tail
 .endif
.endm

generate_composite_function pixman_composite_over_white_8888_8888_ca_asm_armv6, 
0, 32, 32 FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_SCRATCH 
2, over_white_8888_8888_ca_init, nop_macro, over_white_8888_8888_ca_cleanup, 
over_white_8888_8888_ca_process_head, over_white_8888_8888_ca_process_tail
# 888 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_n_8888_8888_ca_init



        ldr SCRATCH, [sp, #ARGS_STACK_OFFSET]
        mov WK0, #0x00FF0000
        orr WK0, WK0, #0xFF
        mov WK1, #0x80
        mov WK2, SCRATCH, lsr #24
        orr WK3, WK1, WK1, lsl #16
        push {WK0-WK3}
 .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET+16
        uxtb16 SRC, SCRATCH
        uxtb16 STRIDE_S, SCRATCH, ror #8


        uadd8 SCRATCH, WK3, WK3

        .unreq WK0
        .unreq WK1
        .unreq WK2
        .unreq WK3
        WK0 .req Y
        WK1 .req STRIDE_D
        RB_SRC .req SRC
        AG_SRC .req STRIDE_S
        WK2 .req STRIDE_M
        RB_FLDS .req r8
        A_SRC .req r8
        HALF .req r9
        WK3 .req r10
        WK4 .req r11
        WK5 .req SCRATCH
        WK6 .req ORIG_W

        line_saved_regs Y, STRIDE_D, STRIDE_M, ORIG_W
.endm

.macro over_n_8888_8888_ca_cleanup
        add sp, sp, #16
 .set ARGS_STACK_OFFSET, ARGS_STACK_OFFSET-16

        .unreq WK0
        .unreq WK1
        .unreq RB_SRC
        .unreq AG_SRC
        .unreq WK2
        .unreq RB_FLDS
        .unreq A_SRC
        .unreq HALF
        .unreq WK3
        .unreq WK4
        .unreq WK5
        .unreq WK6
        WK0 .req r8
        WK1 .req r9
        WK2 .req r10
        WK3 .req r11
.endm

.macro over_n_8888_8888_ca_1pixel_head
        pixld , 4, 6, MASK, 0
        pixld , 4, 0, DST, 0
.endm

.macro over_n_8888_8888_ca_1pixel_tail
        ldrd A_SRC, HALF, [sp, #LOCALS_STACK_OFFSET+8]
        uxtb16 WK1, WK6
        teq WK6, WK6, asr #32
        bne 20f
        bcc 40f

        ldr WK6, [sp, #ARGS_STACK_OFFSET]
        eors A_SRC, A_SRC, #0xFF
        bne 10f

        mov WK0, WK6
        b 30f
10:
        mul_8888_8 WK0, A_SRC, WK5, HALF
        uqadd8 WK0, WK0, WK6
        b 30f
20:
        uxtb16 WK2, WK6, ror #8
        mla WK3, WK1, A_SRC, HALF
        mla WK4, WK2, A_SRC, HALF
        ldrd RB_FLDS, HALF, [sp, #LOCALS_STACK_OFFSET]
        uxtb16 WK5, WK0
        uxtab16 WK3, WK3, WK3, ror #8
        uxtb16 WK6, WK0, ror #8
        uxtab16 WK4, WK4, WK4, ror #8
        smlatt WK0, RB_SRC, WK1, HALF
        smlabb WK1, RB_SRC, WK1, HALF
        bic WK3, RB_FLDS, WK3, lsr #8
        bic WK4, RB_FLDS, WK4, lsr #8
        pkhbt WK1, WK1, WK0, lsl #16
        smlatt WK0, WK5, WK3, HALF
        smlabb WK3, WK5, WK3, HALF
        uxtab16 WK1, WK1, WK1, ror #8
        smlatt WK5, AG_SRC, WK2, HALF
        pkhbt WK3, WK3, WK0, lsl #16
        smlabb WK0, AG_SRC, WK2, HALF
        smlatt WK2, WK6, WK4, HALF
        smlabb WK4, WK6, WK4, HALF
        pkhbt WK0, WK0, WK5, lsl #16
        uxtab16 WK3, WK3, WK3, ror #8
        pkhbt WK4, WK4, WK2, lsl #16
        uxtab16 WK0, WK0, WK0, ror #8
        uxtab16 WK4, WK4, WK4, ror #8
        mov WK1, WK1, ror #8
        mov WK3, WK3, ror #8
        sel WK2, WK1, WK0
        sel WK1, WK3, WK4
        uqadd8 WK0, WK1, WK2
30:

        pixst , 4, 0, DST
40:
.endm

.macro over_n_8888_8888_ca_process_head cond, numbytes, firstreg, 
unaligned_src, unaligned_mask, preload
 .rept (\numbytes / 4) - 1
        over_n_8888_8888_ca_1pixel_head
        over_n_8888_8888_ca_1pixel_tail
 .endr
        over_n_8888_8888_ca_1pixel_head
.endm

.macro over_n_8888_8888_ca_process_tail cond, numbytes, firstreg
        over_n_8888_8888_ca_1pixel_tail
.endm

pixman_asm_function pixman_composite_over_n_8888_8888_ca_asm_armv6
        ldr ip, [sp]
        cmp ip, #-1
        beq pixman_composite_over_white_8888_8888_ca_asm_armv6

pixman_end_asm_function
generate_composite_function 
pixman_composite_over_n_8888_8888_ca_asm_armv6_helper, 0, 32, 32 
FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_SCRATCH 
| FLAG_PROCESS_CORRUPTS_WK0 2, over_n_8888_8888_ca_init, nop_macro, 
over_n_8888_8888_ca_cleanup, over_n_8888_8888_ca_process_head, 
over_n_8888_8888_ca_process_tail
# 1038 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro in_reverse_8888_8888_init

        ldr MASK, =0x00800080

        uadd8 SCRATCH, MASK, MASK

        add SRC, SRC, #3
        line_saved_regs ORIG_W
.endm

.macro in_reverse_8888_8888_head numbytes, reg1, reg2, reg3
        ldrb ORIG_W, [SRC], #4
 .if \numbytes >= 8
        ldrb WK\()\reg1, [SRC], #4
  .if \numbytes == 16
        ldrb WK\()\reg2, [SRC], #4
        ldrb WK\()\reg3, [SRC], #4
  .endif
 .endif
        add DST, DST, #\numbytes
.endm

.macro in_reverse_8888_8888_process_head cond, numbytes, firstreg, 
unaligned_src, unaligned_mask, preload
        in_reverse_8888_8888_head \numbytes, \firstreg, %(\firstreg+1), 
%(\firstreg+2)
.endm

.macro in_reverse_8888_8888_1pixel s, d, offset, is_only
 .if \is_only != 1
        movs \s, ORIG_W
  .if \offset != 0
        ldrb ORIG_W, [SRC, #\offset]
  .endif
        beq 01f
        teq STRIDE_M, #0xFF
        beq 02f
 .endif
        uxtb16 SCRATCH, \d
        uxtb16 \d, \d, ror #8
        mla SCRATCH, SCRATCH, \s, MASK
        mla \d, \d, \s, MASK
        uxtab16 SCRATCH, SCRATCH, SCRATCH, ror #8
        uxtab16 \d, \d, \d, ror #8
        mov SCRATCH, SCRATCH, ror #8
        sel \d, SCRATCH, \d
        b 02f
 .if \offset == 0
48:

 .endif
01: mov \d, #0
02:
.endm

.macro in_reverse_8888_8888_tail numbytes, reg1, reg2, reg3, reg4
 .if \numbytes == 4
        teq ORIG_W, ORIG_W, asr #32
        ldrne WK\()\reg1, [DST, #-4]
 .elseif \numbytes == 8
        teq ORIG_W, WK\()\reg1
        teqeq ORIG_W, ORIG_W, asr #32
        ldmdbne DST, {WK\()\reg1-WK\()\reg2}
 .else
        teq ORIG_W, WK\()\reg1
        teqeq ORIG_W, WK\()\reg2
        teqeq ORIG_W, WK\()\reg3
        teqeq ORIG_W, ORIG_W, asr #32
        ldmdbne DST, {WK\()\reg1-WK\()\reg4}
 .endif
        cmnne DST, #0
        bcs 49f
        beq 48f
 .if \numbytes == 4
        in_reverse_8888_8888_1pixel ORIG_W, WK\()\reg1, 0, 1
        str WK\()\reg1, [DST, #-4]
 .elseif \numbytes == 8
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg1, -4, 0
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg2, 0, 0
        stmdb DST, {WK\()\reg1-WK\()\reg2}
 .else
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg1, -12, 0
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg2, -8, 0
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg3, -4, 0
        in_reverse_8888_8888_1pixel STRIDE_M, WK\()\reg4, 0, 0
        stmdb DST, {WK\()\reg1-WK\()\reg4}
 .endif
49:
.endm

.macro in_reverse_8888_8888_process_tail cond, numbytes, firstreg
        in_reverse_8888_8888_tail \numbytes, \firstreg, %(\firstreg+1), 
%(\firstreg+2), %(\firstreg+3)
.endm

generate_composite_function pixman_composite_in_reverse_8888_8888_asm_armv6, 
32, 0, 32 FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_CORRUPTS_PSR | 
FLAG_PROCESS_DOES_STORE | FLAG_SPILL_LINE_VARS | FLAG_PROCESS_CORRUPTS_SCRATCH 
| FLAG_NO_PRELOAD_DST 2, in_reverse_8888_8888_init, nop_macro, nop_macro, 
in_reverse_8888_8888_process_head, in_reverse_8888_8888_process_tail
# 1142 
"/home/glandium/firefox-127.0.1/gfx/cairo/libpixman/src/pixman-arm-simd-asm.S"
.macro over_n_8888_init
        ldr SRC, [sp, #ARGS_STACK_OFFSET]

        ldr MASK, =0x00800080

        mov STRIDE_M, #255
        sub STRIDE_M, STRIDE_M, SRC, lsr #24

        uadd8 SCRATCH, MASK, MASK
.endm

.macro over_n_8888_process_head cond, numbytes, firstreg, unaligned_src, 
unaligned_mask, preload
        pixld , \numbytes, \firstreg, DST, 0
.endm

.macro over_n_8888_1pixel dst
        mul_8888_8 WK\()\dst, STRIDE_M, SCRATCH, MASK
        uqadd8 WK\()\dst, WK\()\dst, SRC
.endm

.macro over_n_8888_process_tail cond, numbytes, firstreg
 .set PROCESS_REG, \firstreg
 .rept \numbytes / 4
        over_n_8888_1pixel %(PROCESS_REG)
  .set PROCESS_REG, PROCESS_REG+1
 .endr
        pixst , \numbytes, \firstreg, DST
.endm

generate_composite_function pixman_composite_over_n_8888_asm_armv6, 0, 0, 32 
FLAG_DST_READWRITE | FLAG_BRANCH_OVER | FLAG_PROCESS_DOES_STORE 2, 
over_n_8888_init, nop_macro, nop_macro, over_n_8888_process_head, 
over_n_8888_process_tail

--- End Message ---
--- Begin Message ---
Version: 128.0.3-1

This was fixed in 128.0.3-1.

--- End Message ---

Reply via email to