|  | # mach: crisv3 crisv8 crisv10 crisv32 | 
|  | # output: ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n | 
|  |  | 
|  | # Test generic "move Ps,[]" and "move [],Pd" insns; the ones with | 
|  | # functionality common to all models. | 
|  |  | 
|  | .include "testutils.inc" | 
|  | start | 
|  |  | 
|  | .data | 
|  | filler: | 
|  | .byte 0xaa | 
|  | .word 0x4433 | 
|  | .dword 0x55778866 | 
|  | .byte 0xcc | 
|  |  | 
|  | .text | 
|  | ; Test that writing to zero-registers is a nop | 
|  | .if 0 | 
|  | ; We used to just ignore the writes, but now an error is emitted.  We | 
|  | ; keep the test-code but disabled, in case we need to change this again. | 
|  | move 0xaa,p0 | 
|  | move 0x4433,p4 | 
|  | move 0x55774433,p8 | 
|  | .endif | 
|  |  | 
|  | moveq -1,r3 | 
|  | setf zcvn | 
|  | clear.b r3 | 
|  | test_cc 1 1 1 1 | 
|  | checkr3 ffffff00 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clearf zcvn | 
|  | clear.w r3 | 
|  | test_cc 0 0 0 0 | 
|  | checkr3 ffff0000 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.d r3 | 
|  | checkr3 0 | 
|  |  | 
|  | ; "Write" using ordinary memory references too. | 
|  | .if 0 ; See ".if 0" above. | 
|  | move.d filler,r6 | 
|  | move [r6],p0 | 
|  | move [r6],p4 | 
|  | move [r6],p8 | 
|  | .endif | 
|  |  | 
|  | # ffffff00\nffff0000\n0\nffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.b r3 | 
|  | checkr3 ffffff00 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.w r3 | 
|  | checkr3 ffff0000 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.d r3 | 
|  | checkr3 0 | 
|  |  | 
|  | ; And postincremented. | 
|  | .if 0 ; See ".if 0" above. | 
|  | move [r6+],p0 | 
|  | move [r6+],p4 | 
|  | move [r6+],p8 | 
|  | .endif | 
|  |  | 
|  | # ffffff00\nffff0000\n0\nbb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.b r3 | 
|  | checkr3 ffffff00 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.w r3 | 
|  | checkr3 ffff0000 | 
|  |  | 
|  | moveq -1,r3 | 
|  | clear.d r3 | 
|  | checkr3 0 | 
|  |  | 
|  | ; Now see that we can write to the registers too. | 
|  | # bb113344\n664433aa\ncc557788\nabcde012\nabcde000\n77880000\n0\n | 
|  | ; [PC+] | 
|  | move.d filler,r9 | 
|  | move 0xbb113344,srp | 
|  | move srp,r3 | 
|  | checkr3 bb113344 | 
|  |  | 
|  | ; [R+] | 
|  | move [r9+],srp | 
|  | move srp,r3 | 
|  | checkr3 664433aa | 
|  |  | 
|  | ; [R] | 
|  | move [r9],srp | 
|  | move srp,r3 | 
|  | checkr3 cc557788 | 
|  |  | 
|  | ; And check writing to memory, clear and srp. | 
|  |  | 
|  | move.d filler,r9 | 
|  | move 0xabcde012,srp | 
|  | setf zcvn | 
|  | move srp,[r9+] | 
|  | test_cc 1 1 1 1 | 
|  | subq 4,r9 | 
|  | move.d [r9],r3 | 
|  | checkr3 abcde012 | 
|  |  | 
|  | clearf zcvn | 
|  | clear.b [r9] | 
|  | test_cc 0 0 0 0 | 
|  | move.d [r9],r3 | 
|  | checkr3 abcde000 | 
|  |  | 
|  | addq 2,r9 | 
|  | clear.w [r9+] | 
|  | subq 2,r9 | 
|  | move.d [r9],r3 | 
|  | checkr3 77880000 | 
|  |  | 
|  | clear.d [r9] | 
|  | move.d [r9],r3 | 
|  | checkr3 0 | 
|  |  | 
|  | quit |