12c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/* 22c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2004-2010 NXP Software 32c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Copyright (C) 2010 The Android Open Source Project 42c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 52c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 62c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * you may not use this file except in compliance with the License. 72c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * You may obtain a copy of the License at 82c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 92c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * http://www.apache.org/licenses/LICENSE-2.0 102c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * 112c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * Unless required by applicable law or agreed to in writing, software 122c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 132c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * See the License for the specific language governing permissions and 152c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent * limitations under the License. 162c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent */ 172c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 182c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/********************************************************************************** 192c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent INCLUDE FILES 202c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 212c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 222c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent#include "VectorArithmetic.h" 232c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 242c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 252c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/********************************************************************************** 262c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent FUNCTION ADD2_SAT_32X32 272c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent***********************************************************************************/ 282c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 292c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurentvoid Add2_Sat_32x32( const LVM_INT32 *src, 302c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 *dst, 312c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 n ) 322c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent{ 332c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT32 a,b,c; 342c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent LVM_INT16 ii; 352c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent for (ii = n; ii != 0; ii--) 362c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 372c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent a=*src; 382c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent src++; 392c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 402c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent b=*dst; 412c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent c=a+b; 422c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if ((((c ^ a) & (c ^ b)) >> 31)!=0) /* overflow / underflow */ 432c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 442c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent if(a<0) 452c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 462c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent c=0x80000000l; 472c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 482c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent else 492c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent { 502c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent c=0x7FFFFFFFl; 512c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 522c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 532c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 542c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent *dst = c; 552c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent dst++; 562c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent } 572c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent return; 582c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent} 592c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent 60d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#ifdef BUILD_FLOAT 61d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katurivoid Add2_Sat_Float( const LVM_FLOAT *src, 62d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT *dst, 63d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_INT16 n ) 64d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri{ 65d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_FLOAT Temp; 66d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri LVM_INT16 ii; 67d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri for (ii = n; ii != 0; ii--) 68d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 69d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri Temp = ((LVM_FLOAT) *src) + ((LVM_FLOAT) *dst); 70d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri src++; 71d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri 72d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri if (Temp > 1.000000f) 73d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 74d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri *dst = 1.000000f; 75d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 76d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri else if (Temp < -1.000000f) 77d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 78d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri *dst = -1.000000f; 79d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 80d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri else 81d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri { 82d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri *dst = Temp; 83d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 84d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri dst++; 85d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri } 86d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri return; 87d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri} 88d7d013446a64c6de9f0f2dfe098a721b140e0b48Ramesh Katuri#endif 892c8e5cab3faa6d360e222b7a6c40a80083d021acEric Laurent/**********************************************************************************/ 90