1# Blackfin testcase for push/pop instructions
2# mach: bfin
3
4	.include "testutils.inc"
5
6	start
7
8	# This uses R0/R1 as scratch ... assume those work fine in general
9	.macro check loader:req, reg:req
10	\loader \reg, 0x12345678
11	[--SP] = \reg;
12	R0 = [SP];
13	R1 = \reg;
14	CC = R0 == R1;
15	IF !CC JUMP 8f;
16	\loader \reg, 0x87654321
17	\reg = [SP++];
18	CC = R0 == R1;
19	IF !CC JUMP 8f;
20	# need to do a long jump to avoid PCREL issues
21	jump 9f;
22	8: jump 1f;
23	9:
24	.endm
25	.macro imm_check reg:req
26	check imm32, \reg
27	.endm
28	.macro dmm_check reg:req
29	check dmm32, \reg
30	.endm
31
32	imm_check R2
33	imm_check R3
34	imm_check R4
35	imm_check R5
36	imm_check R6
37	imm_check R7
38	imm_check P0
39	imm_check P1
40	imm_check P2
41	imm_check P3
42	imm_check P4
43	imm_check P5
44	imm_check FP
45	imm_check I0
46	imm_check I1
47	imm_check I2
48	imm_check I3
49	imm_check M0
50	imm_check M1
51	imm_check M2
52	imm_check M3
53	imm_check B0
54	imm_check B1
55	imm_check B2
56	imm_check B3
57	imm_check L0
58	imm_check L1
59	imm_check L2
60	imm_check L3
61	dmm_check A0.X
62	dmm_check A0.W
63	dmm_check A1.X
64	dmm_check A1.W
65	dmm_check LC0
66	dmm_check LC1
67	# Make sure the top/bottom regs have bit 1 set
68	dmm_check LT0
69	dmm_check LT1
70	dmm_check LB0
71	dmm_check LB1
72	dmm_check RETS
73
74	# These require supervisor resources
75.ifndef BFIN_HOST
76	dmm_check RETI
77	dmm_check RETX
78	dmm_check RETN
79	# RETE likes to change on the fly with an ICE
80	# dmm_check RETE
81	# CYCLES can be user mode, but screws kernel
82	dmm_check CYCLES
83	dmm_check CYCLES2
84	dmm_check USP
85
86	# No one pushes/pops these
87#	dmm_check EMUDAT
88	dmm_check SEQSTAT
89	dmm_check SYSCFG
90.endif
91	dmm_check ASTAT
92
93	pass
941:
95	fail
96