1# Blackfin testcase for playing with TESTSET
2# mach: bfin
3
4	.include "testutils.inc"
5
6	start
7
8	.macro _ts val:req
9	/* Load value to the external data storage */
10	imm32 R0, \val
11	[P4] = R0;
12	FLUSHINV[P4];
13	SSYNC;
14	mnop;
15
16	imm32 R1, 0xdeadbeef
17	imm32 R2, 0xdeadbeef
18
19	TESTSET (P4);
20	SSYNC;
21	mnop;
22	mnop;
23
24	/* TESTSET will set CC based on low byte == 0 */
25	.if \val & 0xff
26	if CC jump 1f;
27	.else
28	if ! CC jump 1f;
29	.endif
30
31	/* Regardless of CC, the byte MSB is set to 1 */
32	imm32 R1, \val | 0x80
33
34	/* Make sure the result is what we want */
35	R2 = [P4];
36	FLUSHINV[P4];
37	SSYNC;
38	mnop;
39	CC = R2 == R1;
40	if ! CC jump 1f;
41	jump 2f;
421:	fail
432:
44	.endm
45	.macro ts val:req
46	_ts \val
47	_ts ~(\val)
48	.endm
49
50	loadsym P4, _data
51
52	ts 0x00000000
53	ts 0x00000011
54	ts 0x11111111
55	ts 0x11111101
56	ts 0x11111110
57	ts 0x111111bb
58	ts 0xaaaaaa00
59	ts 0xabcd2222
60	ts 0x000000bb
61	ts 0x55555555
62	ts 0x5555550a
63	ts 0x00100010
64	ts 0x00100100
65	ts 0x33333000
66	ts 0x000000aa
67
68	pass
69
70.data
71_data:
72.long 0
73.size _data, .-_data
74