X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Farm_utils.s;h=47363809f54f6d92c5b66f1227265a7a5456995f;hp=edaafb863bc148aa0766a7afd8733533351e8862;hb=bbd837c6d8a14e76c19028c84ef62a3b8cf0c1f0;hpb=a327967e78393018a9f2a7edb38bc3af657e597a diff --git a/frontend/arm_utils.s b/frontend/arm_utils.s index edaafb86..47363809 100644 --- a/frontend/arm_utils.s +++ b/frontend/arm_utils.s @@ -1,7 +1,10 @@ /* * (C) Gražvydas "notaz" Ignotas, 2010 * - * This work is licensed under the terms of the GNU GPL, version 2 or later. + * This work is licensed under the terms of any of these licenses + * (at your option): + * - GNU GPL, version 2 or later. + * - GNU LGPL, version 2.1 or later. * See the COPYING file in the top-level directory. */ @@ -10,39 +13,66 @@ .global bgr555_to_rgb565 bgr555_to_rgb565: - mov r3, #0x03e0 + mov r3, #0x07c0 vdup.16 q15, r3 - mov r2, r2, lsr #6 + sub r2, r2, #64 0: vldmia r1!, {q0-q3} - vshr.u16 q4, q0, #10 - vshr.u16 q5, q1, #10 - vshr.u16 q6, q2, #10 - vshr.u16 q7, q3, #10 - vshl.u16 q8, q0, #11 - vshl.u16 q9, q1, #11 - vshl.u16 q10, q2, #11 - vshl.u16 q11, q3, #11 - vand q0, q0, q15 - vand q1, q1, q15 - vand q2, q2, q15 - vand q3, q3, q15 + vshl.u16 q4, q0, #11 + vshl.u16 q5, q1, #11 + vshl.u16 q6, q2, #11 + vshl.u16 q7, q3, #11 + vsri.u16 q4, q0, #10 + vsri.u16 q5, q1, #10 + vsri.u16 q6, q2, #10 + vsri.u16 q7, q3, #10 vshl.u16 q0, q0, #1 vshl.u16 q1, q1, #1 vshl.u16 q2, q2, #1 vshl.u16 q3, q3, #1 - vorr q0, q0, q4 - vorr q1, q1, q5 - vorr q2, q2, q6 - vorr q3, q3, q7 - vorr q0, q0, q8 - vorr q1, q1, q9 - vorr q2, q2, q10 - vorr q3, q3, q11 - vstmia r0!, {q0-q3} + vbit q4, q0, q15 + vbit q5, q1, q15 + vbit q6, q2, q15 + vbit q7, q3, q15 + vstmia r0!, {q4-q7} + subs r2, r2, #64 + bge 0b + + adds r2, r2, #64 + bxeq lr + + @ handle the remainder +0: + vld1.16 {q0}, [r1, :64]! + vshl.u16 q1, q0, #11 + vshl.u16 q2, q0, #1 + vsri.u16 q1, q0, #10 + vbit q1, q2, q15 + subs r2, r2, #16 + vst1.16 {q1}, [r0, :64]! + bgt 0b + + bx lr + + +.global bgr888_to_rgb888 +bgr888_to_rgb888: + @ r2 /= 48 + mov r2, r2, lsr #4 + movw r3, #0x5556 + movt r3, #0x5555 + umull r12,r2, r3, r2 +0: + vld3.8 {d0-d2}, [r1, :64]! + vld3.8 {d3-d5}, [r1, :64]! + vswp d0, d2 + vswp d3, d5 + vst3.8 {d0-d2}, [r0, :64]! + vst3.8 {d3-d5}, [r0, :64]! subs r2, r2, #1 bne 0b bx lr + @ vim:filetype=armasm