Home | History | Annotate | Line # | Download | only in bfin
      1 //  ALU test program.
      2 //  Test 32 bit MAX, MIN, ABS instructions
      3 # mach: bfin
      4 
      5 .include "testutils.inc"
      6 	start
      7 
      8 
      9 // MAX
     10 // first operand is larger, so AN=0
     11 	R0.L = 0x0001;
     12 	R0.H = 0x0000;
     13 	R1.L = 0x0000;
     14 	R1.H = 0x0000;
     15 	R7 = MAX ( R0 , R1 );
     16 	DBGA ( R7.L , 0x0001 );
     17 	DBGA ( R7.H , 0x0000 );
     18 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     19 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
     20 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     21 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     22 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     23 
     24 // second operand is larger, so AN=1
     25 	R0.L = 0x0000;
     26 	R0.H = 0x0000;
     27 	R1.L = 0x0001;
     28 	R1.H = 0x0000;
     29 	R7 = MAX ( R0 , R1 );
     30 	DBGA ( R7.L , 0x0001 );
     31 	DBGA ( R7.H , 0x0000 );
     32 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     33 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
     34 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     35 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     36 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     37 
     38 // first operand is larger, check correct output with overflow
     39 	R0.L = 0xffff;
     40 	R0.H = 0x7fff;
     41 	R1.L = 0xffff;
     42 	R1.H = 0xffff;
     43 	R7 = MAX ( R0 , R1 );
     44 	DBGA ( R7.L , 0xffff );
     45 	DBGA ( R7.H , 0x7fff );
     46 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     47 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
     48 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     49 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     50 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     51 
     52 // second operand is larger, no overflow here
     53 	R0.L = 0xffff;
     54 	R0.H = 0xffff;
     55 	R1.L = 0xffff;
     56 	R1.H = 0x7fff;
     57 	R7 = MAX ( R0 , R1 );
     58 	DBGA ( R7.L , 0xffff );
     59 	DBGA ( R7.H , 0x7fff );
     60 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     61 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
     62 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     63 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     64 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     65 
     66 // second operand is larger, overflow
     67 	R0.L = 0xffff;
     68 	R0.H = 0x800f;
     69 	R1.L = 0xffff;
     70 	R1.H = 0x7fff;
     71 	R7 = MAX ( R0 , R1 );
     72 	DBGA ( R7.L , 0xffff );
     73 	DBGA ( R7.H , 0x7fff );
     74 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     75 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
     76 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     77 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     78 	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
     79 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     80 	CC = AV0S;	R7 = CC; DBGA ( R7.L , 0x0 );
     81 	CC = AV1S;	R7 = CC; DBGA ( R7.L , 0x0 );
     82 
     83 // both operands equal
     84 	R0.L = 0x0080;
     85 	R0.H = 0x8000;
     86 	R1.L = 0x0080;
     87 	R1.H = 0x8000;
     88 	R7 = MAX ( R0 , R1 );
     89 	DBGA ( R7.L , 0x0080 );
     90 	DBGA ( R7.H , 0x8000 );
     91 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
     92 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
     93 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
     94 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
     95 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
     96 
     97 // MIN
     98 // second operand is smaller
     99 	R0.L = 0x0001;
    100 	R0.H = 0x0000;
    101 	R1.L = 0x0000;
    102 	R1.H = 0x0000;
    103 	R7 = MIN ( R0 , R1 );
    104 	DBGA ( R7.L , 0x0000 );
    105 	DBGA ( R7.H , 0x0000 );
    106 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
    107 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
    108 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    109 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    110 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    111 
    112 // first operand is smaller
    113 	R0.L = 0x0001;
    114 	R0.H = 0x8000;
    115 	R1.L = 0x0000;
    116 	R1.H = 0x0000;
    117 	R7 = MIN ( R0 , R1 );
    118 	DBGA ( R7.L , 0x0001 );
    119 	DBGA ( R7.H , 0x8000 );
    120 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    121 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
    122 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    123 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    124 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    125 
    126 // first operand is smaller, overflow
    127 	R0.L = 0x0001;
    128 	R0.H = 0x8000;
    129 	R1.L = 0x0000;
    130 	R1.H = 0x0ff0;
    131 	R7 = MIN ( R0 , R1 );
    132 	DBGA ( R7.L , 0x0001 );
    133 	DBGA ( R7.H , 0x8000 );
    134 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    135 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
    136 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    137 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    138 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    139 
    140 // equal operands
    141 	R0.L = 0x0001;
    142 	R0.H = 0x8000;
    143 	R1.L = 0x0001;
    144 	R1.H = 0x8000;
    145 	R7 = MIN ( R0 , R1 );
    146 	DBGA ( R7.L , 0x0001 );
    147 	DBGA ( R7.H , 0x8000 );
    148 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    149 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
    150 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    151 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    152 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    153 
    154 // ABS
    155 	R0.L = 0x0001;
    156 	R0.H = 0x8000;
    157 	R7 = ABS R0;
    158 	_DBG R7;
    159 	_DBG ASTAT;
    160 	R6 = ASTAT;
    161 
    162 	_DBG R6;
    163 	DBGA ( R7.L , 0xffff );
    164 	DBGA ( R7.H , 0x7fff );
    165 //CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    166 //CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
    167 //CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    168 //CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
    169 //CC =  VS;	R7 = CC; DBGA ( R7.L , 0x1 );
    170 //CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    171 
    172 	R0.L = 0x0001;
    173 	R0.H = 0x0000;
    174 	R7 = ABS R0;
    175 	DBGA ( R7.L , 0x0001 );
    176 	DBGA ( R7.H , 0x0000 );
    177 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    178 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
    179 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    180 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    181 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    182 
    183 	R0.L = 0x0000;
    184 	R0.H = 0x8000;
    185 	R7 = ABS R0;
    186 	DBGA ( R7.L , 0xffff );
    187 	DBGA ( R7.H , 0x7fff );
    188 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    189 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
    190 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    191 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x1 );
    192 	CC =  VS;	R7 = CC; DBGA ( R7.L , 0x1 );
    193 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    194 
    195 	R0.L = 0xffff;
    196 	R0.H = 0xffff;
    197 	R7 = ABS R0;
    198 	DBGA ( R7.L , 0x0001 );
    199 	DBGA ( R7.H , 0x0000 );
    200 	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
    201 	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
    202 	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
    203 	CC =  V;	R7 = CC; DBGA ( R7.L , 0x0 );
    204 	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
    205 
    206 	R0.L = 0x0000;
    207 	R0.H = 0x0000;
    208 	R7 = ABS R0;
    209 	_DBG R7;
    210 	_DBG ASTAT;
    211 	R6 = ASTAT;
    212 	_DBG R6;
    213 
    214 	DBGA ( R7.L , 0x0000 );
    215 	DBGA ( R7.H , 0x0000 );
    216 	CC = VS;	R6 = CC; DBGA (R6.L, 0x1);
    217 	CC = AZ;	R6 = CC; DBGA (R6.L, 0x1);
    218 
    219 	pass
    220