[ sim/ChangeLog ]
[deliverable/binutils-gdb.git] / sim / testsuite / sim / mips / testutils.inc
CommitLineData
df0a8012
CD
1# MIPS simulator testsuite utility functions.
2# Copyright (C) 2004 Free Software Foundation, Inc.
3# Contributed by Chris Demetriou of Broadcom Corporation.
4#
5# This file is part of the GNU simulators.
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2, or (at your option)
10# any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License along
18# with this program; if not, write to the Free Software Foundation, Inc.,
19# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20
21
22# $1, $4, $5, %6, are used as temps by the macros defined here.
23
24 .macro writemsg msg
25 .data
26901: .ascii "\msg\n"
27902:
28 .previous
29 la $5, 901b
30 li $6, 902b - 901b
31 .set push
32 .set noreorder
33 jal _dowrite
34 li $4, 0
35 .set pop
36 .endm
37
38
39 # The MIPS simulator uses "break 0x3ff" as the code to exit,
40 # with the return value in $4 (a0).
41 .macro exit rc
42 li $4, \rc
43 break 0x3ff
44 .endm
45
46
47 .macro setup
48
49 .global _start
50 .ent _start
51_start:
52 .set push
53 .set noreorder
54 j DIAG
55 nop
56 .set pop
57 .end _start
58
59 .global _fail
60 .ent _fail
61_fail:
62 writemsg "fail"
63 exit 1
64 .end _fail
65
66 .global _pass
67 .ent _pass
68_pass:
69 writemsg "pass"
70 exit 0
71 .end _pass
72
73 # The MIPS simulator can use multiple different monitor types,
74 # so we hard-code the simulator "write" reserved instruction opcode,
75 # rather than jumping to a vector that invokes it. The operation
76 # expects RA to point to the location at which to continue
77 # after writing.
78 .global _dowrite
79 .ent _dowrite
80_dowrite:
81 # Write opcode (reserved instruction). See sim_monitor and its
82 # callers in sim/mips/interp.c.
83 .word 0x00000005 | ((8 << 1) << 6)
84 .end _dowrite
85
86 .endm # setup
87
88
89 .macro pass
90 .set push
91 .set noreorder
92 j _pass
93 nop
94 .set pop
95 .endm
96
97
98 .macro fail
99 .set push
100 .set noreorder
101 j _fail
102 nop
103 .set pop
104 .endm
105
106
107 .macro load32 reg, val
108 li \reg, \val
109 .endm
110
111
112 .macro load64 reg, val
113 dli \reg, \val
114 .endm
115
116
117 .macro loadaddr reg, addr
118 la \reg, \addr
119 .endm
120
121
122 .macro checkreg reg, expreg
123 .set push
124 .set noat
125 .set noreorder
126 beq \expreg, \reg, 901f
127 nop
128 fail
129901:
130 .set pop
131 .endm
132
133
134 .macro check32 reg, val
135 .set push
136 .set noat
137 load32 $1, \val
138 checkreg \reg, $1
139 .set pop
140 .endm
141
142
143 .macro check64 reg, val
144 .set push
145 .set noat
146 load64 $1, \val
147 checkreg \reg, $1
148 .set pop
149 .endm
This page took 0.033388 seconds and 4 git commands to generate.