Thu Dec 3 14:20:03 1998 Dave Brolley <brolley@cygnus.com>
[deliverable/binutils-gdb.git] / sim / testsuite / sim / fr30 / testutils.inc
1 # r0, r4-r6 are used as tmps, consider them call clobbered by these macros.
2
3 .macro start
4 .data
5 failmsg:
6 .ascii "fail\n"
7 passmsg:
8 .ascii "pass\n"
9 .text
10 .global _start
11 _start:
12 ldi32 0x7fffc,sp ; TODO -- what's a good value for this?
13 .endm
14
15 ; Exit with return code
16 .macro exit rc
17 ldi32 \rc,r4
18 ldi32 #1,r0
19 int #10
20 .endm
21
22 ; Pass the test case
23 .macro pass
24 ldi32 #5,r6
25 ldi32 #passmsg,r5
26 ldi32 #1,r4
27 ldi32 #5,r0
28 int #10
29 exit #0
30 .endm
31
32 ; Fail the testcase
33 .macro fail
34 ldi32 #5,r6
35 ldi32 #failmsg,r5
36 ldi32 #1,r4
37 ldi32 #5,r0
38 int #10
39 exit #1
40 .endm
41
42 ; Load an immediate value into a general register
43 ; TODO: use minimal sized insn
44 .macro mvi_h_gr val reg
45 ldi32 \val,\reg
46 .endm
47
48 ; Load a general register into another general register
49 .macro mvr_h_gr src targ
50 mov \src,\targ
51 .endm
52
53 ; Store an immediate into a word in memory
54 .macro mvi_h_mem val addr
55 mvi_h_gr \val r4
56 mvr_h_mem r4,\addr
57 .endm
58
59 ; Store a register into a word in memory
60 .macro mvr_h_mem reg addr
61 st \reg,@\addr
62 .endm
63
64 ; Load a word value from memory
65 .macro ldmem_h_gr addr reg
66 ld @\addr,\reg
67 .endm
68
69 ; Add 2 general registers
70 .macro add_h_gr reg1 reg2
71 add \reg1,\reg2
72 .endm
73
74 ; Increment a register by and immediate
75 .macro inci_h_gr inc reg
76 mvi_h_gr \inc,r4
77 add r4,\reg
78 .endm
79
80 ; Test the value of an immediate against a general register
81 .macro test_h_gr val reg
82 .if (\val >= 0) && (\val <= 15)
83 cmp \val,\reg
84 .else
85 .if (\val < 0) && (\val >= -16)
86 cmp2 \val,\reg
87 .else
88 ldi32 \val,r4
89 cmp r4,\reg
90 .endif
91 .endif
92 beq test_gr\@
93 fail
94 test_gr\@:
95 .endm
96
97 ; compare two general registers
98 .macro testr_h_gr reg1 reg2
99 cmp \reg1,\reg2
100 beq testr_gr\@
101 fail
102 testr_gr\@:
103 .endm
104
105 ; Test the value of an immediate against a dedicated register
106 .macro test_h_dr val reg
107 mov \reg,r5
108 test_h_gr \val r5
109 .endm
110
111 ; Compare an immediate with word in memory
112 .macro test_h_mem val addr
113 ldmem_h_gr \addr r5
114 test_h_gr \val r5
115 .endm
116
117 ; Set the condition codes
118 .macro set_cc mask
119 andccr 0xf0
120 orccr \mask
121 .endm
122
123 ; Test the condition codes
124 .macro test_cc N Z V C
125 .if (\N == 1)
126 bp fail\@
127 .else
128 bn fail\@
129 .endif
130 .if (\Z == 1)
131 bne fail\@
132 .else
133 beq fail\@
134 .endif
135 .if (\V == 1)
136 bnv fail\@
137 .else
138 bv fail\@
139 .endif
140 .if (\C == 1)
141 bnc fail\@
142 .else
143 bc fail\@
144 .endif
145 bra test_cc\@
146 fail\@:
147 fail
148 test_cc\@:
149 .endm
This page took 0.03335 seconds and 4 git commands to generate.