1// Test result extraction of mac instructions. 2// Test basic edge values 3// SIGNED FRACTIONAL mode into SINGLE destination register 4// test ops: "+=" 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// simple extraction with no saturation 24// 0x7fff * 0x7fff = 0x007ffe0002 -> 0x7ffe 25 R7 = 0; 26 ASTAT = R7; 27 A1 = A0 = 0; 28 R5.H = (A1 += R0.L * R1.L), R5.L = (A0 += R0.L * R1.L); 29 DBGA ( R5.L , 0x7ffe ); 30 DBGA ( R5.H , 0x7ffe ); 31 _DBG ASTAT; 32 R7 = ASTAT; 33 DBGA (R7.H, 0x0); 34 DBGA (R7.L, 0x0); 35 36// positive saturation at 32 bits 37// 0x0 * 0x0 + 0x7ff0000000 -> 0x7fff 38 R7 = 0; 39 ASTAT = R7; 40 A1 = A0 = 0; 41 A1.w = R2; 42 A1.x = R3.L; 43 A0.x = R3.L; 44 A0.w = R2; 45 R5.H = (A1 += R0.L * R2.L), R5.L = (A0 += R0.L * R2.L); 46 _DBG A1; 47 _DBG A0; 48 DBGA ( R5.L , 0x7fff ); 49 DBGA ( R5.H , 0x7fff ); 50 _DBG ASTAT; 51 R7 = ASTAT; 52 _DBG R7; 53 DBGA (R7.H, 0x300); 54 DBGA (R7.L, 0x8); 55 56// positive saturation at 32 bits 57// 0x7fff * 0x7fff + 0x7ff0000000 -> 0x7fff 58 R7 = 0; 59 ASTAT = R7; 60 A1 = A0 = 0; 61 A1.w = R2; 62 A1.x = R3.L; 63 A0.w = R2; 64 A0.x = R3.L; 65 R5.H = (A1 += R0.L * R1.L), R5.L = (A0 += R0.L * R1.L); 66 DBGA ( R5.L , 0x7fff ); 67 DBGA ( R5.H , 0x7fff ); 68 _DBG ASTAT; 69 R7 = ASTAT; 70 DBGA (R7.H, 0x30f); 71 DBGA (R7.L, 0x8); 72 73// negative saturation at 32 bits 74// 0x0 * 0x0 + 0x80f0000000 -> 0x8000 75 R7 = 0; 76 ASTAT = R7; 77 A1 = A0 = 0; 78 A1.w = R2; 79 A1.x = R4.L; 80 A0.w = R2; 81 A0.x = R4.L; 82 R5.H = (A1 += R0.L * R2.L), R5.L = (A0 += R0.L * R2.L); 83 DBGA ( R5.L , 0x8000 ); 84 DBGA ( R5.H , 0x8000 ); 85 _DBG A1; 86 _DBG A0; 87 _DBG ASTAT; 88 R7=ASTAT; 89 _DBG R7; 90 DBGA (R7.H, 0x300); 91 DBGA (R7.L, 0x0008); 92 93// negative saturation at 32 bits 94// 0x7fff * 0x8000 + 0x80f0000000 -> 0x8000 95 R7 = 0; 96 ASTAT = R7; 97 A1 = A0 = 0; 98 A1.w = R2; 99 A1.x = R4.L; 100 A0.w = R2; 101 A0.x = R4.L; 102 R5.H = (A1 += R0.H * R1.L), R5.L = (A0 += R0.H * R1.L); 103 DBGA ( R5.L , 0x8000 ); 104 DBGA ( R5.H , 0x8000 ); 105 R7=ASTAT; 106 _DBG ASTAT; 107 DBGA (R7.H, 0x300); 108 DBGA (R7.L, 0x0008); 109 110// negative saturation at 32 bits on MAC only 111// 0x7fff * 0x8000 + 0x80f0000000 -> 0x8000 112 R7 = 0; 113 ASTAT = R7; 114 A1 = A0 = 0; 115 A0.w = R2; 116 A0.x = R4.L; 117 _DBG ASTAT; 118 R5.H = A1, R5.L = (A0 += R0.H * R1.L); 119 _DBG A0; 120 DBGA ( R5.L , 0x8000 ); 121 DBGA ( R5.H , 0x0000 ); 122 R7=ASTAT; 123 _DBG ASTAT; 124 DBGA (R7.H, 0x300); 125 DBGA (R7.L, 0x0009); 126 127// 0x0100 * 0x0100 = 0x00020000 -> 0x0002 128 R7 = 0; 129 ASTAT = R7; 130 R0.L = 0x0100; 131 R1.L = 0x0100; 132 A1 = A0 = 0; 133 R5.H = (A1 = R0.L * R1.L), R5.L = (A0 = R0.L * R1.L) (T); 134 DBGA ( R5.L , 0x0002 ); 135 DBGA ( R5.H , 0x0002 ); 136 R7 = ASTAT; 137 DBGA (R7.H, 0x000); 138 DBGA (R7.L, 0x000); 139 140 pass 141 142 .data 143data0: 144 .dw 0x7fff 145 .dw 0x8000 146 .dw 0x7fff 147 .dw 0x8000 148 .dw 0x0000 149 .dw 0xf000 150 .dw 0x007f 151 .dw 0x0000 152 .dw 0x0080 153 .dw 0x0000 154