1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# rep, repe (repz) and repne (repnz) prefixed string instructions
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#   only count as one instruction, even though they repeat many times
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# This test makes sure the bbv plugin counts these instructions properly
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown# The answer is validated to hw perf counters.
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	.globl _start
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown_start:
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	cld				# we want these to happen forward
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#===================================
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Check varied order of the size prefix
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#   with the rep prefix.  Older binutils
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#   did this one way, newer binutils the other
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#===================================
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownsize_prefix:
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit load
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %esi		# set source
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	.byte 0x66, 0xf3, 0xad		# lodsw
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %esi		# set source
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	.byte 0xf3, 0x66, 0xad		# lodsw
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#===================================
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Load and Store Instructions
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#===================================
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownloadstore:
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	xor	%eax, %eax
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0xd, %al		# set eax to d
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit store
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %edi		# set destination
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosb	    		# store d 16384 times, auto-increment
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit load
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %esi		# set source
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	lodsb	    		# load byte 16384 times, auto-increment
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	cmp	$0xd,%al		# if we loaded wrong value
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jne	print_error		# print an error
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit store
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    	$0x020d,%ax		# store 0x020d
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %edi		# set destination
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosw	    		# store 8192 times, auto-increment
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit load
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %esi		# set source
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	lodsw	    		# load 8192 times, auto-increment
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	cmp	$0x020d,%ax		# if we loaded wrong value
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jne	print_error		# print an error
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit store
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    	$0x0feb1378,%eax	# store 0x0feb1378
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %edi		# set destination
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosl	    		# store 4096 times, auto-increment
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit load
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %esi		# set source
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	lodsl	    		# load 4096 times, auto-increment
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	cmp	$0x0feb1378,%eax	# if we loaded wrong value
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jne	print_error		# print an error
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#=============================
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Move instructions
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#=============================
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownmoves:
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit move
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $16384, %ecx
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer1, %esi
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer2, %edi
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep    movsb
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit move
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $8192, %ecx
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer2, %esi
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer1, %edi
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep    movsw
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit move
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $4096, %ecx
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer1, %esi
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov    $buffer2, %edi
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep    movsl
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#==================================
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Compare equal instructions
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#==================================
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncompare_equal:
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# first set up the areas to compare
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0xa5a5a5a5,%eax
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1, %edi
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosl
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0xa5a5a5a5,%eax
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2, %edi
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosl
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	cmpsb
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	cmpsw
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	cmpsl
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#==================================
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Compare not equal instructions
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#==================================
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browncompare_noteq:
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# change second buffer
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0x5a5a5a5a,%eax
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2, %edi
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	rep	stosl
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	cmpsb
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	je	print_error
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	cmpsw
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	je	print_error
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%esi
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	cmpsl
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	je	print_error
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#====================================
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Check scan equal instruction
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#====================================
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov     $0xa5,%al
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%edi
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	scasb
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov     $0xa5a5,%ax
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%edi
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	scasw
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0xa5a5a5a5,%eax
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer1,%edi
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repe	scasl
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jnz	print_error
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#====================================
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Check scan not-equal instruction
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#====================================
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 8-bit
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov     $0xa5,%al
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16384, %ecx
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	scasb
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jz	print_error
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 16-bit
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov     $0xa5a5,%ax
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$8192, %ecx
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	scasw
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jz	print_error
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# test 32-bit
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$0xa5a5a5a5,%eax
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$buffer2,%edi
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$4096, %ecx
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	repne	scasl
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jz	print_error
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	jmp	exit			# no error, skip to exit
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownprint_error:
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov 	$4, %eax		# Write syscall
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef VGO_darwin
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pushl	$1
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pushl	$error_string
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pushl	$16
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$1, %ebx		# print to stdout
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$error_string, %ecx	# string to print
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	mov	$16, %edx      	   	# strlen
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int	$0x80	 		# call syscall
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#================================
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	# Exit
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	#================================
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownexit:
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifdef VGO_darwin
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	xor     %ebx,%ebx		# we return 0
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#else
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	pushl	$0			# we return 0
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	xor	%eax,%eax
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	inc	%eax	 		# put exit syscall number (1) in eax
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int     $0x80             	# and exit
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.data
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownerror_string:	.asciz "Error detected!\n"
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#.bss
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.lcomm	buffer1,	16384
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown.lcomm	buffer2,	16384
281