1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*---------------------------------------------------------------*/
3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--- begin                            host_generic_simd256.c ---*/
4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*---------------------------------------------------------------*/
5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*
7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This file is part of Valgrind, a dynamic binary instrumentation
8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   framework.
9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   Copyright (C) 2012-2013 OpenWorks GbR
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      info@open-works.net
12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This program is free software; you can redistribute it and/or
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   modify it under the terms of the GNU General Public License as
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   published by the Free Software Foundation; either version 2 of the
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   License, or (at your option) any later version.
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This program is distributed in the hope that it will be useful, but
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   WITHOUT ANY WARRANTY; without even the implied warranty of
20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   General Public License for more details.
22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   You should have received a copy of the GNU General Public License
24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   along with this program; if not, write to the Free Software
25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   02110-1301, USA.
27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   The GNU General Public License is contained in the file COPYING.
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov*/
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* Generic helper functions for doing 256-bit SIMD arithmetic in cases
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   where the instruction selectors cannot generate code in-line.
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   These are purely back-end entities and cannot be seen/referenced
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   from IR. */
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "libvex_basictypes.h"
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "host_generic_simd256.h"
38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid VEX_REGPARM(3)
41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov     h_generic_calc_Perm32x8 ( /*OUT*/V256* res,
42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov                               V256* argL, V256* argR )
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[0] = argL->w32[ argR->w32[0] & 7 ];
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[1] = argL->w32[ argR->w32[1] & 7 ];
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[2] = argL->w32[ argR->w32[2] & 7 ];
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[3] = argL->w32[ argR->w32[3] & 7 ];
48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[4] = argL->w32[ argR->w32[4] & 7 ];
49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[5] = argL->w32[ argR->w32[5] & 7 ];
50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[6] = argL->w32[ argR->w32[6] & 7 ];
51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   res->w32[7] = argL->w32[ argR->w32[7] & 7 ];
52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov}
53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*---------------------------------------------------------------*/
56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--- end                              host_generic_simd256.c ---*/
57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*---------------------------------------------------------------*/
58