10c1bc742181ded4930842b46e9507372f0b1b963James Dong;
20c1bc742181ded4930842b46e9507372f0b1b963James Dong; Copyright (C) 2009 The Android Open Source Project
30c1bc742181ded4930842b46e9507372f0b1b963James Dong;
40c1bc742181ded4930842b46e9507372f0b1b963James Dong; Licensed under the Apache License, Version 2.0 (the "License");
50c1bc742181ded4930842b46e9507372f0b1b963James Dong; you may not use this file except in compliance with the License.
60c1bc742181ded4930842b46e9507372f0b1b963James Dong; You may obtain a copy of the License at
70c1bc742181ded4930842b46e9507372f0b1b963James Dong;
80c1bc742181ded4930842b46e9507372f0b1b963James Dong;      http://www.apache.org/licenses/LICENSE-2.0
90c1bc742181ded4930842b46e9507372f0b1b963James Dong;
100c1bc742181ded4930842b46e9507372f0b1b963James Dong; Unless required by applicable law or agreed to in writing, software
110c1bc742181ded4930842b46e9507372f0b1b963James Dong; distributed under the License is distributed on an "AS IS" BASIS,
120c1bc742181ded4930842b46e9507372f0b1b963James Dong; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130c1bc742181ded4930842b46e9507372f0b1b963James Dong; See the License for the specific language governing permissions and
140c1bc742181ded4930842b46e9507372f0b1b963James Dong; limitations under the License.
150c1bc742181ded4930842b46e9507372f0b1b963James Dong;
160c1bc742181ded4930842b46e9507372f0b1b963James Dong
170c1bc742181ded4930842b46e9507372f0b1b963James Dong    REQUIRE8
180c1bc742181ded4930842b46e9507372f0b1b963James Dong    PRESERVE8
190c1bc742181ded4930842b46e9507372f0b1b963James Dong
200c1bc742181ded4930842b46e9507372f0b1b963James Dong    AREA    |.text|, CODE
210c1bc742181ded4930842b46e9507372f0b1b963James Dong
220c1bc742181ded4930842b46e9507372f0b1b963James Dong    EXPORT h264bsdFlushBits
230c1bc742181ded4930842b46e9507372f0b1b963James Dong
240c1bc742181ded4930842b46e9507372f0b1b963James Dong; Input / output registers
250c1bc742181ded4930842b46e9507372f0b1b963James DongpStrmData       RN  0
260c1bc742181ded4930842b46e9507372f0b1b963James DongnumBits         RN  1
270c1bc742181ded4930842b46e9507372f0b1b963James DongreadBits        RN  2
280c1bc742181ded4930842b46e9507372f0b1b963James DongstrmBuffSize    RN  3
290c1bc742181ded4930842b46e9507372f0b1b963James DongpStrmBuffStart  RN  1
300c1bc742181ded4930842b46e9507372f0b1b963James DongpStrmCurrPos    RN  2
310c1bc742181ded4930842b46e9507372f0b1b963James DongbitPosInWord    RN  1
320c1bc742181ded4930842b46e9507372f0b1b963James Dong
330c1bc742181ded4930842b46e9507372f0b1b963James Dong; -- NEON registers --
340c1bc742181ded4930842b46e9507372f0b1b963James Dong
350c1bc742181ded4930842b46e9507372f0b1b963James Dong
360c1bc742181ded4930842b46e9507372f0b1b963James Dong
370c1bc742181ded4930842b46e9507372f0b1b963James Dong;/*------------------------------------------------------------------------------
380c1bc742181ded4930842b46e9507372f0b1b963James Dong;
390c1bc742181ded4930842b46e9507372f0b1b963James Dong;    Function: h264bsdFlushBits
400c1bc742181ded4930842b46e9507372f0b1b963James Dong;
410c1bc742181ded4930842b46e9507372f0b1b963James Dong;        Functional description:
420c1bc742181ded4930842b46e9507372f0b1b963James Dong;
430c1bc742181ded4930842b46e9507372f0b1b963James Dong;        Inputs:
440c1bc742181ded4930842b46e9507372f0b1b963James Dong;
450c1bc742181ded4930842b46e9507372f0b1b963James Dong;        Outputs:
460c1bc742181ded4930842b46e9507372f0b1b963James Dong;
470c1bc742181ded4930842b46e9507372f0b1b963James Dong;        Returns:
480c1bc742181ded4930842b46e9507372f0b1b963James Dong;
490c1bc742181ded4930842b46e9507372f0b1b963James Dong;------------------------------------------------------------------------------*/
500c1bc742181ded4930842b46e9507372f0b1b963James Dong
510c1bc742181ded4930842b46e9507372f0b1b963James Dongh264bsdFlushBits
520c1bc742181ded4930842b46e9507372f0b1b963James Dong;//    PUSH     {r4-r6,lr}
530c1bc742181ded4930842b46e9507372f0b1b963James Dong
540c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR readBits, [pStrmData, #0x10]
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR strmBuffSize, [pStrmData, #0xC]
560c1bc742181ded4930842b46e9507372f0b1b963James Dong
570c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD readBits, readBits, numBits
580c1bc742181ded4930842b46e9507372f0b1b963James Dong    AND bitPosInWord, readBits, #7
590c1bc742181ded4930842b46e9507372f0b1b963James Dong
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    STR readBits, [pStrmData, #0x10]
610c1bc742181ded4930842b46e9507372f0b1b963James Dong    STR bitPosInWord, [pStrmData, #0x8]
620c1bc742181ded4930842b46e9507372f0b1b963James Dong
630c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR pStrmBuffStart, [pStrmData, #0x0]
640c1bc742181ded4930842b46e9507372f0b1b963James Dong
650c1bc742181ded4930842b46e9507372f0b1b963James Dong    CMP readBits, strmBuffSize, LSL #3
660c1bc742181ded4930842b46e9507372f0b1b963James Dong
670c1bc742181ded4930842b46e9507372f0b1b963James Dong    BHI end_of_stream
680c1bc742181ded4930842b46e9507372f0b1b963James Dong
690c1bc742181ded4930842b46e9507372f0b1b963James Dong    ADD pStrmCurrPos, pStrmBuffStart, readBits, LSR #3
700c1bc742181ded4930842b46e9507372f0b1b963James Dong    STR pStrmCurrPos, [pStrmData, #0x4]
710c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV r0, #0
720c1bc742181ded4930842b46e9507372f0b1b963James Dong    BX  lr
730c1bc742181ded4930842b46e9507372f0b1b963James Dong;//    POP      {r4-r6,pc}
740c1bc742181ded4930842b46e9507372f0b1b963James Dong
750c1bc742181ded4930842b46e9507372f0b1b963James Dongend_of_stream
760c1bc742181ded4930842b46e9507372f0b1b963James Dong    MVN r0, #0
770c1bc742181ded4930842b46e9507372f0b1b963James Dong    BX  lr
780c1bc742181ded4930842b46e9507372f0b1b963James Dong;//    POP      {r4-r6,pc}
790c1bc742181ded4930842b46e9507372f0b1b963James Dong
800c1bc742181ded4930842b46e9507372f0b1b963James Dong    END
810c1bc742181ded4930842b46e9507372f0b1b963James Dong
820c1bc742181ded4930842b46e9507372f0b1b963James Dong
83