#define ycc r0 #define y r1 #define r r2 #define g r3 #define b r4 #define s r5 #define d r6 #define err r7 #define count r8 #define _1fe_ r9 #define _0_ r10 .global asm_yuvrgb565 //static void flushline_565(uint16_t* dst, int32_t dst_rbytes, uint32_t* src, int y); asm_yuvrgb565: stmdb sp!, {r4-r10, lr} mov s, r2 mov d, r0 mla d, r1, r3, d mov _1fe_, #0xFF tst r3, #1 mov err, #4 eorne err, err, #0x60000 eorne err, err, #0x6 add _1fe_, _1fe_, _1fe_ mov _0_, #0 mov count, #320 .loop: ldr ycc, [s] mov y, ycc, lsr #24 str _0_, [s], #4 and r, _1fe_, ycc, lsr #15 and g, _1fe_, ycc, lsr #7 and b, _1fe_, ycc, lsl #1 sub r, r, #180 sub g, g, #135 sub b, b, #227 add r, r, y sub g, y, g add b, b, y adds r, r, err, lsr #16 movmi r, _0_ cmp r, #0xF8 movgt r, #0xF8 and r, r, #0xF8 adds g, g, err, lsr #17 movmi g, _0_ cmp g, #0xFC movgt g, #0xFC and g, g, #0xFC adds b, b, err, lsr #16 movmi b, _0_ cmp b, #0xF8 movgt b, #0xF8 mov r, r, lsl #8 add r, r, g, lsl #3 add r, r, b, lsr #3 strh r, [d], #2 mov err, err, ror #16 subs count, count, #1 bne .loop ldmia sp!, {r4-r10, pc}