1//  Test extraction from accumulators:
2//  SIGNED FRACTIONAL and SIGNED INT mode into register PAIR
3# mach: bfin
4
5.include "testutils.inc"
6	start
7
8
9// load r0=0x7ffffff0
10// load r1=0xfffffff0
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// 0x007ffffff0 -> 0x7fffffff0
23	A1 = A0 = 0;
24	A1.w = R0;
25	A0.w = R0;
26	R7 = A1,  R6 = A0;
27	DBGA ( R7.L , 0xfff0 );
28	DBGA ( R7.H , 0x7fff );
29	DBGA ( R6.L , 0xfff0 );
30	DBGA ( R6.H , 0x7fff );
31
32// extract with saturate
33// 0x00fffffff0 -> 0x7ffffffff
34	A1 = A0 = 0;
35	A1.w = R1;
36	A0.w = R1;
37	R7 = A1,  R6 = A0;
38	DBGA ( R7.L , 0xffff );
39	DBGA ( R7.H , 0x7fff );
40	DBGA ( R6.L , 0xffff );
41	DBGA ( R6.H , 0x7fff );
42
43// extract with saturate negative
44// 0xff0ffffff0 -> 0x80000000
45	A1 = A0 = 0;
46	A1.w = R2;
47	A0.w = R2;
48	A1.x = R4.L;
49	A0.x = R4.L;
50	R7 = A1,  R6 = A0;
51	DBGA ( R7.L , 0x0000 );
52	DBGA ( R7.H , 0x8000 );
53	DBGA ( R6.L , 0x0000 );
54	DBGA ( R6.H , 0x8000 );
55
56// extract integer (same as fract)
57// 0x007ffffff0 -> 0x7fffffff0
58	A1 = A0 = 0;
59	A1.w = R0;
60	A0.w = R0;
61	R7 = A1,  R6 = A0  (IS);
62	DBGA ( R7.L , 0xfff0 );
63	DBGA ( R7.H , 0x7fff );
64	DBGA ( R6.L , 0xfff0 );
65	DBGA ( R6.H , 0x7fff );
66
67// extract with saturate negative
68// 0xff0ffffff0 -> 0x80000000
69	A1 = A0 = 0;
70	A1.w = R2;
71	A0.w = R2;
72	A1.x = R4.L;
73	A0.x = R4.L;
74	R7 = A1,  R6 = A0  (IS);
75	DBGA ( R7.L , 0x0000 );
76	DBGA ( R7.H , 0x8000 );
77	DBGA ( R6.L , 0x0000 );
78	DBGA ( R6.H , 0x8000 );
79
80	pass
81
82	.data
83data0:
84	.dw 0xfff0
85	.dw 0x7fff
86	.dw 0xfff0
87	.dw 0xffff
88	.dw 0xffff
89	.dw 0x0fff
90	.dw 0x0000
91	.dw 0x8010
92	.dw 0x00ff
93	.dw 0x0000
94