# sh testcase for loop control # mach: shdsp # as(shdsp): -defsym sim_cpu=1 -dsp .include "testutils.inc" start loop1: set_grs_a5a5 ldrs Loop1_start0+8 ldre Loop1_start0+4 setrc #5 Loop1_start0: add #1, r1 ! Before loop # Loop should execute one instruction five times. Loop1_begin: add #1, r1 ! Within loop Loop1_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before) assertreg 0xa5a5a5a5+8, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop2: set_grs_a5a5 ldrs Loop2_start0+6 ldre Loop2_start0+4 setrc #5 Loop2_start0: add #1, r1 ! Before loop # Loop should execute two instructions five times. Loop2_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop Loop2_end: add #3, r1 ! After loop # r1 = 0xa5a5a5a5 + 14 (ten in loop, three after, one before) assertreg 0xa5a5a5a5+14, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop3: set_grs_a5a5 ldrs Loop3_start0+4 ldre Loop3_start0+4 setrc #5 Loop3_start0: add #1, r1 ! Before loop # Loop should execute three instructions five times. Loop3_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop Loop3_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before) assertreg 0xa5a5a5a5+18, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop4: set_grs_a5a5 ldrs Loop4_begin ldre Loop4_last3+4 setrc #5 add #1, r1 ! Before loop # Loop should execute four instructions five times. Loop4_begin: Loop4_last3: add #1, r1 ! Within loop Loop4_last2: add #1, r1 ! Within loop Loop4_last1: add #1, r1 ! Within loop Loop4_last: add #1, r1 ! Within loop Loop4_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 23 (20 in loop, two after, one before) assertreg 0xa5a5a5a5+23, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop5: set_grs_a5a5 ldrs Loop5_begin ldre Loop5_last3+4 setrc #5 add #1, r1 ! Before loop # Loop should execute five instructions five times. Loop5_begin: add #1, r1 ! Within loop Loop5_last3: add #1, r1 ! Within loop Loop5_last2: add #1, r1 ! Within loop Loop5_last1: add #1, r1 ! Within loop Loop5_last: add #1, r1 ! Within loop Loop5_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 28 (25 in loop, two after, one before) assertreg 0xa5a5a5a5+28, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loopn: set_grs_a5a5 ldrs Loopn_begin ldre Loopn_last3+4 setrc #5 add #1, r1 ! Before loop # Loop should execute n instructions five times. Loopn_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop Loopn_last3: add #1, r1 ! Within loop Loopn_last2: add #1, r1 ! Within loop Loopn_last1: add #1, r1 ! Within loop Loopn_last: add #1, r1 ! Within loop Loopn_end: add #3, r1 ! After loop # r1 = 0xa5a5a5a5 + 64 (60 in loop, three after, one before) assertreg 0xa5a5a5a5+64, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop1e: set_grs_a5a5 ldrs Loop1e_begin ldre Loop1e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute one instruction five times. Loop1e_begin: Loop1e_last: add #1, r1 ! Within loop Loop1e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 8 (five in loop, two after, one before) assertreg 0xa5a5a5a5+8, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop2e: set_grs_a5a5 ldrs Loop2e_begin ldre Loop2e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute two instructions five times. Loop2e_begin: add #1, r1 ! Within loop Loop2e_last: add #1, r1 ! Within loop Loop2e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 13 (ten in loop, two after, one before) assertreg 0xa5a5a5a5+13, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop3e: set_grs_a5a5 ldrs Loop3e_begin ldre Loop3e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute three instructions five times. Loop3e_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop Loop3e_last: add #1, r1 ! Within loop Loop3e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 18 (fifteen in loop, two after, one before) assertreg 0xa5a5a5a5+18, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop4e: set_grs_a5a5 ldrs Loop4e_begin ldre Loop4e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute four instructions five times. Loop4e_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop Loop4e_last: add #1, r1 ! Within loop Loop4e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 23 (twenty in loop, two after, one before) assertreg 0xa5a5a5a5+23, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop5e: set_grs_a5a5 ldrs Loop5e_begin ldre Loop5e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute five instructions five times. Loop5e_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop Loop5e_last: add #1, r1 ! Within loop Loop5e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 28 (twenty five in loop, two after, one before) assertreg 0xa5a5a5a5+28, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 loop_n_e: set_grs_a5a5 ldrs Loop_n_e_begin ldre Loop_n_e_last ldrc #5 add #1, r1 ! Before loop # Loop should execute n instructions five times. Loop_n_e_begin: add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop add #1, r1 ! Within loop Loop_n_e_last: add #1, r1 ! Within loop Loop_n_e_end: add #2, r1 ! After loop # r1 = 0xa5a5a5a5 + 48 (forty five in loop, two after, one before) assertreg 0xa5a5a5a5+48, r1 set_greg 0xa5a5a5a5, r0 set_greg 0xa5a5a5a5, r1 test_grs_a5a5 pass exit 0