Home | History | Annotate | Line # | Download | only in bfin
      1  1.1  christos # Blackfin testcase for insns that implicitly have DISALGNEXCPT behavior
      2  1.1  christos # when used in parallel insns
      3  1.1  christos # mach: bfin
      4  1.1  christos 
      5  1.1  christos #include "test.h"
      6  1.1  christos 	.include "testutils.inc"
      7  1.1  christos 
      8  1.1  christos 	start
      9  1.1  christos 
     10  1.1  christos 	LINK 0x100;
     11  1.1  christos 
     12  1.1  christos 	# Set up I0/I1/I2/I3 to be unaligned by 0/1/2/3 bytes
     13  1.1  christos 	init_l_regs 0
     14  1.1  christos 	init_m_regs 0
     15  1.1  christos 	R0 = SP;
     16  1.1  christos 	BITCLR (R0, 0);
     17  1.1  christos 	BITCLR (R0, 1);
     18  1.1  christos 	I0 = R0;
     19  1.1  christos 	B0 = R0;
     20  1.1  christos 	R1 = 1;
     21  1.1  christos 	R1 = R0 + R1;
     22  1.1  christos 	I1 = R1;
     23  1.1  christos 	B1 = R1;
     24  1.1  christos 	R2 = 2;
     25  1.1  christos 	R2 = R0 + R2;
     26  1.1  christos 	I2 = R2;
     27  1.1  christos 	B2 = R2;
     28  1.1  christos 	R3 = 3;
     29  1.1  christos 	R3 = R0 + R3;
     30  1.1  christos 	I3 = R3;
     31  1.1  christos 	B3 = R3;
     32  1.1  christos 
     33  1.1  christos #define EXP_VAL 0x12345678
     34  1.1  christos #define EXP(r, n) CHECKREG (r, EXP_VAL); r = 0; I##n = B##n
     35  1.1  christos 	imm32 R5, EXP_VAL;
     36  1.1  christos 	imm32 R6, 0x9abcdef0;
     37  1.1  christos 	imm32 R7, 0x0a1b2c3e;
     38  1.1  christos 	[SP] = R5;
     39  1.1  christos 	[SP - 4] = R6;
     40  1.1  christos 	[SP + 4] = R7;
     41  1.1  christos 
     42  1.1  christos #define BYTEPACK(n) \
     43  1.1  christos 	R7 = BYTEPACK (R0, R1) || R4 = [I##n];         EXP (R4, n); \
     44  1.1  christos 	R6 = BYTEPACK (R0, R1) || R5 = [I##n ++ M##n]; EXP (R5, n); \
     45  1.1  christos 	R5 = BYTEPACK (R0, R1) || R6 = [I##n++];       EXP (R6, n); \
     46  1.1  christos 	R4 = BYTEPACK (R0, R1) || R7 = [I##n--];       EXP (R7, n);
     47  1.1  christos 	BYTEPACK(0)
     48  1.1  christos 	BYTEPACK(1)
     49  1.1  christos 	BYTEPACK(2)
     50  1.1  christos 	BYTEPACK(3)
     51  1.1  christos 
     52  1.1  christos #define BYTEUNPACK(n) \
     53  1.1  christos 	(R7, R5) = BYTEUNPACK R1:0 || R4 = [I##n];         EXP (R4, n); \
     54  1.1  christos 	(R6, R7) = BYTEUNPACK R3:2 || R5 = [I##n ++ M##n]; EXP (R5, n); \
     55  1.1  christos 	(R5, R4) = BYTEUNPACK R1:0 || R6 = [I##n++];       EXP (R6, n); \
     56  1.1  christos 	(R4, R6) = BYTEUNPACK R3:2 || R7 = [I##n--];       EXP (R7, n);
     57  1.1  christos 	BYTEUNPACK(0)
     58  1.1  christos 	BYTEUNPACK(1)
     59  1.1  christos 	BYTEUNPACK(2)
     60  1.1  christos 	BYTEUNPACK(3)
     61  1.1  christos 
     62  1.1  christos #define SAA(n) \
     63  1.1  christos 	SAA (R1:0, R3:2) || R4 = [I##n];         EXP (R4, n); \
     64  1.1  christos 	SAA (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \
     65  1.1  christos 	SAA (R1:0, R3:2) || R6 = [I##n++];       EXP (R6, n); \
     66  1.1  christos 	SAA (R1:0, R3:2) || R7 = [I##n--];       EXP (R7, n);
     67  1.1  christos 	SAA(0)
     68  1.1  christos 	SAA(1)
     69  1.1  christos 	SAA(2)
     70  1.1  christos 	SAA(3)
     71  1.1  christos 
     72  1.1  christos #define BYTEOP1P(n) \
     73  1.1  christos 	R7 = BYTEOP1P (R1:0, R3:2) || R4 = [I##n];         EXP (R4, n); \
     74  1.1  christos 	R6 = BYTEOP1P (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \
     75  1.1  christos 	R5 = BYTEOP1P (R1:0, R3:2) || R6 = [I##n++];       EXP (R6, n); \
     76  1.1  christos 	R4 = BYTEOP1P (R1:0, R3:2) || R7 = [I##n--];       EXP (R7, n);
     77  1.1  christos 	BYTEOP1P(0)
     78  1.1  christos 	BYTEOP1P(1)
     79  1.1  christos 	BYTEOP1P(2)
     80  1.1  christos 	BYTEOP1P(3)
     81  1.1  christos 
     82  1.1  christos #define BYTEOP2P(n) \
     83  1.1  christos 	R7 = BYTEOP2P (R1:0, R3:2) (TL)   || R4 = [I##n];         EXP (R4, n); \
     84  1.1  christos 	R6 = BYTEOP2P (R1:0, R3:2) (TH)   || R5 = [I##n ++ M##n]; EXP (R5, n); \
     85  1.1  christos 	R5 = BYTEOP2P (R1:0, R3:2) (RNDL) || R6 = [I##n++];       EXP (R6, n); \
     86  1.1  christos 	R4 = BYTEOP2P (R1:0, R3:2) (RNDH) || R7 = [I##n--];       EXP (R7, n);
     87  1.1  christos 	BYTEOP2P(0)
     88  1.1  christos 	BYTEOP2P(1)
     89  1.1  christos 	BYTEOP2P(2)
     90  1.1  christos 	BYTEOP2P(3)
     91  1.1  christos 
     92  1.1  christos #define BYTEOP3P(n) \
     93  1.1  christos 	R7 = BYTEOP3P (R1:0, R3:2) (LO) || R4 = [I##n];         EXP (R4, n); \
     94  1.1  christos 	R6 = BYTEOP3P (R1:0, R3:2) (HI) || R5 = [I##n ++ M##n]; EXP (R5, n); \
     95  1.1  christos 	R5 = BYTEOP3P (R1:0, R3:2) (LO) || R6 = [I##n++];       EXP (R6, n); \
     96  1.1  christos 	R4 = BYTEOP3P (R1:0, R3:2) (HI) || R7 = [I##n--];       EXP (R7, n);
     97  1.1  christos 	BYTEOP3P(0)
     98  1.1  christos 	BYTEOP3P(1)
     99  1.1  christos 	BYTEOP3P(2)
    100  1.1  christos 	BYTEOP3P(3)
    101  1.1  christos 
    102  1.1  christos #define BYTEOP16P(n) \
    103  1.1  christos 	(R7, R6) = BYTEOP16P (R1:0, R3:2) || R4 = [I##n];         EXP (R4, n); \
    104  1.1  christos 	(R6, R4) = BYTEOP16P (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \
    105  1.1  christos 	(R5, R7) = BYTEOP16P (R1:0, R3:2) || R6 = [I##n++];       EXP (R6, n); \
    106  1.1  christos 	(R4, R6) = BYTEOP16P (R1:0, R3:2) || R7 = [I##n--];       EXP (R7, n);
    107  1.1  christos 	BYTEOP16P(0)
    108  1.1  christos 	BYTEOP16P(1)
    109  1.1  christos 	BYTEOP16P(2)
    110  1.1  christos 	BYTEOP16P(3)
    111  1.1  christos 
    112  1.1  christos #define BYTEOP16M(n) \
    113  1.1  christos 	(R7, R5) = BYTEOP16M (R1:0, R3:2) || R4 = [I##n];         EXP (R4, n); \
    114  1.1  christos 	(R6, R7) = BYTEOP16M (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \
    115  1.1  christos 	(R5, R4) = BYTEOP16M (R1:0, R3:2) || R6 = [I##n++];       EXP (R6, n); \
    116  1.1  christos 	(R4, R5) = BYTEOP16M (R1:0, R3:2) || R7 = [I##n--];       EXP (R7, n);
    117  1.1  christos 	BYTEOP16M(0)
    118  1.1  christos 	BYTEOP16M(1)
    119  1.1  christos 	BYTEOP16M(2)
    120  1.1  christos 	BYTEOP16M(3)
    121  1.1  christos 
    122  1.1  christos 	pass
    123