aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite/bfin/c_cc_flag_ccmv_depend.S
blob: 807a7531e6e9c7efa2f059d19f45375c9ccfa7ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//Original:/proj/frio/dv/testcases/core/c_cc_flag_ccmv_depend/c_cc_flag_ccmv_depend.dsp
// Spec Reference: ccflag followed by ccmv (# stalls)
# mach: bfin

#include "test.h"
.include "testutils.inc"
	start

	R0 = 0;
	ASTAT = R0;
	imm32 r0, 0xa08d2311;
	imm32 r1, 0x10120040;
	imm32 r2, 0x62b61557;
	imm32 r3, 0x07300007;
	imm32 r4, 0x00740088;
	imm32 r5, 0x609950aa;
	imm32 r6, 0x20bb06cc;
	imm32 r7, 0xd90e108f;

	imm32 p1, 0x1401101f;
	imm32 p2, 0x3204108e;
	imm32 fp, 0xd93f1084;
	imm32 p4, 0xeb04106f;
	imm32 p5, 0xa90e5089;

	CC = R7;	// cc2dreg
	IF CC R0 = R3;	// ccmov
	R6 = R0 + R4;

	CC = ! CC;	// cc2dreg
	IF CC R1 = P1;	// ccmov

	CC = R5 < R1;	// ccflag
	R1 = ASTAT;
	IF !CC R2 = R5;	// ccmov

	CC = R2 == R3;	// ccflag
	IF CC P1 = R4;	// ccmov

	CC = ! CC;
	CC = R7 < R5;
	IF CC P2 = P5;	// ccmov

	CC = P5 == 3;
	IF CC FP = R2;	// ccmov

	R3 = ( A1 = R7.L * R4.L ),  R2 = ( A0 = R7.H * R4.H )  (S2RND);	// dsp32mac pair

	CC = A0 == A1;
	IF !CC R3 = R6;	// ccmov
	R7 = R3 + R2;

	A0 += A1 (W32);	// dsp32alu a0 + a1
	CC = A0 < A1;
	IF CC R4 = P4;	// ccmov
	R6 = R4;

	R2.H = ( A1 = R2.L * R3.L ), A0 = R2.H * R3.L;	// dsp32mac
	CC = A0 <= A1;
	IF CC R5 = P5;	// ccmov

	A1 = R2.L * R3.L, A0 += R2.L * R3.H;	// dsp32mac
	CC = A0 <= A1;
	IF CC P5 = R6;	// ccmov

	CHECKREG r0, 0x07300007;
	CHECKREG r1, (_AC0|_AC0_COPY);
	CHECKREG r2, 0x00766960;
	CHECKREG r3, 0x07A4008F;
	CHECKREG r4, 0xEB04106F;
	CHECKREG r5, 0xA90E5089;
	CHECKREG r6, 0xEB04106F;
	CHECKREG r7, 0x075D69EF;
	CHECKREG p1, 0x1401101F;
	CHECKREG p2, 0xA90E5089;
	CHECKREG fp, 0xD93F1084;
	CHECKREG p4, 0xEB04106F;
	CHECKREG p5, 0xA90E5089;

	pass