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