OSDN Git Service

New testsuite
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / testsuite / sidcomp.cgen-cpu.ms1 / testutils.inc
1 # -*- asm -*-
2
3 # Make a system call with various numbers of arguments
4         .macro syscall0 call
5            addi    r1,r0,\call
6            ;jal    r14,r0
7            SI  r14
8            ;add R0, R0, R0 ; Delay Slot.
9            nop
10         .endm
11         .macro syscall1 call arg1
12            addi   r2,r0,\arg1
13            syscall0 \call
14         .endm
15         .macro syscall2 call arg1 arg2
16            addi    r3,r0,\arg2
17            syscall1 \call,\arg1
18         .endm
19         .macro syscall3 call arg1 arg2 arg3
20            addi    r4,r0,\arg3
21            syscall2 \call,\arg1,\arg2
22         .endm
23
24
25 # Exit with return code
26         ;.macro exit rc
27         ;   syscall1    #2,\rc
28         ;.endm
29
30 # Fill r3/r4 here rather than via syscall3()
31         .macro write_stdout string,len
32         loadval    r3,\string
33         loadval   r4, \len
34         syscall1  #5, #1
35         .endm
36
37 # Exit with return code
38         .macro exit rc
39         syscall1    #1,#\rc
40         .endm
41
42 # Pass the test case
43         .macro pass
44            write_stdout passmsg,5
45            exit 0
46         .endm
47
48 # Fail the testcase
49         .macro fail
50            write_stdout failmsg,5
51            exit 1
52         .endm
53
54 # NOP
55         .macro nop
56            add R0, R0, R0
57         .endm
58         
59 # Assert that the contents of reg1 equals the contents of reg2.
60         .macro assertr reg1 reg2
61            breq \reg1, \reg2, exit\@
62            ;add R0, R0, R0 ; Delay slot.
63            nop
64            fail
65 exit\@:
66         .endm
67
68 # Assert that a register contains 0.
69         .macro assertz reg
70            breq \reg, R0, exit\@
71            ;add R0, R0, R0 ; Delay Slot.
72            nop
73            fail
74 exit\@:
75         .endm
76
77 # Assert that the contents of register reg match val.
78         .macro assertv reg val
79            addui R10,R0,#%hi16(\val)
80            lsli R10, R10, #16
81            addui R10, R10, #%lo16(\val)
82            breq \reg, R10, exit\@
83            ;dd R0, R0, R0 ; Delay Slot.
84            nop
85            fail
86 exit\@:
87         .endm
88
89 # Load the a word from memory into register reg.
90 # This is not for putting the address of a label into
91         .macro loadwl reg label
92            addui R10, R0, #%hi16(\label)
93            lsli R10, R10, #16
94            addui R10, R10, #%lo16(\label) ; Address of label is now in R8.
95            ldw \reg, R10, #0 ; Put the word at label in reg.
96            nop
97         .endm   
98
99 # Load the a value into register reg.  Note that if you want to
100 # put the address of a label into a register, you use this.
101 # Maybe I should duplicate this as loadaddr to avoid confusion.
102         .macro loadval reg val
103            addui R10, R0, #%hi16(\val)
104            lsli R10, R10, #16
105            addui R10, R10, #%lo16(\val) ; Address of label is now in R8.
106            addui \reg, R10, #0 ; Put the word at label in reg.
107         .endm   
108
109
110
111
112
113 # Canonical test case header
114         .macro start
115         
116         .data
117         .align 4
118 failmsg:
119         .ascii "fail\n"
120 passmsg:
121         .ascii "pass\n"
122
123         .text
124         .global _start
125 _start:
126         .endm
127         
128
129