1// MAC test program. 2// Test basic edge values 3// SIGNED INTEGER mode 4// test ops: "+=" "-=" "=" "NOP" 5# mach: bfin 6 7.include "testutils.inc" 8 start 9 10 11// load r0=0x80007fff 12// load r1=0x80007fff 13// load r2=0xf0000000 14// load r3=0x0000007f 15// load r4=0x00000080 16 loadsym P0, data0; 17 R0 = [ P0 ++ ]; 18 R1 = [ P0 ++ ]; 19 R2 = [ P0 ++ ]; 20 R3 = [ P0 ++ ]; 21 R4 = [ P0 ++ ]; 22 23// 0x7fff * 0x7fff = 0x003fff0001 24 A1 = A0 = 0; 25 A1 += R0.L * R1.L, A0 += R0.L * R1.L (IS); 26 R6 = A1.w; 27 R7.L = A1.x; 28 DBGA ( R6.L , 0x0001 ); 29 DBGA ( R6.H , 0x3fff ); 30 DBGA ( R7.L , 0x0000 ); 31 32// 0x8000 * 0x7fff = 0xffc0008000 33 A1 = A0 = 0; 34 A1 += R0.H * R1.L, A0 += R0.H * R1.L (IS); 35 R6 = A1.w; 36 R7.L = A1.x; 37 DBGA ( R6.L , 0x8000 ); 38 DBGA ( R6.H , 0xc000 ); 39 DBGA ( R7.L , 0xffff ); 40 41// 0x8000 * 0x8000 = 0x0040000000 42 A1 = A0 = 0; 43 A1 += R0.H * R1.H, A0 += R0.H * R1.H (IS); 44 R6 = A1.w; 45 R7.L = A1.x; 46 DBGA ( R6.L , 0x0000 ); 47 DBGA ( R6.H , 0x4000 ); 48 DBGA ( R7.L , 0x0000 ); 49 50// saturate positive by first loading large value into accums 51// expected value is 0x7fffffffff 52 A1 = A0 = 0; 53 A1.w = R2; 54 A1.x = R3.L; 55 A0.w = R2; 56 A0.x = R3.L; 57 A1 += R0.L * R1.L, A0 += R0.L * R1.L (IS); 58 R6 = A1.w; 59 R7.L = A1.x; 60 DBGA ( R6.L , 0xffff ); 61 DBGA ( R6.H , 0xffff ); 62 DBGA ( R7.L , 0x007f ); 63 64// saturate negative 65// expected value is 0x8000000000 66 A1 = A0 = 0; 67 A1.x = R4.L; 68 A0.x = R4.L; 69 A1 += R0.L * R1.H, A0 += R0.L * R1.H (IS); 70 R6 = A1.w; 71 R7.L = A1.x; 72 DBGA ( R6.L , 0x0000 ); 73 DBGA ( R6.H , 0x0000 ); 74 DBGA ( R7.L , 0xff80 ); 75 76// saturate positive with "-=" 77// expected value is 0x7fffffffff 78 A1 = A0 = 0; 79 A1.w = R2; 80 A1.x = R3.L; 81 A0.w = R2; 82 A0.x = R3.L; 83 A1 -= R0.H * R1.L, A0 -= R0.H * R1.L (IS); 84 R6 = A1.w; 85 R7.L = A1.x; 86 DBGA ( R6.L , 0xffff ); 87 DBGA ( R6.H , 0xffff ); 88 DBGA ( R7.L , 0x007f ); 89 90// saturate negative with "-=" 91// expected value is 0x8000000000 92 A1 = A0 = 0; 93 A1.x = R4.L; 94 A0.x = R4.L; 95 A1 -= R0.L * R1.L, A0 -= R0.L * R1.L (IS); 96 R6 = A1.w; 97 R7.L = A1.x; 98 DBGA ( R6.L , 0x0000 ); 99 DBGA ( R6.H , 0x0000 ); 100 DBGA ( R7.L , 0xff80 ); 101 102// 0x8000 * 0x8000 = 0xffc0000000 with "-=" 103 A1 = A0 = 0; 104 A1 -= R0.H * R1.H, A0 -= R0.H * R1.H (IS); 105 R6 = A1.w; 106 R7.L = A1.x; 107 DBGA ( R6.L , 0x0000 ); 108 DBGA ( R6.H , 0xc000 ); 109 DBGA ( R7.L , 0xffff ); 110 111 pass 112 113 .data 0x1000; 114data0: 115 .dw 0x7fff 116 .dw 0x8000 117 .dw 0x7fff 118 .dw 0x8000 119 .dw 0x0000 120 .dw 0xf000 121 .dw 0x007f 122 .dw 0x0000 123 .dw 0x0080 124 .dw 0x0000 125