1//  Test extraction from accumulators:
2//  ROUND/TRUNCATE in SIGNED FRACTIONAL mode
3//  test ops: "+="
4# mach: bfin
5
6.include "testutils.inc"
7	start
8
9
10// load r0=0x7ffef000
11// load r1=0x7ffff000
12// load r2=0x00008000
13// load r3=0x00018000
14// load r4=0x0000007f
15	loadsym P0, data0;
16	R0 = [ P0 ++ ];
17	R1 = [ P0 ++ ];
18	R2 = [ P0 ++ ];
19	R3 = [ P0 ++ ];
20	R4 = [ P0 ++ ];
21
22// round
23// 0x007ffef00 -> 0x7fff
24	A1 = A0 = 0;
25	A1.w = R0;
26	A0.w = R0;
27	R5.H = A1, R5.L = A0;
28	DBGA ( R5.L , 0x7fff );
29	DBGA ( R5.H , 0x7fff );
30
31// round with ovflw
32// 0x007ffff00 -> 0x7fff
33	A1 = A0 = 0;
34	A1.w = R1;
35	A0.w = R1;
36	R5.H = A1, R5.L = A0;
37	DBGA ( R5.L , 0x7fff );
38	DBGA ( R5.H , 0x7fff );
39
40// trunc
41// 0x007ffef00 -> 0x7ffe
42	A1 = A0 = 0;
43	A1.w = R0;
44	A0.w = R0;
45	R5.H = A1, R5.L = A0 (T);
46	DBGA ( R5.L , 0x7ffe );
47	DBGA ( R5.H , 0x7ffe );
48
49// round with ovflw
50// 0x7f7ffff00 -> 0x7fff
51	A1 = A0 = 0;
52	A1.w = R1;
53	A1.x = R4.L;
54	A0.w = R1;
55	A0.x = R4.L;
56	R5.H = A1, R5.L = A0;
57	DBGA ( R5.L , 0x7fff );
58	DBGA ( R5.H , 0x7fff );
59
60// round, nearest even is zero
61// 0x0000008000 -> 0x0000
62	A1 = A0 = 0;
63	A1.w = R2;
64	A0.w = R2;
65	R5.H = A1, R5.L = A0;
66	DBGA ( R5.L , 0x0 );
67	DBGA ( R5.H , 0x0 );
68
69// round, nearest even is 2
70// 0x00000018000 -> 0x0002
71	A1 = A0 = 0;
72	A1.w = R3;
73	A0.w = R3;
74	R5.H = A1, R5.L = A0;
75	DBGA ( R5.L , 0x2 );
76	DBGA ( R5.H , 0x2 );
77
78	pass
79
80	.data
81data0:
82	.dw 0xf000
83	.dw 0x7ffe
84	.dw 0xf000
85	.dw 0x7ffe
86	.dw 0x8000
87	.dw 0x0000
88	.dw 0x8000
89	.dw 0x0001
90	.dw 0x007f
91	.dw 0x0000
92