Shift_Sat_v16xv16.c revision 2c8e5cab3faa6d360e222b7a6c40a80083d021ac
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
20     $Author: beq07716 $
21     $Revision: 1000 $
22     $Date: 2010-06-28 13:08:20 +0200 (Mon, 28 Jun 2010) $
23
24***********************************************************************************/
25
26/**********************************************************************************
27   INCLUDE FILES
28***********************************************************************************/
29
30#include "VectorArithmetic.h"
31
32/**********************************************************************************
33   FUNCTION Shift_Sat_v16xv16
34***********************************************************************************/
35
36void Shift_Sat_v16xv16 (const   LVM_INT16   val,
37                        const   LVM_INT16   *src,
38                        LVM_INT16   *dst,
39                        LVM_INT16   n)
40{
41    LVM_INT32   temp;
42    LVM_INT32   ii;
43    LVM_INT16   RShift;
44    if(val>0)
45    {
46        for (ii = n; ii != 0; ii--)
47        {
48            temp = (LVM_INT32)*src;
49            src++;
50
51            temp = temp << val;
52
53            if (temp > 0x00007FFF)
54            {
55                *dst = 0x7FFF;
56            }
57            else if (temp < -0x00008000)
58            {
59                *dst = - 0x8000;
60            }
61            else
62            {
63                *dst = (LVM_INT16)temp;
64            }
65            dst++;
66        }
67    }
68    else if(val<0)
69    {
70        RShift=(LVM_INT16)(-val);
71
72        for (ii = n; ii != 0; ii--)
73        {
74            *dst = (LVM_INT16)(*src >> RShift);
75            dst++;
76            src++;
77        }
78    }
79    else
80    {
81        if(src!=dst)
82        {
83            Copy_16(src,dst,n);
84        }
85    }
86    return;
87}
88
89/**********************************************************************************/
90