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