diff options
Diffstat (limited to 'sim/testsuite/d30v-elf/ls-modaddr.S')
-rw-r--r-- | sim/testsuite/d30v-elf/ls-modaddr.S | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sim/testsuite/d30v-elf/ls-modaddr.S b/sim/testsuite/d30v-elf/ls-modaddr.S new file mode 100644 index 0000000..30d28ab --- /dev/null +++ b/sim/testsuite/d30v-elf/ls-modaddr.S @@ -0,0 +1,56 @@ + ; Modular address postincrement/postdecrement test + +start: + ; program PSW for modular address mode + add r1,r0,0x81000000 + nop || nop + mvtsys psw,r1 || nop + nop || nop + +test1: + ; set modular address limits: 0x18 bytes + add r1,r0,0x20000070 ; [start, ... + nop || nop + mvtsys mod_s,r1 || nop + nop || nop + add r1,r0,0x20000088 ; ..., end) + nop || nop + mvtsys mod_e,r1 || nop + + ; modular autoincrement test + add r30,r0,0x20000070 ; base address = mod_s + ld2w r40,@(r30+,r0) || nop ; after: r30 = ...078 + ld2w r40,@(r30+,r0) || nop ; after: r30 = ...080 + ld2w r40,@(r30+,r0) || nop ; after: r30 = ...070 + + add r29,r0,0x20000070 ; expected end address; wrapping around + cmpeq f1,r30,r29 + bra/xf fail + +test2: + ; set modular address limits: 0x18 bytes + add r1,r0,0x20000088 ; [start, ... + nop || nop + mvtsys mod_s,r1 || nop + nop || nop + add r1,r0,0x20000070 ; ..., end) + nop || nop + mvtsys mod_e,r1 || nop + + ; modular autodecrement test + add r30,r0,0x20000088 ; base address = mod_s + ld2w r40,@(r30-,r0) || nop ; after: r30 = ...080 + ld2w r40,@(r30-,r0) || nop ; after: r30 = ...078 + ld2w r40,@(r30-,r0) || nop ; after: r30 = ...088 + + add r29,r0,0x20000088 ; expected end address; wrapping around + cmpeq f1,r30,r29 + bra/xf fail + +ok: + add r2,r0,0 + .long 0x0e000004, 0x00f00000 + +fail: + add r2,r0,47 + .long 0x0e000004, 0x00f00000 |