10c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// Copyright (C) 2007-2008 ARM Limited
378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//
478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// Licensed under the Apache License, Version 2.0 (the "License");
578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// you may not use this file except in compliance with the License.
678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// You may obtain a copy of the License at
778e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//
878e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//      http://www.apache.org/licenses/LICENSE-2.0
978e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//
1078e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// Unless required by applicable law or agreed to in writing, software
1178e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// distributed under the License is distributed on an "AS IS" BASIS,
1278e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1378e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// See the License for the specific language governing permissions and
1478e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;// limitations under the License.
1578e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//
1678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar;//
170c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
180c1bc742181ded4930842b46e9507372f0b1b963James Dong;// File Name:  armVCM4P10_Average_4x_Align_unsafe_s.s
190c1bc742181ded4930842b46e9507372f0b1b963James Dong;// OpenMAX DL: v1.0.2
200c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Revision:   12290
210c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Date:       Wednesday, April 9, 2008
220c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
230c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
240c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
250c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
260c1bc742181ded4930842b46e9507372f0b1b963James Dong
270c1bc742181ded4930842b46e9507372f0b1b963James Dong
280c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Functions:
290c1bc742181ded4930842b46e9507372f0b1b963James Dong;//     armVCM4P10_Average_4x4_Align<ALIGNMENT>_unsafe
300c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
310c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Implements Average of 4x4 with equation c = (a+b+1)>>1.
320c1bc742181ded4930842b46e9507372f0b1b963James Dong;// First operand will be at offset ALIGNMENT from aligned address
330c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Second operand will be at aligned location and will be used as output.
340c1bc742181ded4930842b46e9507372f0b1b963James Dong;// destination pointed by (pDst) for vertical interpolation.
350c1bc742181ded4930842b46e9507372f0b1b963James Dong;// This function needs to copy 4 bytes in horizontal direction
360c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
370c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Registers used as input for this function
380c1bc742181ded4930842b46e9507372f0b1b963James Dong;// r0,r1,r2,r3 where r2 containings aligned memory pointer and r3 step size
390c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
400c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Registers preserved for top level function
410c1bc742181ded4930842b46e9507372f0b1b963James Dong;// r4,r5,r6,r8,r9,r14
420c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
430c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Registers modified by the function
440c1bc742181ded4930842b46e9507372f0b1b963James Dong;// r7,r10,r11,r12
450c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
460c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Output registers
470c1bc742181ded4930842b46e9507372f0b1b963James Dong;// r2 - pointer to the aligned location
480c1bc742181ded4930842b46e9507372f0b1b963James Dong;// r3 - step size to this aligned location
490c1bc742181ded4930842b46e9507372f0b1b963James Dong
500c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE omxtypes_s.h
510c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE armCOMM_s.h
520c1bc742181ded4930842b46e9507372f0b1b963James Dong
530c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_VARIANTS ARM1136JS
540c1bc742181ded4930842b46e9507372f0b1b963James Dong
550c1bc742181ded4930842b46e9507372f0b1b963James Dong        EXPORT armVCM4P10_Average_4x4_Align0_unsafe
560c1bc742181ded4930842b46e9507372f0b1b963James Dong        EXPORT armVCM4P10_Average_4x4_Align2_unsafe
570c1bc742181ded4930842b46e9507372f0b1b963James Dong        EXPORT armVCM4P10_Average_4x4_Align3_unsafe
580c1bc742181ded4930842b46e9507372f0b1b963James Dong
590c1bc742181ded4930842b46e9507372f0b1b963James DongDEBUG_ON    SETL {FALSE}
600c1bc742181ded4930842b46e9507372f0b1b963James Dong
610c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Declare input registers
620c1bc742181ded4930842b46e9507372f0b1b963James DongpPred0          RN 0
630c1bc742181ded4930842b46e9507372f0b1b963James DongiPredStep0      RN 1
640c1bc742181ded4930842b46e9507372f0b1b963James DongpPred1          RN 2
650c1bc742181ded4930842b46e9507372f0b1b963James DongiPredStep1      RN 3
660c1bc742181ded4930842b46e9507372f0b1b963James DongpDstPred        RN 2
670c1bc742181ded4930842b46e9507372f0b1b963James DongiDstStep        RN 3
680c1bc742181ded4930842b46e9507372f0b1b963James Dong
690c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Declare other intermediate registers
700c1bc742181ded4930842b46e9507372f0b1b963James DongiPredA0         RN 10
710c1bc742181ded4930842b46e9507372f0b1b963James DongiPredA1         RN 11
720c1bc742181ded4930842b46e9507372f0b1b963James DongiPredB0         RN 12
730c1bc742181ded4930842b46e9507372f0b1b963James DongiPredB1         RN 14
740c1bc742181ded4930842b46e9507372f0b1b963James DongTemp1           RN 4
750c1bc742181ded4930842b46e9507372f0b1b963James DongTemp2           RN 5
760c1bc742181ded4930842b46e9507372f0b1b963James DongResultA         RN 5
770c1bc742181ded4930842b46e9507372f0b1b963James DongResultB         RN 4
780c1bc742181ded4930842b46e9507372f0b1b963James Dongr0x80808080     RN 7
790c1bc742181ded4930842b46e9507372f0b1b963James Dong
800c1bc742181ded4930842b46e9507372f0b1b963James Dong    IF ARM1136JS
810c1bc742181ded4930842b46e9507372f0b1b963James Dong
820c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// This function calculates average of 4x4 block
830c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pPred0 is at alignment offset 0 and pPred1 is alignment 4
840c1bc742181ded4930842b46e9507372f0b1b963James Dong
850c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Function header
860c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START armVCM4P10_Average_4x4_Align0_unsafe, r6
870c1bc742181ded4930842b46e9507372f0b1b963James Dong
880c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Code start
890c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         r0x80808080, =0x80808080
900c1bc742181ded4930842b46e9507372f0b1b963James Dong
910c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 1st load
920c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB0, [pPred1]
930c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA0, [pPred0], iPredStep0
940c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB1, [pPred1, iPredStep1]
950c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA1, [pPred0], iPredStep0
960c1bc742181ded4930842b46e9507372f0b1b963James Dong
970c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// (a+b+1)/2 = (a+256-(255-b))/2 = (a-(255-b))/2 + 128
980c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
990c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
1010c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
1020c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
1050c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
1060c1bc742181ded4930842b46e9507372f0b1b963James Dong
1070c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 2nd load
1080c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA0, [pPred0], iPredStep0
1090c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB0, [pPred1]
1100c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA1, [pPred0], iPredStep0
1110c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB1, [pPred1, iPredStep1]
1120c1bc742181ded4930842b46e9507372f0b1b963James Dong
1130c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
1140c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
1150c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
1160c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
1170c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
1180c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
1190c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
1200c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
1210c1bc742181ded4930842b46e9507372f0b1b963James DongEnd0
1220c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
1230c1bc742181ded4930842b46e9507372f0b1b963James Dong
1240c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// This function calculates average of 4x4 block
1250c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pPred0 is at alignment offset 2 and pPred1 is alignment 4
1260c1bc742181ded4930842b46e9507372f0b1b963James Dong
1270c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Function header
1280c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START armVCM4P10_Average_4x4_Align2_unsafe, r6
1290c1bc742181ded4930842b46e9507372f0b1b963James Dong
1300c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Code start
1310c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         r0x80808080, =0x80808080
1320c1bc742181ded4930842b46e9507372f0b1b963James Dong
1330c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 1st load
1340c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp1, [pPred0, #4]
1350c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA0, [pPred0], iPredStep0
1360c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB0, [pPred1]
1370c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredB1, [pPred1, iPredStep1]
1380c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       Temp2, [pPred0, #4]
1390c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA1, [pPred0], iPredStep0
1400c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
1410c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
1420c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA0, iPredA0, LSR #16
1430c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA0, iPredA0, Temp1, LSL #16
1440c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA1, iPredA1, LSR #16
1450c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA1, iPredA1, Temp2, LSL #16
1460c1bc742181ded4930842b46e9507372f0b1b963James Dong
1470c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// (a+b+1)/2 = (a+256-(255-b))/2 = (a-(255-b))/2 + 128
1480c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
1490c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
1500c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
1510c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
1520c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
1530c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
1540c1bc742181ded4930842b46e9507372f0b1b963James Dong
1550c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 2nd load
1560c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp1, [pPred0, #4]
1570c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR         iPredA0, [pPred0], iPredStep0
1580c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB0, [pPred1]
1590c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB1, [pPred1, iPredStep1]
1600c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp2, [pPred0, #4]
1610c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR         iPredA1, [pPred0], iPredStep0
1620c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
1630c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
1640c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA0, iPredA0, LSR #16
1650c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA0, iPredA0, Temp1, LSL #16
1660c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA1, iPredA1, LSR #16
1670c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA1, iPredA1, Temp2, LSL #16
1680c1bc742181ded4930842b46e9507372f0b1b963James Dong
1690c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
1700c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
1710c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
1720c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
1730c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
1740c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
1750c1bc742181ded4930842b46e9507372f0b1b963James DongEnd2
1760c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
1770c1bc742181ded4930842b46e9507372f0b1b963James Dong
1780c1bc742181ded4930842b46e9507372f0b1b963James Dong
1790c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// This function calculates average of 4x4 block
1800c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// pPred0 is at alignment offset 3 and pPred1 is alignment 4
1810c1bc742181ded4930842b46e9507372f0b1b963James Dong
1820c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Function header
1830c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_START armVCM4P10_Average_4x4_Align3_unsafe, r6
1840c1bc742181ded4930842b46e9507372f0b1b963James Dong
1850c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// Code start
1860c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         r0x80808080, =0x80808080
1870c1bc742181ded4930842b46e9507372f0b1b963James Dong
1880c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 1st load
1890c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp1, [pPred0, #4]
1900c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA0, [pPred0], iPredStep0
1910c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB0, [pPred1]
1920c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB1, [pPred1, iPredStep1]
1930c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp2, [pPred0, #4]
1940c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA1, [pPred0], iPredStep0
1950c1bc742181ded4930842b46e9507372f0b1b963James Dong
1960c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
1970c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
1980c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA0, iPredA0, LSR #24
1990c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA0, iPredA0, Temp1, LSL #8
2000c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA1, iPredA1, LSR #24
2010c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA1, iPredA1, Temp2, LSL #8
2020c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
2030c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
2040c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
2050c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
2060c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
2070c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
2080c1bc742181ded4930842b46e9507372f0b1b963James Dong
2090c1bc742181ded4930842b46e9507372f0b1b963James Dong        ;// 2nd load
2100c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp1, [pPred0, #4]
2110c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA0, [pPred0], iPredStep0
2120c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB0, [pPred1]
2130c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         iPredB1, [pPred1, iPredStep1]
2140c1bc742181ded4930842b46e9507372f0b1b963James Dong        LDR         Temp2, [pPred0, #4]
2150c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_LDR       iPredA1, [pPred0], iPredStep0
2160c1bc742181ded4930842b46e9507372f0b1b963James Dong
2170c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB0, iPredB0
2180c1bc742181ded4930842b46e9507372f0b1b963James Dong        MVN         iPredB1, iPredB1
2190c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA0, iPredA0, LSR #24
2200c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA0, iPredA0, Temp1, LSL #8
2210c1bc742181ded4930842b46e9507372f0b1b963James Dong        MOV         iPredA1, iPredA1, LSR #24
2220c1bc742181ded4930842b46e9507372f0b1b963James Dong        ORR         iPredA1, iPredA1, Temp2, LSL #8
2230c1bc742181ded4930842b46e9507372f0b1b963James Dong
2240c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultA, iPredA0, iPredB0
2250c1bc742181ded4930842b46e9507372f0b1b963James Dong        UHSUB8      ResultB, iPredA1, iPredB1
2260c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultA, ResultA, r0x80808080
2270c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultA, [pDstPred], iDstStep
2280c1bc742181ded4930842b46e9507372f0b1b963James Dong        EOR         ResultB, ResultB, r0x80808080
2290c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_STR       ResultB, [pDstPred], iDstStep
2300c1bc742181ded4930842b46e9507372f0b1b963James DongEnd3
2310c1bc742181ded4930842b46e9507372f0b1b963James Dong        M_END
2320c1bc742181ded4930842b46e9507372f0b1b963James Dong
2330c1bc742181ded4930842b46e9507372f0b1b963James Dong    ENDIF
2340c1bc742181ded4930842b46e9507372f0b1b963James Dong
2350c1bc742181ded4930842b46e9507372f0b1b963James Dong    END
23678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar
237