1//  reg-based SHIFT test program.
2# mach: bfin
3
4.include "testutils.inc"
5	start
6
7
8//  Test FEXT with no sign extension
9
10	R0.L = 0xdead;
11	R0.H = 0x1234;
12	R1.L = 0x0810;	// pos=8 len=16
13	R7 = EXTRACT( R0, R1.L ) (Z);
14	DBGA ( R7.L , 0x34de );
15	DBGA ( R7.H , 0 );
16
17	R0.L = 0xdead;
18	R0.H = 0x1234;
19	R1.L = 0x0814;	// pos=8 len=20
20	R7 = EXTRACT( R0, R1.L ) (Z);
21	DBGA ( R7.L , 0x34de );
22	DBGA ( R7.H , 0x0002 );
23
24	R0.L = 0xdead;
25	R0.H = 0x1234;
26	R1.L = 0x0800;	// pos=8 len=0
27	R7 = EXTRACT( R0, R1.L ) (Z);
28	DBGA ( R7.L , 0 );
29	DBGA ( R7.H , 0 );
30
31	R0.L = 0xfff1;
32	R0.H = 0xffff;
33	R1.L = 0x0001;	// pos=0 len=1
34	R7 = EXTRACT( R0, R1.L ) (Z);
35	DBGA ( R7.L , 0x1 );
36	DBGA ( R7.H , 0 );
37
38	R0.L = 0xfff1;
39	R0.H = 0xffff;
40	R1.L = 0x0101;	// pos=1 len=1
41	R7 = EXTRACT( R0, R1.L ) (Z);
42	DBGA ( R7.L , 0 );
43	DBGA ( R7.H , 0 );
44	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
45	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
46
47	R0.L = 0xfff1;
48	R0.H = 0xffff;
49	R1.L = 0x1810;	// pos=24 len=16
50	R7 = EXTRACT( R0, R1.L ) (Z);
51	DBGA ( R7.L , 0x00ff );
52	DBGA ( R7.H , 0 );
53
54	R0.L = 0xfff1;
55	R0.H = 0xffff;
56	R1.L = 0x0020;	// pos=0 len=32 is like pos=0 len=0
57	R7 = EXTRACT( R0, R1.L ) (Z);
58	DBGA ( R7.L , 0x0 );
59	DBGA ( R7.H , 0x0 );
60	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
61	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
62
63	R0.L = 0xfff1;
64	R0.H = 0xffff;
65	R1.L = 0x2020;	// pos=32 len=32 is like pos=0 len=0
66	R7 = EXTRACT( R0, R1.L ) (Z);
67	DBGA ( R7.L , 0 );
68	DBGA ( R7.H , 0 );
69
70	R0.L = 0xfff1;
71	R0.H = 0xffff;
72	R1.L = 0x1f01;	// pos=31 len=1
73	R7 = EXTRACT( R0, R1.L ) (Z);
74	DBGA ( R7.L , 0x1 );
75	DBGA ( R7.H , 0 );
76
77	R0.L = 0xfff1;
78	R0.H = 0xffff;
79	R1.L = 0x1000;	// pos=16 len=0
80	R7 = EXTRACT( R0, R1.L ) (Z);
81	DBGA ( R7.L , 0 );
82	DBGA ( R7.H , 0 );
83
84//  Test FEXT with  sign extension
85
86	R0.L = 0xdead;
87	R0.H = 0x12f4;
88	R1.L = 0x0810;	// pos=8 len=16
89	R7 = EXTRACT( R0, R1.L ) (X);
90	DBGA ( R7.L , 0xf4de );
91	DBGA ( R7.H , 0xffff );
92	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
93	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
94
95	R0.L = 0xdead;
96	R0.H = 0x1234;
97	R1.L = 0x0810;	// pos=8 len=16
98	R7 = EXTRACT( R0, R1.L ) (X);
99	DBGA ( R7.L , 0x34de );
100	DBGA ( R7.H , 0x0000 );
101	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
102	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
103
104	R0.L = 0xdead;
105	R0.H = 0xf234;
106	R1.L = 0x1f01;	// pos=31 len=1
107	R7 = EXTRACT( R0, R1.L ) (X);
108	DBGA ( R7.L , 0xffff );
109	DBGA ( R7.H , 0xffff );
110	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
111	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
112
113	R0.L = 0xdead;
114	R0.H = 0xf234;
115	R1.L = 0x1f02;	// pos=31 len=2
116	R7 = EXTRACT( R0, R1.L ) (X);
117	DBGA ( R7.L , 0x0001 );
118	DBGA ( R7.H , 0x0000 );
119	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
120	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
121
122	R0.L = 0xffff;
123	R0.H = 0xffff;
124	R1.L = 0x101f;	// pos=16 len=31
125	R7 = EXTRACT( R0, R1.L ) (X);
126	DBGA ( R7.L , 0xffff );
127	DBGA ( R7.H , 0x0000 );
128	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
129	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
130
131	R0.L = 0xffff;
132	R0.H = 0xffff;
133	R1.L = 0x1001;	// pos=16 len=1
134	R7 = EXTRACT( R0, R1.L ) (X);
135	DBGA ( R7.L , 0xffff );
136	DBGA ( R7.H , 0xffff );
137	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
138	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
139
140	R0.L = 0xffff;
141	R0.H = 0xffff;
142	R1.L = 0x1000;	// pos=16 len=0
143	R7 = EXTRACT( R0, R1.L ) (X);
144	DBGA ( R7.L , 0 );
145	DBGA ( R7.H , 0 );
146	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
147	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
148
149	pass
150