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; 241: fail 252: 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