mc_translate.c: enable further uses of DLexpensive for scalar EQ/NE comparisons
[valgrind.git] / none / tests / amd64 / mpx.c
blobae713d6a884cd839dd9ec108a4278c438066e229
1 int
2 main (int argc, char **argv)
4 // Since MPX is disabled all these are just NOPS.
5 // Some of these instructions are just random.
6 // Once the GCC support is merged creating real test cases will be easier.
7 // http://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler
9 // This is what ld.so does in _dl_runtime_resolve to save the bnds.
10 asm ("bndmov %bnd0, (%rsp)");
11 asm ("bndmov %bnd1, 16(%rsp)");
12 asm ("bndmov %bnd2, 32(%rsp)");
13 asm ("bndmov %bnd3, 48(%rsp)");
15 // Create a bnd, check lower and upper...
16 asm ("bndmk (%rax,%rdx), %bnd0");
17 asm ("bndcl (%rax,%rdi,4), %bnd0");
18 asm ("bndcu 3(%rax,%rdi,4), %bnd0");
19 asm ("bndcn 3(%rax,%rdi,4), %bnd0");
21 // Load bnd pointer and update...
22 asm ("bndldx 3(%rbx,%rdx), %bnd2");
23 asm ("bndstx %bnd2, 3(,%r12,1)");
25 // "bnd" prefixed call, return and jmp...
26 asm ("bnd call foo\n\
27 bnd jmp end\n\
28 foo: bnd ret\n\
29 end: nop");
31 // And set the bnds back...
32 asm ("bndmov 48(%rsp), %bnd3");
33 asm ("bndmov 32(%rsp), %bnd2");
34 asm ("bndmov 16(%rsp), %bnd1");
35 asm ("bndmov (%rsp), %bnd0");
37 return 0;