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