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