summaryrefslogtreecommitdiffstats
path: root/encoder/ia_basic_ops40.h
diff options
context:
space:
mode:
authorRam Mohan <ram.mohan@ittiam.com>2018-10-05 18:05:06 +0530
committerRay Essick <essick@google.com>2019-02-18 07:43:11 -0800
commit69da5e22f66880b785b8d9d9b2b0ca706ac24d91 (patch)
treef74d679fa97b370f412b864781c3bc03bde0e256 /encoder/ia_basic_ops40.h
parente9568e04fc0749e3b3ad8bdcce61163f0f08d894 (diff)
downloadplatform_external_libhevc-69da5e22f66880b785b8d9d9b2b0ca706ac24d91.tar.gz
platform_external_libhevc-69da5e22f66880b785b8d9d9b2b0ca706ac24d91.tar.bz2
platform_external_libhevc-69da5e22f66880b785b8d9d9b2b0ca706ac24d91.zip
libhevcenc: Initial commit
Test: hevcenc -c vid_enc_cfg.txt Bug: 110456253 Test: CtsMediaTests/VideoEncoder Change-Id: I9df8143709c3fe5d2c8398974a16529a3f8b8ebc
Diffstat (limited to 'encoder/ia_basic_ops40.h')
-rw-r--r--encoder/ia_basic_ops40.h1057
1 files changed, 1057 insertions, 0 deletions
diff --git a/encoder/ia_basic_ops40.h b/encoder/ia_basic_ops40.h
new file mode 100644
index 0000000..826f8c1
--- /dev/null
+++ b/encoder/ia_basic_ops40.h
@@ -0,0 +1,1057 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *****************************************************************************
+ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
+*/
+
+/*****************************************************************************/
+/* */
+/* file name : ia_basic_ops40.h */
+/* */
+/* description : this file has all basic operations, which have */
+/* 40 bit intermediate operations */
+/* */
+/* list of functions: 1. norm40 */
+/* 2. add32_shr40 */
+/* 3. sub32_shr40 */
+/* 4. mult32x16in32_shl */
+/* 5. mult32x16in32 */
+/* 6. mult32x16in32_shl_sat */
+/* 7. mult32_shl */
+/* 8. mult32 */
+/* 9. mult32_shl_sat */
+/* 10.mac32x16in32 */
+/* 11.mac32x16in32_shl */
+/* 12.mac32x16in32_shl_sat */
+/* 13.mac32 */
+/* 14.mac32_shl */
+/* 15.mac32_shl_sat */
+/* 16.msu32x16in32 */
+/* 17.msu32x16in32_shl */
+/* 18.msu32x16in32_shl_sat */
+/* 19.msu32 */
+/* 20.msu32_shl */
+/* 21.msu32_shl_sat */
+/* 22.mac3216_arr40 */
+/* 23.mac32_arr40 */
+/* 24.mac16_arr40 */
+/* 25.add32_arr40 */
+/* */
+/* issues / problems: none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+#ifndef __IA_BASIC_OPS40_H__
+#define __IA_BASIC_OPS40_H__
+
+/*****************************************************************************/
+/* file includes */
+/* ia_type_def.h */
+/* ia_basic_ops32.h */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* */
+/* function name : norm40 */
+/* */
+/* description : normalize input to 32 bits, return denormalizing info */
+/* static function */
+/* */
+/* inputs : WORD40 *in */
+/* */
+/* globals : none */
+/* */
+/* processing : if input above 32_bits then only the upper 8 bits */
+/* normalized to fit in 32_bits else normal 32_bit norming */
+/* */
+/* outputs : normalized 32 bit value */
+/* */
+/* returns : WORD16 exponent */
+/* */
+/* assumptions : if supplied input is 0 the result returned is 31 */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD16 norm40(WORD40 *in)
+{
+ WORD16 expo;
+ WORD32 tempo;
+ WORD40 cmp_val = (WORD40)-2147483648.0;
+
+ if(0 == (*in))
+ return 31;
+
+ if(((*in) <= 0x7fffffff) && ((WORD40)(*in) >= cmp_val))
+ {
+ tempo = (WORD32)(*in);
+ expo = norm32(tempo);
+ *in = tempo << expo;
+
+ return (expo);
+ }
+
+ tempo = (WORD32)((*in) >> 31);
+ expo = 31 - (norm32(tempo));
+ *in = (*in) >> expo;
+
+ return (-expo);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : add32_shr40 */
+/* */
+/* description : adds two numbers and right shifts once */
+/* */
+/* inputs : WORD32 a, WORD32 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : add and right shift */
+/* */
+/* returns : WORD32 sum */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 add32_shr40(WORD32 a, WORD32 b)
+{
+ WORD40 sum;
+
+ sum = (WORD40)a + (WORD40)b;
+ sum = sum >> 1;
+
+ return ((WORD32)sum);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : sub32_shr40 */
+/* */
+/* description : subtracts and right shifts once */
+/* */
+/* inputs : WORD32 a, WORD32 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : substract and right shift */
+/* */
+/* returns : WORD32 sum */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 sub32_shr40(WORD32 a, WORD32 b)
+{
+ WORD40 sum;
+
+ sum = (WORD40)a - (WORD40)b;
+ sum = sum >> 1;
+
+ return ((WORD32)sum);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32x16in32_shl */
+/* */
+/* description : multiply WORD32 with WORD16 return bits 46 to 15 */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD16 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and right shift by 15 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mult32x16in32_shl(WORD32 a, WORD16 b)
+{
+ WORD32 result;
+ LWORD64 temp_result;
+
+ temp_result = (LWORD64)a * (LWORD64)b;
+
+ result = (WORD32)((temp_result + 16384) >> 15);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32x16in32 */
+/* */
+/* description : multiply WORD32 with WORD16 return bits 47 to 16 */
+/* */
+/* inputs : WORD32 a, WORD16 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and right shift by 16 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mult32x16in32(WORD32 a, WORD16 b)
+{
+ WORD32 result;
+ LWORD64 temp_result;
+
+ temp_result = (LWORD64)a * (LWORD64)b;
+
+ result = (WORD32)((temp_result + 16384) >> 16);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32x16in32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD16 return bits 46 to 15 */
+/* take care of saturation (MIN32 x MIN16 = MAX32) */
+/* */
+/* inputs : WORD32 a, WORD16 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns return MAX32 else */
+/* multiply and right shift by 15 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mult32x16in32_shl_sat(WORD32 a, WORD16 b)
+{
+ WORD32 result;
+
+ if(a == (WORD32)0x80000000 && b == (WORD16)0x8000)
+ {
+ result = (WORD32)0x7fffffff;
+ }
+ else
+ {
+ result = mult32x16in32_shl(a, b);
+ }
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32_shl */
+/* */
+/* description : multiply WORD32 with WORD32 return bits 62 to 31 */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD32 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and right shift by 31 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mult32_shl(WORD32 a, WORD32 b)
+{
+ WORD32 result;
+ LWORD64 temp_result;
+
+ temp_result = (LWORD64)a * (LWORD64)b;
+ result = (WORD32)(temp_result >> 31);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32 */
+/* */
+/* description : multiply WORD32 with WORD32 return bits 63 to 32 */
+/* */
+/* inputs : WORD32 a, WORD16 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and right shift by 32 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mult32(WORD32 a, WORD32 b)
+{
+ WORD32 result;
+ LWORD64 temp_result;
+
+ temp_result = (LWORD64)a * (LWORD64)b;
+ result = (WORD32)(temp_result >> 32);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mult32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD32 return bits 62 to 31 */
+/* take care of saturation (MIN32 x MIN32 = MAX32) */
+/* */
+/* inputs : WORD32 a, WORD32 b */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns return MAX32 else */
+/* multiply and right shift by 31 */
+/* */
+/* returns : WORD32 result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+#define MPYHIRC(x, y) \
+ (((int)((short)(x >> 16) * (unsigned short)(y & 0x0000FFFF) + 0x4000) >> 15) + \
+ ((int)((short)(x >> 16) * (short)((y) >> 16)) << 1))
+
+#define MPYLUHS(x, y) ((int)((unsigned short)(x & 0x0000FFFF) * (short)(y >> 16)))
+
+static PLATFORM_INLINE WORD32 mult32_shl_sat(WORD32 a, WORD32 b)
+{
+ WORD32 high;
+
+ high = (MPYHIRC(a, b) + (MPYLUHS(a, b) >> 15));
+
+ return high;
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32x16in32 */
+/* */
+/* description : multiply WORD32 with WORD16 add bits 47 to 16 to acc */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 16 & add to acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32x16in32(WORD32 a, WORD32 b, WORD16 c)
+{
+ WORD32 result;
+
+ result = a + mult32x16in32(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32x16in32_shl */
+/* */
+/* description : multiply WORD32 with WORD16 add bits 46 to 15 to acc */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 15 & add to acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32x16in32_shl(WORD32 a, WORD32 b, WORD16 c)
+{
+ WORD32 result;
+
+ result = a + mult32x16in32_shl(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32x16in32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD16 add bits 46 to 15 to acc */
+/* takes care of saturation in multiply and addition */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns add MAX32 else multiply, */
+/* right shift by 15 & add to acc with saturation */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32x16in32_shl_sat(WORD32 a, WORD32 b, WORD16 c)
+{
+ return (add32_sat(a, mult32x16in32_shl_sat(b, c)));
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32 */
+/* */
+/* description : multiply WORD32 with WORD32 add bits 63 to 32 to acc */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 32 & add to acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32(WORD32 a, WORD32 b, WORD32 c)
+{
+ WORD32 result;
+
+ result = a + mult32(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32_shl */
+/* */
+/* description : multiply WORD32 with WORD32 add bits 62 to 31 to acc */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 31 & add to acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32_shl(WORD32 a, WORD32 b, WORD32 c)
+{
+ WORD32 result;
+
+ result = a + mult32_shl(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD32 add bits 62 to 31 to acc */
+/* takes care of saturation in multiply and addition */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns add MAX32 else multiply, */
+/* right shift by 31 & add to acc with saturation */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32_shl_sat(WORD32 a, WORD32 b, WORD32 c)
+{
+ return (add32_sat(a, mult32_shl_sat(b, c)));
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32x16in32 */
+/* */
+/* description : multiply WORD32 with WORD16 sub bits 47 to 16 from acc */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 16 & sub from acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32x16in32(WORD32 a, WORD32 b, WORD16 c)
+{
+ WORD32 result;
+
+ result = a - mult32x16in32(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32x16in32_shl */
+/* */
+/* description : multiply WORD32 with WORD16 sub bits 46 to 15 from acc */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 15 & sub from acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32x16in32_shl(WORD32 a, WORD32 b, WORD16 c)
+{
+ WORD32 result;
+
+ result = a - mult32x16in32_shl(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32x16in32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD16 sub bits 46 to 15 from acc */
+/* takes care of saturation in multiply and addition */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD16 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns sub MAX32 else multiply, */
+/* right shift by 15 & sub from acc with saturation */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32x16in32_shl_sat(WORD32 a, WORD32 b, WORD16 c)
+{
+ return (sub32_sat(a, mult32x16in32_shl_sat(b, c)));
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32 */
+/* */
+/* description : multiply WORD32 with WORD32 sub bits 63 to 32 from acc */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 32 & sub from acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32(WORD32 a, WORD32 b, WORD32 c)
+{
+ WORD32 result;
+
+ result = a - mult32(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32_shl */
+/* */
+/* description : multiply WORD32 with WORD32 sub bits 62 to 31 from acc */
+/* doesnt take care of saturation */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply, right shift by 31 & sub from acc */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32_shl(WORD32 a, WORD32 b, WORD32 c)
+{
+ WORD32 result;
+
+ result = a - mult32_shl(b, c);
+
+ return (result);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : msu32_shl_sat */
+/* */
+/* description : multiply WORD32 with WORD32 sub bits 62 to 31 from acc */
+/* takes care of saturation in multiply and addition */
+/* */
+/* inputs : WORD32 a, WORD32 b, WORD32 c */
+/* */
+/* outputs : none */
+/* */
+/* globals : none */
+/* */
+/* processing : if input mi_ns sub MAX32 else multiply, */
+/* right shift by 31 & sub from acc with saturation */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 msu32_shl_sat(WORD32 a, WORD32 b, WORD32 c)
+{
+ return (sub32_sat(a, mult32_shl_sat(b, c)));
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac3216_arr40 */
+/* */
+/* description : returns normalized 32 bit accumulated result and */
+/* denormalizing info */
+/* */
+/* inputs : WORD32 x[], WORD16 y[], LOOPINDEX length */
+/* */
+/* outputs : WORD16 *q_val */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and accumalate in WORD40 finally normalize */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* assumptions : length < 256 for strict definition of WORD40 */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac3216_arr40(WORD32 *x, WORD16 *y, LOOPINDEX length, WORD16 *q_val)
+{
+ LOOPINDEX i;
+ WORD40 sum = 0;
+
+ for(i = 0; i < length; i++)
+ {
+ sum += (WORD40)(mult32x16in32(x[i], y[i]));
+ }
+
+ *q_val = norm40(&sum);
+
+ return (WORD32)sum;
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac32_arr40 */
+/* */
+/* description : returns normalized 32 bit accumulated result and */
+/* denormalizing info */
+/* */
+/* inputs : WORD32 x[], WORD32 y[], LOOPINDEX length */
+/* */
+/* outputs : WORD16 *q_val */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and accumalate in WORD40 finally normalize */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* assumptions : length < 256 for strict definition of WORD40 */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac32_arr40(WORD32 *x, WORD32 *y, LOOPINDEX length, WORD16 *q_val)
+{
+ LOOPINDEX i;
+ WORD40 sum = 0;
+
+ for(i = 0; i < length; i++)
+ {
+ sum += (WORD40)(mult32(x[i], y[i]));
+ }
+
+ *q_val = norm40(&sum);
+
+ return ((WORD32)sum);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : mac16_arr40 */
+/* */
+/* description : returns normalized 32 bit accumulated result and */
+/* denormalizing info */
+/* */
+/* inputs : WORD16 x[], WORD16 y[], LOOPINDEX length */
+/* */
+/* outputs : WORD16 *q_val */
+/* */
+/* globals : none */
+/* */
+/* processing : multiply and accumalate in WORD40 finally normalize */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* assumptions : length < 256 for strict definition of WORD40 */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 mac16_arr40(WORD16 *x, WORD16 *y, LOOPINDEX length, WORD16 *q_val)
+{
+ LOOPINDEX i;
+ WORD40 sum = 0;
+
+ for(i = 0; i < length; i++)
+ {
+ sum += (WORD40)((WORD32)x[i] * (WORD32)y[i]);
+ }
+
+ *q_val = norm40(&sum);
+
+ return ((WORD32)sum);
+}
+
+/*****************************************************************************/
+/* */
+/* function name : add32_arr40 */
+/* */
+/* description : returns normalized 32 bit accumulated result and */
+/* denormalizing info */
+/* */
+/* inputs : WORD32 x[], LOOPINDEX length */
+/* */
+/* outputs : WORD16 *q_val */
+/* */
+/* globals : none */
+/* */
+/* processing : accumalate in WORD40 finally normalize */
+/* */
+/* returns : WORD32 accumulated result */
+/* */
+/* assumptions : length < 256 for strict definition of WORD40 */
+/* */
+/* issues : none */
+/* */
+/* revision history : */
+/* */
+/* DD MM YYYY author changes */
+/* 06 12 2002 ashok M/chetan K created */
+/* 21 11 2003 raghavendra K R modified(bug fixes) */
+/* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
+/* */
+/*****************************************************************************/
+
+static PLATFORM_INLINE WORD32 add32_arr40(WORD32 *in_arr, LOOPINDEX length, WORD16 *q_val)
+{
+ LOOPINDEX i;
+ WORD40 sum = 0;
+
+ for(i = 0; i < length; i++)
+ {
+ sum += (WORD40)in_arr[i];
+ }
+
+ *q_val = norm40(&sum);
+
+ return ((WORD32)sum);
+}
+
+#endif /* __IA_BASIC_OPS40_H__ */