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