summaryrefslogtreecommitdiffstats
path: root/tests/insn_CALL.awl
blob: 0063ccbba0d461dcbb8e2d6664df8412856d548f (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
FUNCTION FC 1 : VOID
BEGIN
	L		W#16#1234
	T		MW 0
	CALL		FC 2
END_FUNCTION


FUNCTION FC 2 : VOID
BEGIN
	L		W#16#6789
	T		MW 0
	L		10
	T		LB 0
END_FUNCTION


FUNCTION FC 3 : VOID
BEGIN
	L		1
	T		LB 0
	CALL		FC 2
	__ASSERT==	LB 0,	1
END_FUNCTION


FUNCTION FC 4 : VOID
VAR_INPUT
	INPVAR		: INT
END_VAR
BEGIN
	L		#INPVAR
	__ASSERT==	__ACCU 1,	9976
END_FUNCTION


FUNCTION FC 5 : VOID
VAR_INPUT
	INPVAR2		: INT
END_VAR
BEGIN
	CALL FC 4 (
		INPVAR		:= #INPVAR2,	// This is a parameter
	)
END_FUNCTION


FUNCTION FC 6 : VOID
BEGIN
	// Only check OV and OS bits
	__ASSERT==	__STW OV,	1
	__ASSERT==	__STW OS,	0
	L		1
	L		1
	+I
	__ASSERT==	__STW OV,	0
	__ASSERT==	__STW OS,	0
END_FUNCTION


FUNCTION FC 7 : VOID
BEGIN
	// Trigger an overflow
	__ASSERT==	__STW OV,	0
	__ASSERT==	__STW OS,	0
	L		30000
	L		30000
	+I
	__ASSERT==	__STW OV,	1
	__ASSERT==	__STW OS,	1
END_FUNCTION


ORGANIZATION_BLOCK OB 1
BEGIN
	CALL		FC 1
	__ASSERT==	MW 0,	W#16#6789
	L		0
	T		MW 0
	__ASSERT==	MW 0,	0
	UC		FC 1
	__ASSERT==	MW 0,	W#16#6789
	L		0
	T		MW 0
	__ASSERT==	MW 0,	0
	SET
	CC		FC 1
	__ASSERT==	MW 0,	W#16#6789
	L		0
	T		MW 0
	__ASSERT==	MW 0,	0
	CLR
	CC		FC 1
	__ASSERT==	MW 0,	0

	// Test localdata stack
	L		255
	T		LB 0
	__ASSERT==	LB 0,	255
	CALL		FC 3
	__ASSERT==	LB 0,	255

	CALL FC 5 (
		INPVAR2		:= 9976,
	)

	// Test OV/OS bits over call boundaries
	__STWRST
	L		30000
	L		30000
	+I
	__ASSERT==	__STW OV,	1
	__ASSERT==	__STW OS,	1
	CALL FC 6
	__ASSERT==	__STW OV,	0
	__ASSERT==	__STW OS,	0
	__STWRST
	CALL FC 7
	__ASSERT==	__STW OV,	1
	__ASSERT==	__STW OS,	0

END_ORGANIZATION_BLOCK
bues.ch cgit interface