Add a test program for the membarrier() system call
[valgrind.git] / exp-bbv / tests / amd64-linux / complex_rep.S
blob80b8c8c8fa7b5e9966f9a4a2af4679aeddc157ee
1 # When trying (and failing) to instrument at the basic block level
2 # I thought up a lot of corner-cases in the rep code.  This tries
3 # to catch some of them
5 # Performance counters give us 8207 insns
6 #    11 + 8*1024 + 3 = 8206
8         .globl _start   
9 _start: 
10         cld                             # we want these to happen forward
12         mov    $0xfeb131978,%rax        # value to store
14         # test back-to-back rep/stosb's
16         mov     $1024,%rcx
17         mov     $buffer1, %rdi          # set destination
18         rep     stosb                   # store 1024 times
19         rep     stosb                   # should store 0 times  
20         rep     stosb                   # should store 0 times
22         
23         # test stosb where cx is 0
24         
25         xor    %rcx,%rcx
26         mov    $buffer1, %rdi           # set destination
27         rep    stosb                    # should not load at all
28         
29         # test rep inside of a loop
30         
31         mov    $1024, %rbx
32 rep_loop:       
34         mov    $1024,%rcx
35         mov    $buffer1, %rdi           # set destination
36         rep    stosb
37         
38         mov    $1024,%rcx
39         mov    $buffer1, %rdi           # set destination
40         rep    stosb
42         dec    %rbx
43         jnz    rep_loop
44         
45         
46         #================================
47         # Exit
48         #================================
49 exit:
50         mov     $60,%rax
51         xor     %rdi,%rdi               # we return 0
52         syscall                         # and exit
55 .bss
57 .lcomm  buffer1,        16384