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 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 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