1*b17ab470SRichard Henderson #include <sys/mman.h>
2*b17ab470SRichard Henderson #include <unistd.h>
3*b17ab470SRichard Henderson #include <signal.h>
4*b17ab470SRichard Henderson #include <stdlib.h>
5*b17ab470SRichard Henderson #include <stdio.h>
6*b17ab470SRichard Henderson #include <assert.h>
7*b17ab470SRichard Henderson
8*b17ab470SRichard Henderson static void *expected;
9*b17ab470SRichard Henderson
sigsegv(int sig,siginfo_t * info,void * vuc)10*b17ab470SRichard Henderson void sigsegv(int sig, siginfo_t *info, void *vuc)
11*b17ab470SRichard Henderson {
12*b17ab470SRichard Henderson ucontext_t *uc = vuc;
13*b17ab470SRichard Henderson
14*b17ab470SRichard Henderson assert(info->si_addr == expected);
15*b17ab470SRichard Henderson uc->uc_mcontext.pc += 4;
16*b17ab470SRichard Henderson }
17*b17ab470SRichard Henderson
main()18*b17ab470SRichard Henderson int main()
19*b17ab470SRichard Henderson {
20*b17ab470SRichard Henderson struct sigaction sa = {
21*b17ab470SRichard Henderson .sa_sigaction = sigsegv,
22*b17ab470SRichard Henderson .sa_flags = SA_SIGINFO
23*b17ab470SRichard Henderson };
24*b17ab470SRichard Henderson
25*b17ab470SRichard Henderson void *page;
26*b17ab470SRichard Henderson long ofs;
27*b17ab470SRichard Henderson
28*b17ab470SRichard Henderson if (sigaction(SIGSEGV, &sa, NULL) < 0) {
29*b17ab470SRichard Henderson perror("sigaction");
30*b17ab470SRichard Henderson return EXIT_FAILURE;
31*b17ab470SRichard Henderson }
32*b17ab470SRichard Henderson
33*b17ab470SRichard Henderson page = mmap(0, getpagesize(), PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0);
34*b17ab470SRichard Henderson if (page == MAP_FAILED) {
35*b17ab470SRichard Henderson perror("mmap");
36*b17ab470SRichard Henderson return EXIT_FAILURE;
37*b17ab470SRichard Henderson }
38*b17ab470SRichard Henderson
39*b17ab470SRichard Henderson ofs = 0x124;
40*b17ab470SRichard Henderson expected = page + ofs;
41*b17ab470SRichard Henderson
42*b17ab470SRichard Henderson asm("ptrue p0.d, vl1\n\t"
43*b17ab470SRichard Henderson "dup z0.d, %0\n\t"
44*b17ab470SRichard Henderson "ldnt1h {z1.d}, p0/z, [z0.d, %1]\n\t"
45*b17ab470SRichard Henderson "dup z1.d, %1\n\t"
46*b17ab470SRichard Henderson "ldnt1h {z0.d}, p0/z, [z1.d, %0]"
47*b17ab470SRichard Henderson : : "r"(page), "r"(ofs) : "v0", "v1");
48*b17ab470SRichard Henderson
49*b17ab470SRichard Henderson return EXIT_SUCCESS;
50*b17ab470SRichard Henderson }
51