10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/******************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  ihevc_mem_fns_atom_intr.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Functions used for memory operations
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  Ittiam
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* File Includes                                                             */
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/*****************************************************************************/
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h>
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h>
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h>
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_func_selector.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_mem_fns.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <immintrin.h>
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   memcpy of a 8,16 or 32 bytes
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   Does memcpy of 8bit data from source to destination for 8,16 or 32 number of bytes
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_dst
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD8 pointer to the destination
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_src
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD8 pointer to the source
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] num_bytes
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  number of bytes to copy
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_memcpy_mul_8_ssse3(UWORD8 *pu1_dst, UWORD8 *pu1_src, UWORD32 num_bytes)
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    int col;
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(col = num_bytes; col >= 8; col -= 8)
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        __m128i src_temp16x8b;
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        src_temp16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src += 8;
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        _mm_storel_epi64((__m128i *)(pu1_dst), src_temp16x8b);
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += 8;
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   memset of a 8,16 or 32 bytes
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   Does memset of 8bit data for 8,16 or 32 number of bytes
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu1_dst
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD8 pointer to the destination
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] value
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD8 value used for memset
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] num_bytes
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  number of bytes to set
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_memset_mul_8_ssse3(UWORD8 *pu1_dst, UWORD8 value, UWORD32 num_bytes)
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    int col;
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    __m128i src_temp16x8b;
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    src_temp16x8b = _mm_set1_epi8(value);
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(col = num_bytes; col >= 8; col -= 8)
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        _mm_storel_epi64((__m128i *)(pu1_dst), src_temp16x8b);
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_dst += 8;
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   memset of 16bit data of a 8,16 or 32 bytes
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par Description:
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *   Does memset of 16bit data for 8,16 or 32 number of bytes
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] pu2_dst
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD8 pointer to the destination
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] value
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  UWORD16 value used for memset
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @param[in] num_words
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  number of words to set
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @returns
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *  None
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *******************************************************************************
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevc_memset_16bit_mul_8_ssse3(UWORD16 *pu2_dst, UWORD16 value, UWORD32 num_words)
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    int col;
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    __m128i src_temp16x8b;
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    src_temp16x8b = _mm_set1_epi16(value);
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    for(col = num_words; col >= 8; col -= 8)
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        _mm_storeu_si128((__m128i *)(pu2_dst), src_temp16x8b);
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu2_dst += 8;
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
169