//Original:/proj/frio/dv/testcases/core/c_interr_loopsetup_stld/c_interr_loopsetup_stld.dsp // Spec Reference: interrupt loopsetup_ldst # mach: bfin #include "test.h" .include "testutils.inc" start A0 = 0; // reset accumulators A1 = 0; P1 = 3; P2 = 4; LD32(r0, 0x00200005); LD32(r1, 0x00300010); LD32(r2, 0x00500012); LD32(r3, 0x00600024); LD32(r4, 0x00700016); LD32(r5, 0x00900028); LD32(r6, 0x0a000030); LD32(r7, 0x00b00044); loadsym I0, DATA0; loadsym I1, DATA1; R0 = [ I0 ++ ]; R1 = [ I1 ++ ]; LSETUP ( start1 , end1 ) LC0 = P1; start1: R0 += 1; R1 += 2; A1 += R0.H * R1.H, A0 += R0.L * R1.L || R0 = [ I0 ++ ] || R1 = [ I1 ++ ]; // dsp32mac dual // a1 += h*h, a0 += l*l (r0,r1) ; r0 = [i0++]; r1 = [i1++]; // dsp32mac R2 = ( R2 + R5 ) << 1; // alu2op DIVQ ( R5 , R3 ); R1 <<= R5; R1 >>>= R1; R6 = ~ R0; //MY_GEN_INT(10, 1) DIVQ ( R5 , R2 ); R0 = R3.B (X); DIVS ( R7 , R0 ); end1: R2 += 3; R3 = ( A0 += A1 ); CHECKREG(r0, 0x00000024); CHECKREG(r1, 0x00000000); CHECKREG(r2, 0x0670098D); CHECKREG(r3, 0x000015EC); CHECKREG(r4, 0x00700016); CHECKREG(r5, 0x0B240A39); CHECKREG(r6, 0xFFF2FFFC); CHECKREG(r7, 0x05800220); A0 = 0; A1 = 0; LSETUP ( start2 , end2 ) LC0 = P2; start2: R4 += 4; //a1 += h*h, a0 += l*l (r0,r1), r0 = [i0--], r1 = [i1--]; A1 += R0.H * R1.H, A0 += R0.L * R1.L; R0 = [ I0 -- ]; R1 = [ I1 -- ]; R1 <<= R5; R6 = R7.B (Z); R2 = - R6; R3 = R4.L (Z); DIVS ( R1 , R1 ); R6 = - R0; R0 >>= R0; DIVS ( R4 , R7 ); //MY_GEN_INT(13, 1) R1 = R2.L (Z); end2: R5 += -5; R6 = ( A0 += A1 ); CHECKREG(r0, 0x00000000); CHECKREG(r1, 0x0000FFE0); CHECKREG(r2, 0xFFFFFFE0); CHECKREG(r3, 0x000000EC); CHECKREG(r4, 0x070001D8); CHECKREG(r5, 0x0B240A25); CHECKREG(r6, 0x00000000); CHECKREG(r7, 0x05800220); LD32(r0, 0x01200805); LD32(r1, 0x02300710); LD32(r2, 0x03500612); LD32(r3, 0x04600524); LD32(r4, 0x05700416); LD32(r5, 0x06900328); LD32(r6, 0x0a700230); LD32(r7, 0x08b00044); loadsym I2, DATA0; loadsym I3, DATA1; [ I2 ++ ] = R0; [ I3 ++ ] = R1; LSETUP ( start3 , end3 ) LC0 = P1; start3: [ I2 ++ ] = R2; [ I3 ++ ] = R3; R2 += 1; end3: R3 += 1; A0 = 0; A1 = 0; LSETUP ( start4 , end4 ) LC0 = P2; R0 = [ I0 -- ]; R1 = [ I1 -- ]; start4: // a1 += h*h, a0 += l*l (r0,r1), r0 = [i2--], r1 = [i3--]; A1 += R0.H * R1.H, A0 += R0.L * R1.L; R0 = [ I2 -- ]; R1 = [ I3 -- ]; R4 = R4 + R0; // comp3op R5 = R7.L (Z); R4 >>>= R5; R0 = R7.B (X); DIVQ ( R6 , R6 ); //MY_GEN_INT(7, 1) end4: R5 = R5 + R1; R6 = ( A0 += A1 ); R7 = ( A0 += A1 ); CHECKREG(r0, 0x00000044); CHECKREG(r1, 0x04600524); CHECKREG(r2, 0x03500615); CHECKREG(r3, 0x04600527); CHECKREG(r4, 0x00000000); CHECKREG(r5, 0x04600568); CHECKREG(r6, 0x007C3498); CHECKREG(r7, 0x00812098); pass; // End the test // // Data Segment // .data DATA0: .dd 0x000a0000 .dd 0x000b0001 .dd 0x000c0002 .dd 0x000d0003 .dd 0x000e0004 .dd 0x000f0005 .dd 0x00100006 .dd 0x00200007 .dd 0x00300008 .dd 0x00400009 .dd 0x0050000a .dd 0x0060000b .dd 0x0070000c .dd 0x0080000d .dd 0x0090000e .dd 0x0100000f .dd 0x02000010 .dd 0x03000011 .dd 0x04000012 .dd 0x05000013 .dd 0x06000014 .dd 0x001a0000 .dd 0x001b0001 .dd 0x001c0002 .dd 0x001d0003 .dd 0x00010004 .dd 0x00010005 .dd 0x02100006 .dd 0x02200007 .dd 0x02300008 .dd 0x02200009 .dd 0x0250000a .dd 0x0260000b .dd 0x0270000c .dd 0x0280000d .dd 0x0290000e .dd 0x2100000f .dd 0x22000010 .dd 0x22000011 .dd 0x24000012 .dd 0x25000013 .dd 0x26000014 DATA1: .dd 0x00f00100 .dd 0x00e00101 .dd 0x00d00102 .dd 0x00c00103 .dd 0x00b00104 .dd 0x00a00105 .dd 0x00900106 .dd 0x00800107 .dd 0x00100108 .dd 0x00200109 .dd 0x0030010a .dd 0x0040010b .dd 0x0050011c .dd 0x0060010d .dd 0x0070010e .dd 0x0080010f .dd 0x00900110 .dd 0x01000111 .dd 0x02000112 .dd 0x03000113 .dd 0x04000114 .dd 0x05000115 .dd 0x03f00100 .dd 0x03e00101 .dd 0x03d00102 .dd 0x03c00103 .dd 0x03b00104 .dd 0x03a00105 .dd 0x03900106 .dd 0x03800107 .dd 0x03100108 .dd 0x03200109 .dd 0x0330010a .dd 0x0330010b .dd 0x0350011c .dd 0x0360010d .dd 0x0370010e .dd 0x0380010f .dd 0x03900110 .dd 0x31000111 .dd 0x32000112 .dd 0x33000113 .dd 0x34000114