| # 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 |