Home | History | Annotate | Line # | Download | only in bfin
      1  1.1  christos # Blackfin testcase for CC/A0/A1 compares
      2  1.1  christos # mach: bfin
      3  1.1  christos 
      4  1.1  christos #include "test.h"
      5  1.1  christos 	.include "testutils.inc"
      6  1.1  christos 
      7  1.1  christos 	start
      8  1.1  christos 
      9  1.1  christos /* Clear ASTAT before test */
     10  1.1  christos #define CHECK_ASTAT(op, exp) ASTAT = R2; CC = A0 op A1; check_astat exp
     11  1.1  christos 	.macro check_astat exp:req
     12  1.1  christos 	R5 = ASTAT;
     13  1.1  christos 	R6 = \exp;
     14  1.1  christos 	CC = R5 == R6;
     15  1.1  christos 	IF !CC JUMP 1f;
     16  1.1  christos 	.endm
     17  1.1  christos 
     18  1.1  christos 	.macro _acc_test exp_eq:req, exp_le:req, exp_lt:req
     19  1.1  christos 	CHECK_ASTAT(==, \exp_eq)
     20  1.1  christos 	CHECK_ASTAT(<=, \exp_le)
     21  1.1  christos 	CHECK_ASTAT(<, \exp_lt)
     22  1.1  christos 
     23  1.1  christos 	jump 2f;
     24  1.1  christos 1:	fail
     25  1.1  christos 2:
     26  1.1  christos 	.endm
     27  1.1  christos 
     28  1.1  christos 	.macro acc_test acc0:req, acc1:req, eq:req, le:req, lt:req
     29  1.1  christos 	dmm32 A0, \acc0
     30  1.1  christos 	dmm32 A1, \acc1
     31  1.1  christos 	_acc_test \eq, \le, \lt
     32  1.1  christos 	.endm
     33  1.1  christos 
     34  1.1  christos 	.macro acc_ex_test a0x:req, a0w:req, a1x:req, a1w:req, eq:req, le:req, lt:req
     35  1.1  christos 	imm32 R0, \a0w
     36  1.1  christos 	A0.W = R0;
     37  1.1  christos 	R0 = \a0x;
     38  1.1  christos 	A0.X = R0;
     39  1.1  christos 	imm32 R1, \a1w
     40  1.1  christos 	A1.W = R1;
     41  1.1  christos 	R1 = \a1x;
     42  1.1  christos 	A1.X = R1;
     43  1.1  christos 	_acc_test \eq, \le, \lt
     44  1.1  christos 	.endm
     45  1.1  christos 
     46  1.1  christos 	# Keep R2 with a value of 0
     47  1.1  christos 	imm32 R2, 0
     48  1.1  christos 
     49  1.1  christos #define _EQ     _AC0|_CC|_AC0_COPY|_AZ, _AC0|_CC|_AC0_COPY|_AZ, _AC0|    _AC0_COPY|_AZ
     50  1.1  christos #define _POS_GT                    _AN,      _CC|          _AN,      _CC|          _AN
     51  1.1  christos #define _POS_LT _AC0|    _AC0_COPY    , _AC0|    _AC0_COPY    , _AC0|    _AC0_COPY
     52  1.1  christos #define _NEG_GT _AC0|    _AC0_COPY|_AN, _AC0|_CC|_AC0_COPY|_AN, _AC0|_CC|_AC0_COPY|_AN
     53  1.1  christos #define _NEG_LT 0, 0, 0
     54  1.1  christos 
     55  1.1  christos 	# Simple tests around zero
     56  1.1  christos 	acc_test      0,      0, _EQ
     57  1.1  christos 	acc_test      0,      1, _POS_GT
     58  1.1  christos 	acc_test      0,  10000, _POS_GT
     59  1.1  christos 	acc_test      1,      0, _POS_LT
     60  1.1  christos 	acc_test  10000,      0, _POS_LT
     61  1.1  christos 	acc_test      0,     -1, _NEG_LT
     62  1.1  christos 	acc_test      0, -10000, _NEG_LT
     63  1.1  christos 	acc_test     -1,      0, _NEG_GT
     64  1.1  christos 	acc_test -10000,      0, _NEG_GT
     65  1.1  christos 
     66  1.1  christos 	# Simple positive-only tests
     67  1.1  christos 	acc_test      1,      1, _EQ
     68  1.1  christos 	acc_test  10000,  10000, _EQ
     69  1.1  christos 	acc_test      1,      2, _POS_GT
     70  1.1  christos 	acc_test      1,  20000, _POS_GT
     71  1.1  christos 	acc_test      2,      1, _POS_LT
     72  1.1  christos 	acc_test  20000,      1, _POS_LT
     73  1.1  christos 
     74  1.1  christos 	# Simple negative-only tests
     75  1.1  christos 	acc_test     -1,     -1, _EQ
     76  1.1  christos 	acc_test -10000, -10000, _EQ
     77  1.1  christos 	acc_test     -1,     -2, _POS_LT
     78  1.1  christos 	acc_test     -1, -20000, _POS_LT
     79  1.1  christos 	acc_test     -2,     -1, _POS_GT
     80  1.1  christos 	acc_test -20000,     -1, _POS_GT
     81  1.1  christos 
     82  1.1  christos 	# Simple postitive/negative tests
     83  1.1  christos 	acc_test      1,     -1, _NEG_LT
     84  1.1  christos 	acc_test     -1,      1, _NEG_GT
     85  1.1  christos 	acc_test      1, -10000, _NEG_LT
     86  1.1  christos 	acc_test -10000,      1, _NEG_GT
     87  1.1  christos 	acc_test     -1,  10000, _NEG_GT
     88  1.1  christos 	acc_test  10000,     -1, _NEG_LT
     89  1.1  christos 	acc_test -10000,  10000, _NEG_GT
     90  1.1  christos 	acc_test  10000, -10000, _NEG_LT
     91  1.1  christos 
     92  1.1  christos 	# Max boundary limits
     93  1.1  christos #define MAX_POS 0x7f, 0xffffffff
     94  1.1  christos #define MAX_NEG 0x80, 0x00000000
     95  1.1  christos 	acc_ex_test    0, 0, MAX_POS, _POS_GT
     96  1.1  christos 	acc_ex_test MAX_POS,    0, 0, _POS_LT
     97  1.1  christos 	acc_ex_test    0, 1, MAX_POS, _POS_GT
     98  1.1  christos 	acc_ex_test MAX_POS,    0, 1, _POS_LT
     99  1.1  christos 	acc_ex_test  -1, -1, MAX_POS, _NEG_GT
    100  1.1  christos 	acc_ex_test MAX_POS,  -1, -1, _NEG_LT
    101  1.1  christos 	acc_ex_test MAX_POS, MAX_POS, _EQ
    102  1.1  christos 	acc_ex_test    0, 0, MAX_POS, _POS_GT
    103  1.1  christos 	acc_ex_test MAX_POS,    0, 0, _POS_LT
    104  1.1  christos 	acc_ex_test    0, 1, MAX_POS, _POS_GT
    105  1.1  christos 	acc_ex_test MAX_POS,    0, 1, _POS_LT
    106  1.1  christos 	acc_ex_test  -1, -1, MAX_POS, _NEG_GT
    107  1.1  christos 	acc_ex_test MAX_POS,  -1, -1, _NEG_LT
    108  1.1  christos 
    109  1.1  christos 	acc_ex_test    0, 0, MAX_NEG, _NEG_LT
    110  1.1  christos 	acc_ex_test MAX_NEG,    0, 0, _NEG_GT
    111  1.1  christos 	acc_ex_test    0, 1, MAX_NEG, _NEG_LT
    112  1.1  christos 	acc_ex_test MAX_NEG,    0, 1, _NEG_GT
    113  1.1  christos 	acc_ex_test  -1, -1, MAX_NEG, _POS_LT
    114  1.1  christos 	acc_ex_test MAX_NEG,  -1, -1, _POS_GT
    115  1.1  christos 	acc_ex_test MAX_NEG, MAX_NEG, _EQ
    116  1.1  christos 	acc_ex_test    0, 0, MAX_NEG, _NEG_LT
    117  1.1  christos 	acc_ex_test MAX_NEG,    0, 0, _NEG_GT
    118  1.1  christos 	acc_ex_test    0, 1, MAX_NEG, _NEG_LT
    119  1.1  christos 	acc_ex_test MAX_NEG,    0, 1, _NEG_GT
    120  1.1  christos 	acc_ex_test  -1, -1, MAX_NEG, _POS_LT
    121  1.1  christos 	acc_ex_test MAX_NEG,  -1, -1, _POS_GT
    122  1.1  christos 
    123  1.1  christos 	acc_ex_test MAX_POS, MAX_NEG, _NEG_LT
    124  1.1  christos 	acc_ex_test MAX_NEG, MAX_POS, _NEG_GT
    125  1.1  christos 
    126  1.1  christos 	pass
    127