1 /* { dg-require-effective-target mmap } */
2 /* { dg-additional-options "-mssse3" { target x86_64-*-* i?86-*-* } } */
9 #define MMAP_SIZE 0x20000
10 #define ADDRESS 0x1122000000
11 #define TYPE unsigned short
15 #define MAP_ANONYMOUS MAP_ANON
18 void __attribute__((noipa
))
19 loop (TYPE
*restrict x
, TYPE
*restrict y
)
21 for (int i
= 0; i
< COUNT
; ++i
)
23 x
[i
* 8] = y
[i
* GROUP_SIZE
] + 1;
24 x
[i
* 8 + 1] = y
[i
* GROUP_SIZE
] + 2;
25 x
[i
* 8 + 2] = y
[i
* GROUP_SIZE
+ 1] + 3;
26 x
[i
* 8 + 3] = y
[i
* GROUP_SIZE
+ 1] + 4;
27 x
[i
* 8 + 4] = y
[i
* GROUP_SIZE
] + 5;
28 x
[i
* 8 + 5] = y
[i
* GROUP_SIZE
] + 6;
29 x
[i
* 8 + 6] = y
[i
* GROUP_SIZE
+ 1] + 7;
30 x
[i
* 8 + 7] = y
[i
* GROUP_SIZE
+ 1] + 8;
44 y
= mmap ((void *) ADDRESS
, MMAP_SIZE
, PROT_READ
| PROT_WRITE
,
45 MAP_PRIVATE
| MAP_ANONYMOUS
, -1, 0);
52 end_y
= (TYPE
*) ((char *) y
+ MMAP_SIZE
);
54 loop (x
, end_y
- COUNT
* GROUP_SIZE
);
59 /* Whether or not peeling for gaps is required depends on the ability of
60 the target to compose a vector from two-element bits. */