1//Original:/testcases/core/c_dsp32mac_mix/c_dsp32mac_mix.dsp 2// Spec Reference: dsp32mac mix 3# mach: bfin 4 5.include "testutils.inc" 6 start 7 8imm32 r0, 0xab235675; 9imm32 r1, 0xcfba5127; 10imm32 r2, 0x13246705; 11imm32 r3, 0x00060007; 12imm32 r4, 0x90abcd09; 13imm32 r5, 0x10acefdb; 14imm32 r6, 0x000c000d; 15imm32 r7, 0x1246700f; 16 17A1 = A0 = 0; 18A0.L = R0.L; 19A0.H = R0.H; 20 21// test the ROUNDING only on signed fraction T=1 22R0.H = (A1 = R4.L * R5.L), R0.L = (A0 = R4.L * R5.H) (T); 23R1.H = (A1 = R4.H * R5.L), R1.L = (A0 = R4.H * R5.H) (T); 24R2.H = (A1 = R6.L * R7.L), R2.L = (A0 = R6.H * R7.H) (T); 25R3.H = (A1 = R6.L * R7.H), R3.L = (A0 = R6.L * R7.L) (T); 26CHECKREG r0, 0x066DF95C; 27CHECKREG r1, 0x0E0AF17F; 28CHECKREG r2, 0x000B0001; 29CHECKREG r3, 0x0001000B; 30 31// When two results are stored to a single register, they must be rounded 32// or truncated and stored to the 2 halves of a single destination reg dst 33 34imm32 r0, 0x13545abd; 35imm32 r1, 0xadbcfec7; 36imm32 r2, 0xa1245679; 37imm32 r3, 0x00060007; 38imm32 r4, 0xefbc4569; 39imm32 r5, 0x1235000b; 40imm32 r6, 0x000c000d; 41imm32 r7, 0x678e000f; 42 43// The result accumulated in A0 and A1, and stored to a reg half 44R2.H = ( A1 = R1.L * R0.H ), A0 = R1.H * R0.L; 45R3.H = A1 , A0 = R7.H * R6.L (T); 46R4.H = ( A1 = R3.L * R2.H ) (M), A0 = R3.H * R2.L; 47A1 = R1.L * R0.H, R5.L = ( A0 = R1.H * R0.L ) (ISS2); 48 49CHECKREG r2, 0xFFD15679; 50CHECKREG r3, 0xFFD00007; 51CHECKREG r4, 0x00074569; 52CHECKREG r5, 0x12358000; 53 54imm32 r0, 0x13545abd; 55imm32 r1, 0xadbcfec7; 56imm32 r2, 0xa1245679; 57imm32 r3, 0x00060007; 58imm32 r4, 0xefbc4569; 59imm32 r5, 0x1235000b; 60imm32 r6, 0x000c000d; 61imm32 r7, 0x678e000f; 62// The result accumulated in A0 and A1, and stored to a reg 63R5.H = (A1 = R1.L * R0.H), R5.L = (A0 = R1.H * R0.L) (TFU); 64R6.H = (A1 = R3.L * R2.H) (M), R6.L = (A0 = R3.H * R2.L) (TFU); 65R7.H = (A1 = R1.L * R0.H) (M), R7.L = (A0 = R1.H * R0.L) (IH); // hi-word extraction 66CHECKREG r5, 0x133C3D94; 67CHECKREG r6, 0x00040002; 68CHECKREG r7, 0xFFE8E2D7; 69 70 71// The result accumulated in A0 and A1, and stored to a reg pair 72imm32 r0, 0x13545abd; 73imm32 r1, 0xadbcfec7; 74imm32 r2, 0xa1245679; 75imm32 r3, 0x00060007; 76imm32 r4, 0xefbc4569; 77imm32 r5, 0x1235000b; 78imm32 r6, 0x000c000d; 79imm32 r7, 0x678e000f; 80 81R3 = ( A1 = R1.L * R0.H ), A0 = R1.H * R0.L; 82R5 = ( A1 = R1.L * R0.H ); 83R7 = ( A1 += R1.L * R0.H ) (M), A0 -= R1.H * R0.L; 84CHECKREG r2, 0xA1245679; 85CHECKREG r3, 0xFFD0BC98; 86CHECKREG r4, 0xEFBC4569; 87CHECKREG r5, 0xFFD0BC98; 88CHECKREG r6, 0x000C000D; 89CHECKREG r7, 0xFFB91AE4; 90A1 = R1.L * R0.H, R2 = ( A0 = R1.H * R0.L ); 91A1 = R1.L * R0.H (M), R6 = ( A0 -= R1.H * R0.L ); 92CHECKREG r2, 0xC5AEB798; 93CHECKREG r3, 0xFFD0BC98; 94CHECKREG r4, 0xEFBC4569; 95CHECKREG r5, 0xFFD0BC98; 96CHECKREG r6, 0x00000000; 97CHECKREG r7, 0xFFB91AE4; 98 99imm32 r0, 0x13545abd; 100imm32 r1, 0xadbcfec7; 101imm32 r2, 0xa1245679; 102imm32 r3, 0x00060007; 103imm32 r4, 0xefbc4569; 104imm32 r5, 0x1235000b; 105imm32 r6, 0x000c000d; 106imm32 r7, 0x678e000f; 107R3 = ( A1 -= R5.L * R4.H ), R2 = ( A0 -= R5.H * R4.L ) (S2RND); 108R3 = ( A1 -= R1.L * R0.H ) (M), R2 = ( A0 += R1.H * R0.L ) (S2RND); 109CHECKREG r2, 0x80000000; 110CHECKREG r3, 0x0002CBB0; 111 112 113 114pass 115