OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [i386/] [sse2-pinsrw.c] - Blame information for rev 695

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 691 jeremybenn
/* { dg-do run } */
2
/* { dg-require-effective-target sse2 } */
3
/* { dg-options "-O2 -msse2" } */
4
 
5
#ifndef CHECK_H
6
#define CHECK_H "sse2-check.h"
7
#endif
8
 
9
#ifndef TEST
10
#define TEST sse2_test
11
#endif
12
 
13
#include CHECK_H
14
 
15
#include <emmintrin.h>
16
#include <string.h>
17
 
18
#define msk0 0x00
19
#define msk1 0x01
20
#define msk2 0x02
21
#define msk3 0x03
22
#define msk4 0x04
23
#define msk5 0x05
24
#define msk6 0x06
25
#define msk7 0x07
26
 
27
static void
28
TEST (void)
29
{
30
  union
31
    {
32
      __m128i x;
33
      unsigned int i[4];
34
      unsigned short s[8];
35
    } res [8], val, tmp;
36
  int masks[8];
37
  unsigned short ins[4] = { 3, 4, 5, 6 };
38
  int i;
39
 
40
  val.i[0] = 0x35251505;
41
  val.i[1] = 0x75655545;
42
  val.i[2] = 0xB5A59585;
43
  val.i[3] = 0xF5E5D5C5;
44
 
45
  /* Check pinsrw imm8, r32, xmm.  */
46
  res[0].x = _mm_insert_epi16 (val.x, ins[0], msk0);
47
  res[1].x = _mm_insert_epi16 (val.x, ins[0], msk1);
48
  res[2].x = _mm_insert_epi16 (val.x, ins[0], msk2);
49
  res[3].x = _mm_insert_epi16 (val.x, ins[0], msk3);
50
  res[4].x = _mm_insert_epi16 (val.x, ins[0], msk4);
51
  res[5].x = _mm_insert_epi16 (val.x, ins[0], msk5);
52
  res[6].x = _mm_insert_epi16 (val.x, ins[0], msk6);
53
  res[7].x = _mm_insert_epi16 (val.x, ins[0], msk7);
54
 
55
  masks[0] = msk0;
56
  masks[1] = msk1;
57
  masks[2] = msk2;
58
  masks[3] = msk3;
59
  masks[4] = msk4;
60
  masks[5] = msk5;
61
  masks[6] = msk6;
62
  masks[7] = msk7;
63
 
64
  for (i = 0; i < 8; i++)
65
    {
66
      tmp.x = val.x;
67
      tmp.s[masks[i]] = ins[0];
68
      if (memcmp (&tmp, &res[i], sizeof (tmp)))
69
        abort ();
70
    }
71
 
72
  /* Check pinsrw imm8, m16, xmm.  */
73
  for (i = 0; i < 8; i++)
74
    {
75
      res[i].x = _mm_insert_epi16 (val.x, ins[i % 2], msk0);
76
      masks[i] = msk0;
77
    }
78
 
79
  for (i = 0; i < 8; i++)
80
    {
81
      tmp.x = val.x;
82
      tmp.s[masks[i]] = ins[i % 2];
83
      if (memcmp (&tmp, &res[i], sizeof (tmp)))
84
        abort ();
85
    }
86
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.