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:  armVCCOMM_s.h
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;// ARM optimized OpenMAX AC header file
270c1bc742181ded4930842b46e9507372f0b1b963James Dong;//
280c1bc742181ded4930842b46e9507372f0b1b963James Dong;// Formula used:
290c1bc742181ded4930842b46e9507372f0b1b963James Dong;// MACRO for calculating median for three values.
300c1bc742181ded4930842b46e9507372f0b1b963James Dong
310c1bc742181ded4930842b46e9507372f0b1b963James Dong
320c1bc742181ded4930842b46e9507372f0b1b963James Dong
330c1bc742181ded4930842b46e9507372f0b1b963James Dong    IF :LNOT::DEF:ARMVCCOMM_S_H
340c1bc742181ded4930842b46e9507372f0b1b963James Dong        INCLUDE armCOMM_s.h
350c1bc742181ded4930842b46e9507372f0b1b963James Dong    M_VARIANTS      CortexA8, ARM1136JS
360c1bc742181ded4930842b46e9507372f0b1b963James Dong
370c1bc742181ded4930842b46e9507372f0b1b963James Dong    IF ARM1136JS :LOR: CortexA8
380c1bc742181ded4930842b46e9507372f0b1b963James Dong
390c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;///*
400c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * Macro: M_MEDIAN3
410c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *
420c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * Description: Finds the median of three numbers
430c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *
440c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * Remarks:
450c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *
460c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * Parameters:
470c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * [in] x     First entry for the list of three numbers.
480c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * [in] y     Second entry for the list of three numbers.
490c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *            Input value may be corrupted at the end of
500c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *            the execution of this macro.
510c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * [in] z     Third entry of the list of three numbers.
520c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *            Input value corrupted at the end of the
530c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// *            execution of this macro.
540c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * [in] t     Temporary scratch  register.
550c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// * [out]z     Median of the three numbers.
560c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// */
570c1bc742181ded4930842b46e9507372f0b1b963James Dong
580c1bc742181ded4930842b46e9507372f0b1b963James Dong     MACRO
590c1bc742181ded4930842b46e9507372f0b1b963James Dong
600c1bc742181ded4930842b46e9507372f0b1b963James Dong     M_MEDIAN3 $x, $y, $z, $t
610c1bc742181ded4930842b46e9507372f0b1b963James Dong
620c1bc742181ded4930842b46e9507372f0b1b963James Dong     SUBS  $t, $y, $z; // if (y < z)
630c1bc742181ded4930842b46e9507372f0b1b963James Dong     ADDLT $z, $z, $t; //  swap y and z
640c1bc742181ded4930842b46e9507372f0b1b963James Dong     SUBLT $y, $y, $t;
650c1bc742181ded4930842b46e9507372f0b1b963James Dong
660c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// Now z' <= y', so there are three cases for the
670c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// median value, depending on x.
680c1bc742181ded4930842b46e9507372f0b1b963James Dong
690c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// 1) x <= z'      <= y'      : median value is z'
700c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// 2)      z' <= x <= y'      : median value is x
710c1bc742181ded4930842b46e9507372f0b1b963James Dong     ;// 3)      z'      <= y' <= x : median value is y'
720c1bc742181ded4930842b46e9507372f0b1b963James Dong
730c1bc742181ded4930842b46e9507372f0b1b963James Dong     CMP   $z, $x;     // if ( x > min(y,z) )
740c1bc742181ded4930842b46e9507372f0b1b963James Dong     MOVLT $z, $x;     // ans = x
750c1bc742181ded4930842b46e9507372f0b1b963James Dong
760c1bc742181ded4930842b46e9507372f0b1b963James Dong     CMP   $x, $y;     // if ( x > max(y,z) )
770c1bc742181ded4930842b46e9507372f0b1b963James Dong     MOVGT $z, $y;     // ans = max(y,z)
780c1bc742181ded4930842b46e9507372f0b1b963James Dong
790c1bc742181ded4930842b46e9507372f0b1b963James Dong     MEND
800c1bc742181ded4930842b46e9507372f0b1b963James Dong    ENDIF
810c1bc742181ded4930842b46e9507372f0b1b963James Dong
820c1bc742181ded4930842b46e9507372f0b1b963James Dong
830c1bc742181ded4930842b46e9507372f0b1b963James Dong
840c1bc742181ded4930842b46e9507372f0b1b963James Dong    ENDIF ;// ARMACCOMM_S_H
850c1bc742181ded4930842b46e9507372f0b1b963James Dong
8678e52bfac041d71ce53b5b13c2abf78af742b09dLajos Molnar END
87