diff options
Diffstat (limited to 'src/gui/painting/qdrawhelper_arm_simd.cpp')
-rw-r--r-- | src/gui/painting/qdrawhelper_arm_simd.cpp | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/src/gui/painting/qdrawhelper_arm_simd.cpp b/src/gui/painting/qdrawhelper_arm_simd.cpp index 7c664372c3..48b67f4020 100644 --- a/src/gui/painting/qdrawhelper_arm_simd.cpp +++ b/src/gui/painting/qdrawhelper_arm_simd.cpp @@ -46,223 +46,7 @@ #ifdef QT_HAVE_ARM_SIMD -#if defined(Q_OS_SYMBIAN) -#if !defined(__SWITCH_TO_ARM) -#ifdef __MARM_THUMB__ -#ifndef __ARMCC__ -#define __SWITCH_TO_ARM asm("push {r0} ");\ - asm("add r0, pc, #4 ");\ - asm("bx r0 ");\ - asm("nop ");\ - asm(".align 2 ");\ - asm(".code 32 ");\ - asm("ldr r0, [sp], #4 ") -#define __END_ARM asm(".code 16 ") -#else -#define __SWITCH_TO_ARM asm(".code 32 "); -#define __END_ARM -#endif // __ARMCC__ -#else -#define __SWITCH_TO_ARM -#define __END_ARM -#endif //__MARM_THUMB__ -#endif -#endif -#if defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT) -__asm void qt_blend_argb32_on_argb32_arm_simd(uchar *destPixels, int dbpl, - const uchar *srcPixels, int sbpl, - int w, int h, - int const_alpha) -{ -#ifndef __ARMCC__ - __SWITCH_TO_ARM; -#else - CODE32 -#endif // __ARMCC__ - - stmfd sp!, {r4-r12, r14} - - // read arguments off the stack - add r8, sp, #10 * 4 - ldmia r8, {r4-r6} - - // adjust dbpl and sbpl - mov r14, #4 - mul r14, r4, r14 - sub r1, r1, r14 - sub r3, r3, r14 - - // load 0xFF00FF00 to r12 - mov r12, #0xFF000000 - add r12, r12, #0xFF00 - - // load 0x800080 to r14 - mov r14, #0x800000 - add r14, r14, #0x80 - - /* - Registers: - r0 dst - r1 dbpl - r2 src - r3 sbpl - r4 w - r5 h - r6 const_alpha - r12 0xFF0000 - r14 0x800080 - */ - - cmp r6, #256 //test if we have fully opaque constant alpha value - bne argb32constalpha // branch if not - -argb32_next_row - - mov r7, r4 - -argb32_next_pixel - - ldr r8, [r2], #4 // load src pixel - - // Negate r8 and extract src alpha - mvn r11, r8 // bitwise not - uxtb r11, r11, ror #24 - - cmp r11, #0 // test for full src opacity (negated) - beq argb32_no_blend - - cmp r11, #255 // test for full src transparency (negated) - addeq r0, #4 - beq argb32_nop - - ldr r9, [r0] // load dst pixel - - // blend - uxtb16 r10, r9 - uxtb16 r6, r9, ror #8 - mla r10, r11, r10, r14 - mla r9, r6, r11, r14 - uxtab16 r10, r10, r10, ror #8 - uxtab16 r9, r9, r9, ror #8 - and r9, r9, r12 - uxtab16 r10, r9, r10, ror #8 - - uqadd8 r8, r10, r8 - -argb32_no_blend - - str r8, [r0], #4 - -argb32_nop - - subs r7, r7, #1 - bgt argb32_next_pixel - - add r0, r0, r1 // dest = dest + dbpl - add r2, r2, r3 // src = src + sbpl - - subs r5, r5, #1 - bgt argb32_next_row - - b argb32_blend_exit - -argb32constalpha - - cmp r6, #0 - beq argb32_blend_exit - - ; const_alpha = (const_alpha * 255) >> 8; - mov r11, #255 - mul r6, r6, r11 - mov r11, r6, lsr #8 - -argb32constalpha_next_row - - mov r7, r4 - -argb32constalpha_next_pixel - - ldr r9, [r2], #4 // load src pixel - - // blend - uxtb16 r10, r9 - uxtb16 r6, r9, ror #8 - mla r10, r11, r10, r14 - mla r9, r6, r11, r14 - uxtab16 r10, r10, r10, ror #8 - uxtab16 r9, r9, r9, ror #8 - and r9, r9, r12 - uxtab16 r8, r9, r10, ror #8 - - ldr r9, [r0] // load dst pixel - - // blend - uxtb16 r10, r9 - uxtb16 r6, r9, ror #8 - - // Negate r8 and extract src alpha - mvn r9, r8 // bitwise not - uxtb r9, r9, ror #24 - - mla r10, r9, r10, r14 - mla r9, r6, r9, r14 - uxtab16 r10, r10, r10, ror #8 - uxtab16 r9, r9, r9, ror #8 - and r9, r9, r12 - uxtab16 r10, r9, r10, ror #8 - - uqadd8 r8, r10, r8 - - str r8, [r0], #4 - - subs r7, r7, #1 - bgt argb32constalpha_next_pixel - - add r0, r0, r1 // dest = dest + dbpl - add r2, r2, r3 // src = src + sbpl - - subs r5, r5, #1 - bgt argb32constalpha_next_row - -argb32_blend_exit - - // Restore registers - ldmfd sp!, {r4-r12, lr} - bx lr - - __END_ARM -} - -void qt_blend_rgb32_on_rgb32_arm_simd(uchar *destPixels, int dbpl, - const uchar *srcPixels, int sbpl, - int w, int h, - int const_alpha) -{ - if (const_alpha != 256) { - qt_blend_argb32_on_argb32_arm_simd(destPixels, dbpl, srcPixels, sbpl, w, h, const_alpha); - return; - } - - const uint *src = (const uint *) srcPixels; - uint *dst = (uint *) destPixels; - if (w <= 64) { - for (int y=0; y<h; ++y) { - qt_memconvert(dst, src, w); - dst = (quint32 *)(((uchar *) dst) + dbpl); - src = (const quint32 *)(((const uchar *) src) + sbpl); - } - } else { - int len = w * 4; - for (int y=0; y<h; ++y) { - memcpy(dst, src, len); - dst = (quint32 *)(((uchar *) dst) + dbpl); - src = (const quint32 *)(((const uchar *) src) + sbpl); - } - } -} - -#else // defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT) // TODO: add GNU assembler instructions and support for other platforms. // Default to C code for now @@ -327,6 +111,5 @@ void qt_blend_rgb32_on_rgb32_arm_simd(uchar *destPixels, int dbpl, } } -#endif #endif // QT_HAVE_ARMV_SIMD |