1//  Test extraction from accumulators:
2//  SIGNED FRACTIONAL and SIGNED INT mode into register PAIR with SCALE
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8
9// load r0=0x0ffffff0
10// load r1=0x7ffffff0
11// load r2=0x0fffffff
12// load r3=0x80100000
13// load r4=0x000000ff
14	loadsym P0, data0;
15	R0 = [ P0 ++ ];
16	R1 = [ P0 ++ ];
17	R2 = [ P0 ++ ];
18	R3 = [ P0 ++ ];
19	R4 = [ P0 ++ ];
20
21// extract
22// 0x000ffffff0 -> 0x1ffffffe0
23	A1 = A0 = 0;
24	A1.w = R0;
25	A0.w = R0;
26	R7 = A1,  R6 = A0  (S2RND);
27	DBGA ( R7.L , 0xffe0 );
28	DBGA ( R7.H , 0x1fff );
29	DBGA ( R6.L , 0xffe0 );
30	DBGA ( R6.H , 0x1fff );
31
32// extract (saturate)
33// 0x007ffffff0 -> 0x7ffffffff
34	A1 = A0 = 0;
35	A1.w = R1;
36	A0.w = R1;
37	R7 = A1,  R6 = A0  (S2RND);
38	DBGA ( R7.L , 0xffff );
39	DBGA ( R7.H , 0x7fff );
40	DBGA ( R6.L , 0xffff );
41	DBGA ( R6.H , 0x7fff );
42
43// extract (saturate negative)
44// 0xff0ffffff0 -> 0x80000000
45	A1 = A0 = 0;
46	A1.w = R0;
47	A0.w = R0;
48	A1.x = R4.L;
49	A0.x = R4.L;
50	R7 = A1,  R6 = A0  (S2RND);
51	DBGA ( R7.L , 0x0000 );
52	DBGA ( R7.H , 0x8000 );
53	DBGA ( R6.L , 0x0000 );
54	DBGA ( R6.H , 0x8000 );
55
56// extract int
57// 0x000ffffff0 -> 0x1ffffffe0
58	A1 = A0 = 0;
59	A1.w = R0;
60	A0.w = R0;
61	R7 = A1,  R6 = A0  (ISS2);
62	DBGA ( R7.L , 0xffe0 );
63	DBGA ( R7.H , 0x1fff );
64	DBGA ( R6.L , 0xffe0 );
65	DBGA ( R6.H , 0x1fff );
66
67	pass
68
69	.data
70data0:
71	.dw 0xfff0
72	.dw 0x0fff
73	.dw 0xfff0
74	.dw 0x7fff
75	.dw 0xffff
76	.dw 0x0fff
77	.dw 0x0000
78	.dw 0x8010
79	.dw 0x00ff
80	.dw 0x0000
81