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