1//  Test signbits40
2# mach: bfin
3
4.include "testutils.inc"
5	start
6
7
8// positive value in accum, smaller than 1.0
9	A1 = A0 = 0;
10	R0.L = 0xffff;
11	R0.H = 0x0000;
12	A0.w = R0;
13	R0.L = 0x0000;
14	A0.x = R0;
15
16	R5.L = SIGNBITS A0;
17	_DBG R5;
18	A0 = ASHIFT A0 BY R5.L;
19	_DBG A0;
20
21	R4 = A0.w;
22	R5 = A0.x;
23	DBGA ( R4.H , 0x7fff );	DBGA ( R4.L , 0x8000 );
24	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0000 );
25
26// neg value in accum, larger than -1.0
27	A1 = A0 = 0;
28	R0.L = 0x0000;
29	R0.H = 0xffff;
30	A0.w = R0;
31	R0.L = 0x00ff;
32	A0.x = R0;
33
34	R5.L = SIGNBITS A0;
35	_DBG R5;
36	A0 = ASHIFT A0 BY R5.L;
37	_DBG A0;
38
39	R4 = A0.w;
40	R5 = A0.x;
41	DBGA ( R4.H , 0x8000 );	DBGA ( R4.L , 0x0000 );
42	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xffff );
43
44// positive value in accum, larger than 1.0
45	A1 = A0 = 0;
46	R0.L = 0xffff;
47	R0.H = 0xffff;
48	A0.w = R0;
49	R0.L = 0x000f;
50	A0.x = R0;
51
52	R5.L = SIGNBITS A0;
53	_DBG R5;
54	A0 = ASHIFT A0 BY R5.L;
55	_DBG A0;
56
57	R4 = A0.w;
58	R5 = A0.x;
59	DBGA ( R4.H , 0x7fff );	DBGA ( R4.L , 0xffff );
60	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0000 );
61
62// negative value in accum, smaller than -1.0
63	A1 = A0 = 0;
64	R0.L = 0x0000;
65	R0.H = 0x0000;
66	A0.w = R0;
67	R0.L = 0x0080;
68	A0.x = R0;
69
70	R5.L = SIGNBITS A0;
71	_DBG R5;
72	A0 = ASHIFT A0 BY R5.L;
73	_DBG A0;
74
75	R4 = A0.w;
76	R5 = A0.x;
77	DBGA ( R4.H , 0x8000 );	DBGA ( R4.L , 0x0000 );
78	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xffff );
79
80// no normalization
81	A1 = A0 = 0;
82	R0.L = 0xfffa;
83	R0.H = 0x7fff;
84	A0.w = R0;
85	R0.L = 0x0000;
86	A0.x = R0;
87
88	R5.L = SIGNBITS A0;
89	_DBG R5;
90	A0 = ASHIFT A0 BY R5.L;
91	_DBG A0;
92
93	R4 = A0.w;
94	R5 = A0.x;
95	DBGA ( R4.H , 0x7fff );	DBGA ( R4.L , 0xfffa );
96	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0000 );
97
98// no normalization (-1.0)
99	A1 = A0 = 0;
100	R0.L = 0x0000;
101	R0.H = 0x8000;
102	A0.w = R0;
103	R0.L = 0x00ff;
104	A0.x = R0;
105
106	R5.L = SIGNBITS A0;
107	_DBG R5;
108	A0 = ASHIFT A0 BY R5.L;
109	_DBG A0;
110
111	R4 = A0.w;
112	R5 = A0.x;
113	DBGA ( R4.H , 0x8000 );	DBGA ( R4.L , 0x0000 );
114	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xffff );
115
116// norm by 1
117	A1 = A0 = 0;
118	R0.L = 0x0000;
119	R0.H = 0x8000;
120	A0.w = R0;
121	R0.L = 0x0000;
122	A0.x = R0;
123
124	R5.L = SIGNBITS A0;
125	_DBG R5;
126	A0 = ASHIFT A0 BY R5.L;
127	_DBG A0;
128
129	R4 = A0.w;
130	R5 = A0.x;
131	DBGA ( R4.H , 0x4000 );	DBGA ( R4.L , 0x0000 );
132	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0000 );
133
134// norm by 1
135	A1 = A0 = 0;
136	R0.L = 0x0000;
137	R0.H = 0x0000;
138	A0.w = R0;
139	R0.L = 0x00ff;
140	A0.x = R0;
141
142	R5.L = SIGNBITS A0;
143	_DBG R5;
144	A0 = ASHIFT A0 BY R5.L;
145	_DBG A0;
146
147	R4 = A0.w;
148	R5 = A0.x;
149	DBGA ( R4.H , 0x8000 );	DBGA ( R4.L , 0x0000 );
150	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xffff );
151
152	pass
153