1 /*
2 * Copyright (C) 2004-2010 NXP Software
3 * Copyright (C) 2010 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /**********************************************************************************
19 INCLUDE FILES
20 ***********************************************************************************/
21
22 #include "VectorArithmetic.h"
23
24 /**********************************************************************************
25 FUNCTION Shift_Sat_v16xv16
26 ***********************************************************************************/
27 #ifndef BUILD_FLOAT
Shift_Sat_v16xv16(const LVM_INT16 val,const LVM_INT16 * src,LVM_INT16 * dst,LVM_INT16 n)28 void Shift_Sat_v16xv16 (const LVM_INT16 val,
29 const LVM_INT16 *src,
30 LVM_INT16 *dst,
31 LVM_INT16 n)
32 {
33 LVM_INT32 temp;
34 LVM_INT32 ii;
35 LVM_INT16 RShift;
36 if(val>0)
37 {
38 for (ii = n; ii != 0; ii--)
39 {
40 temp = (LVM_INT32)*src;
41 src++;
42
43 temp = temp << val;
44
45 if (temp > 0x00007FFF)
46 {
47 *dst = 0x7FFF;
48 }
49 else if (temp < -0x00008000)
50 {
51 *dst = - 0x8000;
52 }
53 else
54 {
55 *dst = (LVM_INT16)temp;
56 }
57 dst++;
58 }
59 }
60 else if(val<0)
61 {
62 RShift=(LVM_INT16)(-val);
63
64 for (ii = n; ii != 0; ii--)
65 {
66 *dst = (LVM_INT16)(*src >> RShift);
67 dst++;
68 src++;
69 }
70 }
71 else
72 {
73 if(src!=dst)
74 {
75 Copy_16(src,dst,n);
76 }
77 }
78 return;
79 }
80 #endif
81 /**********************************************************************************/
82