Home | History | Annotate | Download | only in amd64-linux
      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
      4 
      5 # Performance counters give us 8207 insns
      6 #    11 + 8*1024 + 3 = 8206
      7 
      8 	.globl _start
      9 _start:
     10 	cld				# we want these to happen forward
     11 
     12 	mov    $0xfeb131978,%rax	# value to store
     13 
     14 	# test back-to-back rep/stosb's
     15 
     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
     21 
     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:
     33 
     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
     41 
     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
     53 
     54 
     55 .bss
     56 
     57 .lcomm	buffer1,	16384
     58 
     59