--- trunk/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s 2002/03/22 12:24:07 56 +++ trunk/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s 2002/03/27 15:06:14 72 @@ -15,13 +15,13 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # -# $Id: cbp_ppc.s,v 1.4 2002-03-22 12:24:07 canard Exp $ +# $Id: cbp_ppc.s,v 1.8 2002-03-27 15:06:14 canard Exp $ # $Source: /home/xvid/cvs_copy/cvs-server-root/xvid/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s,v $ -# $Date: 2002-03-22 12:24:07 $ +# $Date: 2002-03-27 15:06:14 $ # $Author: canard $ # -# This is the PPC ASM code I write. So I might do nasty things. -# Please send any comments to guillaume@morinfr.org +# This is my first PPC ASM attempt. So I might do nasty things. +# Please send any comments to # Returns a field of bits that indicates non zero ac blocks @@ -50,6 +50,11 @@ # #} +.data +.skip: + .word 0,-1 +.align 4 + .text .global calc_cbp_ppc calc_cbp_ppc: @@ -58,39 +63,30 @@ # r8 is the loop counter (rows) li 8,5 # r3 contains the result, therefore we set it to 0 - xor 3,3,3 + li 3,0 .loop: - # r7 is the loop2 counter (columns), FIXME: use CTR - li 7,14 + # CTR is the loop2 counter + li 4,16 + mtctr 4 # r6 is coeff pointer for this line mr 6,9 + lis 7,.skip@ha + addi 7,7,.skip@l + lwz 7,0(7) .loop2: # coeffs is a matrix of 16 bits cells - lha 4,2(6) - lha 5,4(6) - or 4,5,4 - lha 5,6(6) - or 4,5,4 - lha 5,8(6) + lwz 4,0(6) + and 4,4,7 + li 7,-1 + + lwz 5,4(6) # or. updates CR0 or. 4,5,4 # testing bit 2 (is zero) of CR0 bf 2,.cbp addi 6,6,8 - # subic. updates CR0 - subic. 7,7,1 - # testing bit 0 (is negative) of CR0 - bt 0,.lastcoeffs - b .loop2 -.lastcoeffs: - lha 4,2(6) - lha 5,4(6) - or 4,5,4 - lha 5,6(6) - # or. updates CR0 - or. 4,5,4 - # testing bit 2 (is zero) of CR0 - bt 2,.newline + bdnz .loop2 + b .newline .cbp: li 4,1 slw 4,4,8