armVCCOMM_s.h revision 21e525fdcc234c22d843a8bf1a4ec35c4b376314
1;// 2;// 3;// File Name: armVCCOMM_s.h 4;// OpenMAX DL: v1.0.2 5;// Revision: 12290 6;// Date: Wednesday, April 9, 2008 7;// 8;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 9;// 10;// 11;// 12;// ARM optimized OpenMAX AC header file 13;// 14;// Formula used: 15;// MACRO for calculating median for three values. 16 17 18 19 IF :LNOT::DEF:ARMVCCOMM_S_H 20 INCLUDE armCOMM_s.h 21 M_VARIANTS CortexA8, ARM1136JS 22 23 IF ARM1136JS :LOR: CortexA8 24 25 ;///* 26 ;// * Macro: M_MEDIAN3 27 ;// * 28 ;// * Description: Finds the median of three numbers 29 ;// * 30 ;// * Remarks: 31 ;// * 32 ;// * Parameters: 33 ;// * [in] x First entry for the list of three numbers. 34 ;// * [in] y Second entry for the list of three numbers. 35 ;// * Input value may be corrupted at the end of 36 ;// * the execution of this macro. 37 ;// * [in] z Third entry of the list of three numbers. 38 ;// * Input value corrupted at the end of the 39 ;// * execution of this macro. 40 ;// * [in] t Temporary scratch register. 41 ;// * [out]z Median of the three numbers. 42 ;// */ 43 44 MACRO 45 46 M_MEDIAN3 $x, $y, $z, $t 47 48 SUBS $t, $y, $z; // if (y < z) 49 ADDLT $z, $z, $t; // swap y and z 50 SUBLT $y, $y, $t; 51 52 ;// Now z' <= y', so there are three cases for the 53 ;// median value, depending on x. 54 55 ;// 1) x <= z' <= y' : median value is z' 56 ;// 2) z' <= x <= y' : median value is x 57 ;// 3) z' <= y' <= x : median value is y' 58 59 CMP $z, $x; // if ( x > min(y,z) ) 60 MOVLT $z, $x; // ans = x 61 62 CMP $x, $y; // if ( x > max(y,z) ) 63 MOVGT $z, $y; // ans = max(y,z) 64 65 MEND 66 ENDIF 67 68 69 70 ENDIF ;// ARMACCOMM_S_H 71 72 END