Home | History | Annotate | Line # | Download | only in bfin
      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
    143 data0:
    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