.globl _brightness_altivec .globl _brightness_ppc .globl _yuv2rgb_altivec ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; void brightness_sse(unsigned char *image, int len, int v) ; r3 r4 r5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _brightness_altivec: srwi r4, r4, 0x4 ; count = count / 16 mtctr r4 ; abs r6, r5 ; v=abs(v); mr. r6, r5 bge bright_not_neg neg r6, r6 bright_not_neg: andi. r6, r6, 0xff mr r8, r6 ; r8 = (v,v,v,v) rotlwi r7, r6, 8 or r8, r8, r7 rotlwi r7, r6, 16 or r8, r8, r7 rotlwi r7, r6, 24 or r8, r8, r7 stwu r1, -32(r1) ; push to stack so it can be added to the vector mr r9, r1 addi r9, r9, 16 ; make r9 a 16 byte aligned address on the SP srwi r9, r9, 4 slwi r9, r9, 4 stw r8, 0(r9) stw r8, 4(r9) stw r8, 8(r9) stw r8, 12(r9) xor r7, r7, r7 ; r7=0 lvx v1, r9, r7 addi r1, r1, 32 ; pop last value off stack to /dev/null cmpi cr0, r5, 0 ; check if v is negative blt bright_dark bright_loop: lvx v0, r3, r7 vaddubs v0, v0, v1 stvx v0, r3, r7 addi r3, r3, 16 bc 0, 31, bright_loop b bright_exit bright_dark: lvx v0, r3, r7 vsububs v0, v0, v1 stvx v0, r3, r7 addi r3, r3, 16 bc 0, 31, bright_dark bright_exit: blr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; void brightness_ppc(unsigned char *image, int len, int v) ; r3 r4 r5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _brightness_ppc: mtctr r4 ; abs r6, r5 ; v=abs(v); mr. r6, r5 ;cmpi cr0, r6, 0 bge bright_loop_ppc neg r6, r6 bright_dark_ppc: lbz r5, 0(r3) sub. r5, r5, r6 bge bright_dark_not_neg xor r5, r5, r5 bright_dark_not_neg: stb r5, 0(r3) addi r3, r3, 1 bc 0, 31, bright_dark_ppc b bright_exit_ppc bright_loop_ppc: lbz r5, 0(r3) add r5, r5, r6 cmpi cr0, r5, 255 ble bright_light_less_255 li r5, 255 bright_light_less_255: stb r5, 0(r3) addi r3, r3, 1 bc 0, 31, bright_loop_ppc bright_exit_ppc: blr ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; void yuv2rgb_altivec(unsigned char *yuv_buffer, unsigned char *rgb_buffer, int width, int height) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _yuv2rgb_altivec: blr