;//
;// Copyright (C) 2007-2008 ARM Limited
;//
;// Licensed under the Apache License, Version 2.0 (the "License");
;// you may not use this file except in compliance with the License.
;// You may obtain a copy of the License at
;//
;//      http://www.apache.org/licenses/LICENSE-2.0
;//
;// Unless required by applicable law or agreed to in writing, software
;// distributed under the License is distributed on an "AS IS" BASIS,
;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;// See the License for the specific language governing permissions and
;// limitations under the License.
;//
;/**
; * 
; * File Name:  armVCM4P2_DecodeVLCZigzag_AC_unsafe_s.s
; * OpenMAX DL: v1.0.2
; * Revision:   12290
; * Date:       Wednesday, April 9, 2008
; * 
; * 
; * 
; *
; * Description: 
; * Contains modules for zigzag scanning and VLC decoding
; * for inter, intra block.
; *
; *
; *
; * Function: omxVCM4P2_DecodeVLCZigzag_AC_unsafe
; *
; * Description:
; * Performs VLC decoding and inverse zigzag scan 
; *
; * 
; *
; * 
; */


      INCLUDE omxtypes_s.h
      INCLUDE armCOMM_s.h
      INCLUDE armCOMM_BitDec_s.h


      M_VARIANTS ARM1136JS

     



     IF ARM1136JS
     
        



;//Input Arguments

ppBitStream          RN 0
pBitOffset           RN 1
pDst                 RN 2
shortVideoHeader     RN 3


;//Local Variables

Return               RN 0

pVlcTableL0L1        RN 4
pLMAXTableL0L1       RN 4
pRMAXTableL0L1       RN 4
pZigzagTable         RN 4

ftype                RN 0
temp3                RN 4
temp                 RN 5
Count                RN 6
Escape               RN 5

;// armVCM4P2_FillVLDBuffer
zigzag               RN 0
storeLevel           RN 1
temp2                RN 4
temp1                RN 5
sign                 RN 5
Last                 RN 7
storeRun             RN 14


packRetIndex         RN 5


markerbit            RN 5

;// Scratch Registers

RBitStream           RN 8
RBitBuffer           RN 9
RBitCount            RN 10

T1                   RN 11
T2                   RN 12
LR                   RN 14        
        


        M_ALLOC4        pppBitStream,4
        M_ALLOC4        ppOffset,4
        M_ALLOC4        pLinkRegister,4       
        
        M_START armVCM4P2_DecodeVLCZigzag_AC_unsafe

        ;// get the table addresses from stack       
        M_ARG           ppVlcTableL0L1,4
        M_ARG           ppLMAXTableL0L1,4
        M_ARG           ppRMAXTableL0L1,4
        M_ARG           ppZigzagTable,4
        
        ;// Store ALL zeros at pDst
        
        MOV             temp1,#0                                        ;// Initialize Count to zero                                
        MOV             Last,#0
        M_STR           LR,pLinkRegister                                ;// Store Link Register on Stack
        MOV             temp2,#0
        MOV             LR,#0          
        
        ;// Initialize the Macro and Store all zeros to pDst 
  
        STM             pDst!,{temp2,temp1,Last,LR}                   
        M_BD_INIT0      ppBitStream, pBitOffset, RBitStream, RBitBuffer, RBitCount  
        STM             pDst!,{temp2,temp1,Last,LR}
        M_BD_INIT1      T1, T2, T2
        STM             pDst!,{temp2,temp1,Last,LR}
        M_BD_INIT2      T1, T2, T2
        STM             pDst!,{temp2,temp1,Last,LR}
        M_STR           ppBitStream,pppBitStream                        ;// Store ppBitstream on stack                         
        STM             pDst!,{temp2,temp1,Last,LR}
        M_STR           pBitOffset,ppOffset                             ;// Store pBitOffset on stack
        STM             pDst!,{temp2,temp1,Last,LR}
        
        STM             pDst!,{temp2,temp1,Last,LR}
        STM             pDst!,{temp2,temp1,Last,LR}
 
        
        SUB             pDst,pDst,#128                                  ;// Restore pDst

        ;// The armVCM4P2_GetVLCBits begins

getVLCbits
        
        M_BD_LOOK8      Escape,7                                        ;// Load Escape Value
        LSR             Escape,Escape,#25                                                  
        CMP             Escape,#3                                       ;// check for escape mode
        MOVNE           ftype,#0
        BNE             notEscapemode                                   ;// Branch if not in Escape mode 3

        M_BD_VSKIP8     #7,T1
        CMP             shortVideoHeader,#0                             ;// Check shortVideoHeader flag to know the type of Escape mode
        BEQ             endFillVLD                                       
        
        ;// Escape Mode 4

        M_BD_READ8      Last,1,T1
        M_BD_READ8      storeRun,6,T1
        M_BD_READ8      storeLevel,8,T1

           
        ;// Check whether the Reserved values for Level are used and Exit with an Error Message if it is so

        TEQ             storeLevel,#0
        TEQNE           storeLevel,#128                    
        BEQ             ExitError

        ADD             temp2,storeRun,Count
        CMP             temp2,#64
        BGE             ExitError                                       ;// error if Count+storeRun >= 64
        
        
        ;// Load address of zigzagTable
        
        M_LDR           pZigzagTable,ppZigzagTable                      ;// Loading the Address of Zigzag table
               
                
        ;// armVCM4P2_FillVLDBuffer
                
        SXTB            storeLevel,storeLevel                           ;// Sign Extend storeLevel to 32 bits
                              
        
        ;// To Reflect Runlength

        ADD             Count,Count,storeRun
        LDRB            zigzag,[pZigzagTable,Count]
        ADD             Count,Count,#1
        STRH            storeLevel,[pDst,zigzag]                        ;// store Level
              
        B               ExitOk
       
        

endFillVLD
        
               
        ;// Load Ftype( Escape Mode) value based on the two successive bits in the bitstream
     
        M_BD_READ8      temp1,1,T1           
        CMP             temp1,#0    
        MOVEQ           ftype,#1
        BEQ             notEscapemode
        M_BD_READ8      temp1,1,T1
        CMP             temp1,#1
        MOVEQ           ftype,#3
        MOVNE           ftype,#2
        

notEscapemode

        ;// Load optimized packed VLC table with last=0 and Last=1
        
        M_LDR           pVlcTableL0L1,ppVlcTableL0L1                    ;// Load Combined VLC Table
                
       
        CMP             ftype,#3                                        ;// If ftype >=3 get perform Fixed Length Decoding (Escape Mode 3)
        BGE             EscapeMode3                                     ;// Else continue normal VLC Decoding
        
        ;// Variable lengh decoding, "armUnPackVLC32" 
        
        
        M_BD_VLD        packRetIndex,T1,T2,pVlcTableL0L1,4,2
        
        
        LDR             temp3,=0xFFF
        
        CMP             packRetIndex,temp3                              ;// Check for invalid symbol
        BEQ             ExitError                                       ;// if invalid symbol occurs exit with an error message
        
        AND             Last,packRetIndex,#2                            ;// Get Last from packed Index
              
         
        

        LSR             storeRun,packRetIndex,#7                        ;// Get Run Value from Packed index
        AND             storeLevel,packRetIndex,#0x7c                   ;// storeLevel=packRetIndex[2-6],storeLevel[0-1]=0 
                                                                        
     
        M_LDR           pLMAXTableL0L1,ppLMAXTableL0L1                  ;// Load LMAX table
              
       
        LSR             storeLevel,storeLevel,#2                        ;// Level value

        CMP             ftype,#1                                    
        BNE             ftype2
        
        ;// ftype==1; Escape mode =1
          
        
        ADD            temp1, pLMAXTableL0L1, Last, LSL#4              ;// If the Last=1 add 32 to table address
        LDRB            temp1,[temp1,storeRun]

       
        ADD             storeLevel,temp1,storeLevel                     

ftype2

        ;// ftype =2; Escape mode =2
        
        M_LDR           pRMAXTableL0L1,ppRMAXTableL0L1                  ;// Load RMAX Table 
                
        CMP             ftype,#2
        BNE             FillVLDL1
                  
        ADD            temp1, pRMAXTableL0L1, Last, LSL#4               ;// If Last=1 add 32 to table address
        SUB             temp2,storeLevel,#1
        LDRB            temp1,[temp1,temp2]

       
        ADD             storeRun,storeRun,#1
        ADD             storeRun,temp1
        
FillVLDL1        
            
                
        ;// armVCM4P2_FillVLDBuffer

        M_LDR           pZigzagTable,ppZigzagTable                     ;// Load address of zigzagTable 
                
        M_BD_READ8      sign,1,T1

        CMP             sign,#1
        RSBEQ           storeLevel,storeLevel,#0
 
        ADD             temp1,storeRun,Count                           ;// Exit with an error message if Run + Count exceeds 63
        CMP             temp1,#64
        BGE             ExitError

      
        
        
              
        
        ;// To Reflect Runlenght

        ADD             Count,Count,storeRun
 
storeLevelL1
        
        LDRB            zigzag,[pZigzagTable,Count]
        CMP             Last,#2                                         ;// Check if the Level val is Last non zero val
        ADD             Count,Count,#1
        LSR             Last,Last,#1
        STRH            storeLevel,[pDst,zigzag]                  
           
        BNE             end
        
        B               ExitOk
 


        ;// Fixed Lengh Decoding Escape Mode 3

EscapeMode3

        M_BD_READ8      Last,1,T1
        M_BD_READ8      storeRun,6,T1
        
        ADD             temp2,storeRun,Count                            ;// Exit with an error message if Run + Count exceeds 63
        CMP             temp2,#64
        BGE             ExitError

        M_BD_READ8      markerbit,1,T1
        TEQ             markerbit,#0                                    ;// Exit with an error message if marker bit is zero
        BEQ             ExitError
        
        M_BD_READ16     storeLevel,12,T1

        TST             storeLevel,#0x800                               ;// test if the level is negative
        SUBNE           storeLevel,storeLevel,#4096
        CMP             storeLevel,#0
        CMPNE           storeLevel,#-2048
        BEQ             ExitError                                       ;// Exit with an error message if Level==0 or  -2048 

        M_LDR           pZigzagTable,ppZigzagTable                      ;// Load address of zigzagTable
              
        M_BD_READ8      markerbit,1,T1
           

        ;// armVCM4P2_FillVLDBuffer ( Sign not used as storeLevel is preprocessed)
            
               

        ;// To Reflect Run Length

        ADD             Count,Count,storeRun


 
storeLevelLast
        
        LDRB            zigzag,[pZigzagTable,Count]
        CMP             Last,#1
        ADD             Count,Count,#1
        STRH            storeLevel,[pDst,zigzag]                          
                
        BNE             end 
      
        B               ExitOk
        
end

        CMP             Count,#64                                       ;//Run the Loop untill Count reaches 64

        BLT             getVLCbits

        
ExitOk
        ;// Exit When VLC Decoding is done Successfully 
   
        ;// Loading ppBitStream and pBitOffset from stack
        
        CMP             Last,#1
        M_LDR           ppBitStream,pppBitStream
        M_LDR           pBitOffset,ppOffset

        ;//Ending the macro

        M_BD_FINI       ppBitStream,pBitOffset
             
        MOVEQ           Return,#OMX_Sts_NoErr
        MOVNE           Return,#OMX_Sts_Err
        M_LDR           LR,pLinkRegister                               ;// Load the Link Register Back
        B               exit2

ExitError
        ;// Exit When an Error occurs 

        M_LDR           ppBitStream,pppBitStream
        M_LDR           pBitOffset,ppOffset
        ;//Ending the macro

        M_BD_FINI       ppBitStream,pBitOffset
        M_LDR           LR,pLinkRegister
        MOV             Return,#OMX_Sts_Err

exit2
       

        M_END
        ENDIF
        
        END
