1//  Immediate dual 16b SHIFT test program.
2//  Test  r4 = ASHIFT/ASHIFT (r2 by 10);
3//  Test  r4 = ASHIFT/ASHIFT (r2 by 10) S;
4//  Test  r4 = LSHIFT/LSHIFT (r2 by 10);
5# mach: bfin
6
7.include "testutils.inc"
8	start
9
10
11// arithmetic
12//  left by largest positive magnitude of 15 (0xf)
13// 8001 -> 8000
14	R7 = 0;
15	ASTAT = R7;
16	R0.L = 0x8001;
17	R0.H = 0x0100;
18	R6 = R0 << 15 (V);
19	DBGA ( R6.L , 0x8000 );
20	DBGA ( R6.H , 0x0000 );
21	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
22	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
23	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
24	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
25	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
26
27// arithmetic
28//  left by largest positive magnitude of 15 (0xf) with saturation
29	R7 = 0;
30	ASTAT = R7;
31	R0.L = 0x8001;
32	R0.H = 0x0100;
33	R6 = R0 << 15 (V , S);
34	DBGA ( R6.L , 0x8000 );
35	DBGA ( R6.H , 0x7fff );
36	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
37	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
38	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
39	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
40	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
41
42// arithmetic
43//  left by 1
44	R7 = 0;
45	ASTAT = R7;
46	R0.L = 0x8001;
47	R0.H = 0x0100;
48	R6 = R0 << 1 (V);
49	DBGA ( R6.L , 0x0002 );
50	DBGA ( R6.H , 0x0200 );
51	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
52	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
53	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
54	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
55	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
56
57// arithmetic
58//  left by 1 saturating
59	R7 = 0;
60	ASTAT = R7;
61	R0.L = 0x8001;
62	R0.H = 0x0100;
63	R6 = R0 << 1 (V , S);
64	DBGA ( R6.L , 0x8000 );
65	DBGA ( R6.H , 0x0200 );
66	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
67	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
68	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
69	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
70	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
71
72// arithmetic
73//  left by 15 saturating
74	R7 = 0;
75	ASTAT = R7;
76	R0.L = 0xfff0;
77	R0.H = 0x0000;
78	R6 = R0 << 15 (V , S);
79	DBGA ( R6.L , 0x8000 );
80	DBGA ( R6.H , 0x0000 );
81	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
82	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
83	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
84	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
85	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
86
87// arithmetic
88//  right by 15
89	R7 = 0;
90	ASTAT = R7;
91	R0.L = 0x8000;
92	R0.H = 0x0100;
93	R6 = R0 >>> 15 (V);
94	DBGA ( R6.L , 0xffff );
95	DBGA ( R6.H , 0x0000 );
96	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
97	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
98	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
99	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
100	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
101
102// arithmetic
103//  right by 15 (sat has no effect)
104	R7 = 0;
105	ASTAT = R7;
106	R0.L = 0x8000;
107	R0.H = 0x0100;
108	R6 = R0 >>> 15 (V);
109	DBGA ( R6.L , 0xffff );
110	DBGA ( R6.H , 0x0000 );
111	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
112	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
113	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
114	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
115	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
116
117// logic
118//  right by 15
119	R7 = 0;
120	ASTAT = R7;
121	R0.L = 0x8000;
122	R0.H = 0x0100;
123	R6 = R0 >> 15 (V);
124	DBGA ( R6.L , 0x0001 );
125	DBGA ( R6.H , 0x0000 );
126	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
127	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
128	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
129	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
130	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
131
132	pass
133