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