xref: /openbmc/qemu/tests/tcg/cris/bare/check_movmp.s (revision 99d423e5)
1# mach: crisv3 crisv8 crisv10 crisv32
2# output: ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
3
4# Test generic "move Ps,[]" and "move [],Pd" insns; the ones with
5# functionality common to all models.
6
7 .include "testutils.inc"
8 start
9
10 .data
11filler:
12 .byte 0xaa
13 .word 0x4433
14 .dword 0x55778866
15 .byte 0xcc
16
17 .text
18; Test that writing to zero-registers is a nop
19 .if 0
20 ; We used to just ignore the writes, but now an error is emitted.  We
21 ; keep the test-code but disabled, in case we need to change this again.
22 move 0xaa,p0
23 move 0x4433,p4
24 move 0x55774433,p8
25 .endif
26
27 moveq -1,r3
28 setf zcvn
29 clear.b r3
30 test_cc 1 1 1 1
31 checkr3 ffffff00
32
33 moveq -1,r3
34 clearf zcvn
35 clear.w r3
36 test_cc 0 0 0 0
37 checkr3 ffff0000
38
39 moveq -1,r3
40 clear.d r3
41 checkr3 0
42
43; "Write" using ordinary memory references too.
44 .if 0 ; See ".if 0" above.
45 move.d filler,r6
46 move [r6],p0
47 move [r6],p4
48 move [r6],p8
49 .endif
50
51# ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
52
53 moveq -1,r3
54 clear.b r3
55 checkr3 ffffff00
56
57 moveq -1,r3
58 clear.w r3
59 checkr3 ffff0000
60
61 moveq -1,r3
62 clear.d r3
63 checkr3 0
64
65; And postincremented.
66 .if 0 ; See ".if 0" above.
67 move [r6+],p0
68 move [r6+],p4
69 move [r6+],p8
70 .endif
71
72# ffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
73
74 moveq -1,r3
75 clear.b r3
76 checkr3 ffffff00
77
78 moveq -1,r3
79 clear.w r3
80 checkr3 ffff0000
81
82 moveq -1,r3
83 clear.d r3
84 checkr3 0
85
86; Now see that we can write to the registers too.
87# bb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n
88; [PC+]
89 move.d filler,r9
90 move 0xbb113344,srp
91 move srp,r3
92 checkr3 bb113344
93
94; [R+]
95 move [r9+],srp
96 move srp,r3
97 checkr3 664433aa
98
99; [R]
100 move [r9],srp
101 move srp,r3
102 checkr3 cc557788
103
104; And check writing to memory, clear and srp.
105
106 move.d filler,r9
107 move 0xabcde012,srp
108 setf zcvn
109 move srp,[r9+]
110 test_cc 1 1 1 1
111 subq 4,r9
112 move.d [r9],r3
113 checkr3 abcde012
114
115 clearf zcvn
116 clear.b [r9]
117 test_cc 0 0 0 0
118 move.d [r9],r3
119 checkr3 abcde000
120
121 addq 2,r9
122 clear.w [r9+]
123 subq 2,r9
124 move.d [r9],r3
125 checkr3 77880000
126
127 clear.d [r9]
128 move.d [r9],r3
129 checkr3 0
130
131 quit
132