Thu Dec 3 14:20:03 1998 Dave Brolley <brolley@cygnus.com>
[external/binutils.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