1//  ALU test program.
2//  Test instructions   reg = (A0+=A1)
3
4#include "test.h"
5.include "testutils.inc"
6	start
7
8	R0 = 0;
9	ASTAT = R0;
10
11	loadsym P0, data0;
12
13	R0 = [ P0 ++ ];
14	R1 = [ P0 ++ ];
15	R2 = [ P0 ++ ];
16	R3 = [ P0 ++ ];
17	R4 = [ P0 ++ ];
18
19// add accums and transfer result
20	A1 = A0 = 0;
21	A1.w = R0;
22	A0.w = R0;
23	R6 = ( A0 += A1 );
24	CHECKREG R6, 0x22222222;
25	R6 = A0.w;
26	CHECKREG R6, 0x22222222;
27	R7 = A0.x;
28	CHECKREG R7, 0;
29	R6 = A1.w;
30	CHECKREG R6, 0x11111111;
31	R7 = A1.x;
32	CHECKREG R7, 0;
33
34// add accums and transfer result (saturate positive)
35	R7 = 0;
36	ASTAT = R7;
37	A1 = A0 = 0;
38	A1.w = R1;
39	A0.w = R1;
40	R6 = ( A0 += A1 );
41	CHECKREG R6, 0x7fffffff;
42	R6 = A0.w;
43	CHECKREG R6, 0xfffffffe;
44	R7 = A0.x;
45	CHECKREG R7, 0;
46	R6 = A1.w;
47	CHECKREG R6, 0x7fffffff;
48	_DBG ASTAT;
49	R7 = A1.x;
50	_DBG ASTAT;
51	CHECKREG R7, 0;
52	R7 = ASTAT;
53	CHECKREG R7, (_VS|_V|_V_COPY);
54
55// add accums and transfer result (saturate negative)
56	R7 = 0;
57	ASTAT = R7;
58	A1 = A0 = 0;
59	A1.w = R2;
60	A0.w = R2;
61	A1.x = R3.L;
62	A0.x = R3.L;
63	R6 = ( A0 += A1 );
64	CHECKREG R6, 0x80000000;
65	R6 = A0.w;
66	CHECKREG R6, 0x00000000;
67	R7 = A0.x;
68	CHECKREG R6, 0;
69	R6 = A1.w;
70	CHECKREG R6, 0x80000000;
71	R7 = A1.x;
72	CHECKREG R7, 0xffffffff;
73	R7 = ASTAT;
74	_DBG ASTAT;
75	CHECKREG R7, (_VS|_V|_V_COPY|_AC0|_AC0_COPY|_AN);
76
77	pass
78
79	.data
80data0:
81	.dw 0x1111
82	.dw 0x1111
83	.dw 0xffff
84	.dw 0x7fff
85	.dw 0x0000
86	.dw 0x8000
87	.dw 0x00ff
88	.dw 0x0000
89	.dw 0x0000
90	.dw 0x0000
91