[svn] / trunk / xvidcore / src / bitstream / ppc_asm / cbp_ppc.s Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 49, Thu Mar 21 23:42:53 2002 UTC revision 57, Fri Mar 22 12:51:22 2002 UTC
# Line 1  Line 1 
1  #    Copyright (C) 2002 Guillaume Morin, Alcôve  #    Copyright (C) 2002 Guillaume Morin <guillaume@morinfr.org>, Alcôve
2  #  #
3  #    This program is free software; you can redistribute it and/or modify  #    This program is free software; you can redistribute it and/or modify
4  #    it under the terms of the GNU General Public License as published by  #    it under the terms of the GNU General Public License as published by
# Line 15  Line 15 
15  #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16  #  #
17  #  #
18  #    $Id: cbp_ppc.s,v 1.1 2002-03-21 23:42:53 canard Exp $  #    $Id: cbp_ppc.s,v 1.5 2002-03-22 12:51:22 canard Exp $
19  #    $Source: /home/xvid/cvs_copy/cvs-server-root/xvid/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s,v $  #    $Source: /home/xvid/cvs_copy/cvs-server-root/xvid/xvidcore/src/bitstream/ppc_asm/cbp_ppc.s,v $
20  #    $Date: 2002-03-21 23:42:53 $  #    $Date: 2002-03-22 12:51:22 $
21  #    $Author: canard $  #    $Author: canard $
22    #
23    #    This is my first PPC ASM attempt. So I might do nasty things.
24    #    Please send any comments to <guillaume@morinfr.org>
25    
26    
27    # Returns a field of bits that indicates non zero ac blocks
28    # for this macro block
29    #
30  #uint32_t calc_cbp_c(const int16_t codes[6][64])  #uint32_t calc_cbp_c(const int16_t codes[6][64])
31  #{  #{
32  #    uint32_t i, j;  #    uint32_t i, j;
33  #    uint32_t cbp = 0;  #    uint32_t cbp = 0;
34  #  #
35  #    for (i = 0; i < 6; i++) {  #    for (i = 0; i < 6; i++) {
36  #               for (j = 1; j < 64/4; j+=4) {  #               for (j = 1; j < 61; j+=4) {
37  #                       if (codes[i][j]  |codes[i][j+1]|  #                       if (codes[i][j]  |codes[i][j+1]|
38  #                               codes[i][j+2]|codes[i][j+3]) {  #                               codes[i][j+2]|codes[i][j+3]) {
39  #                               cbp |= 1 << (5 - i);  #                               cbp |= 1 << (5 - i);
40  #                               break;  #                               break;
41  #                       }  #                       }
42  #               }  #               }
43    #
44    #               if(codes[i][j]|codes[i][j+1]|codes[i][j+2])
45    #                       cbp |= 1 << (5 - i);
46    #
47  #    }  #    }
48    #
49  #    return cbp;  #    return cbp;
50    #
51  #}  #}
52    
53  .text  .text
54  .global calc_cbp_ppc  .global calc_cbp_ppc
55  calc_cbp_ppc:  calc_cbp_ppc:
56            # r9 will contain coeffs addr
57          mr 9,3          mr 9,3
58            # r8 is the loop counter (rows)
59          li 8,5          li 8,5
60            # r3 contains the result, therefore we set it to 0
61          xor 3,3,3          xor 3,3,3
62  .loop:  .loop:
63          li 7,14          # CTR is the loop2 counter
64            li 7,15
65            mtspr 9,7
66            # r6 is coeff pointer for this line
67          mr 6,9          mr 6,9
68  .loop2:  .loop2:
69            # coeffs is a matrix of 16 bits cells
70          lha 4,2(6)          lha 4,2(6)
71          lha 5,4(6)          lha 5,4(6)
72          or 4,5,4          or 4,5,4
73          lha 5,6(6)          lha 5,6(6)
74          or 4,5,4          or 4,5,4
75          lha 5,8(6)          lha 5,8(6)
76          or 4,5,4          # or. updates CR0
77          cmpwi 4,0          or. 4,5,4
78          bne .cbp          # testing bit 2 (is zero) of CR0
79            bf 2,.cbp
80          addi 6,6,8          addi 6,6,8
81          subi 7,7,1          bdnz .loop2
82          cmpwi 7,-1          # latest line coeffs
         beq .lastcoeffs  
         b .loop2  
 .lastcoeffs:  
83          lha 4,2(6)          lha 4,2(6)
84          lha 5,4(6)          lha 5,4(6)
85          or 4,5,4          or 4,5,4
86          lha 5,6(6)          lha 5,6(6)
87          or 4,5,4          # or. updates CR0
88          cmpwi 4,0          or. 4,5,4
89          beq .newline          # testing bit 2 (is zero) of CR0
90            bt 2,.newline
91  .cbp:  .cbp:
92          li 4,1          li 4,1
93          slw 4,4,8          slw 4,4,8
94          or 3,3,4          or 3,3,4
         b .newline  
95  .newline:  .newline:
96          addi 9,9,128          addi 9,9,128
97          subi 8,8,1          # updates CR0, blabla
98          cmpwi 8,-1          subic. 8,8,1
99          bne .loop          bf 0,.loop
 .end:  
100          blr          blr

Legend:
Removed from v.49  
changed lines
  Added in v.57

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4