Home | History | Annotate | Line # | Download | only in bfin
      1 # Blackfin testcase for branching out of the middle of a hardware loop
      2 # mach: bfin
      3 
      4 	.include "testutils.inc"
      5 
      6 	.macro test_prep lc:req, sym:req
      7 	imm32 P0, \lc
      8 	loadsym P1, \sym
      9 	R5 = 0;
     10 	R6 = 0;
     11 	R7 = 0;
     12 	LSETUP (1f, 2f) LC0 = P0;
     13 	.endm
     14 
     15 	.macro test_check exp5:req, exp6:req, exp7:req, expLC
     16 	imm32 R4, \exp5;
     17 	CC = R4 == R5;
     18 	IF !CC JUMP 2f;
     19 	imm32 R4, \exp6;
     20 	CC = R4 == R6;
     21 	IF !CC JUMP 2f;
     22 	imm32 R4, \exp7;
     23 	CC = R4 == R7;
     24 	IF !CC JUMP 2f;
     25 	R3 = LC0;
     26 	imm32 R4, \expLC;
     27 	CC = R4 == R3;
     28 	IF !CC JUMP 2f;
     29 	JUMP 3f;
     30 2:	fail
     31 3:
     32 	.endm
     33 
     34 	start
     35 	mnop;
     36 
     37 test_jump_s:
     38 	.macro test_jump_s lc:req
     39 	test_prep \lc, 3f
     40 1:	JUMP (P1);
     41 	R5 += 1;
     42 2:	R6 += 1;
     43 	fail
     44 3:	R7 += 1;
     45 	test_check 0, 0, 1, \lc
     46 	.endm
     47 	test_jump_s 0
     48 	test_jump_s 1
     49 	test_jump_s 2
     50 	test_jump_s 10
     51 
     52 test_jump_m:
     53 	.macro test_jump_m lc:req
     54 	test_prep \lc, 3f
     55 1:	R5 += 1;
     56 	JUMP (P1);
     57 2:	R6 += 1;
     58 	fail
     59 3:	R7 += 1;
     60 	test_check 1, 0, 1, \lc
     61 	.endm
     62 	test_jump_m 0
     63 	test_jump_m 1
     64 	test_jump_m 2
     65 	test_jump_m 10
     66 
     67 test_jump_e:
     68 	.macro test_jump_e lc:req, lcend:req
     69 	test_prep \lc, 3f
     70 1:	R5 += 1;
     71 	R6 += 1;
     72 2:	JUMP (P1);
     73 	fail
     74 3:	R7 += 1;
     75 	test_check 1, 1, 1, \lcend
     76 	.endm
     77 	test_jump_e 0, 0
     78 	test_jump_e 1, 0
     79 	test_jump_e 2, 1
     80 	test_jump_e 10, 9
     81 
     82 test_call_s:
     83 	.macro test_call_s lc:req, exp5:req, exp6:req, exp7:req
     84 	test_prep \lc, __ret
     85 1:	CALL (P1);
     86 	R5 += 1;
     87 2:	R6 += 1;
     88 3:	R7 += 1;
     89 	test_check \exp5, \exp6, \exp7, 0
     90 	.endm
     91 	test_call_s 0, 1, 1, 2
     92 	test_call_s 1, 1, 1, 2
     93 	test_call_s 2, 2, 2, 3
     94 	test_call_s 10, 10, 10, 11
     95 
     96 test_call_m:
     97 	.macro test_call_m lc:req, exp5:req, exp6:req, exp7:req
     98 	test_prep \lc, __ret
     99 1:	R5 += 1;
    100 	CALL (P1);
    101 2:	R6 += 1;
    102 3:	R7 += 1;
    103 	test_check \exp5, \exp6, \exp7, 0
    104 	.endm
    105 	test_call_m 0, 1, 1, 2
    106 	test_call_m 1, 1, 1, 2
    107 	test_call_m 2, 2, 2, 3
    108 	test_call_m 10, 10, 10, 11
    109 
    110 test_call_e:
    111 	.macro test_call_e lc:req, exp5:req, exp6:req, exp7:req
    112 	test_prep \lc, __ret
    113 1:	R5 += 1;
    114 	R6 += 1;
    115 2:	CALL (P1);
    116 3:	R7 += 1;
    117 	test_check \exp5, \exp6, \exp7, 0
    118 	.endm
    119 	test_call_e 0, 1, 1, 2
    120 	test_call_e 1, 1, 1, 2
    121 	test_call_e 2, 2, 2, 3
    122 	test_call_e 10, 10, 10, 11
    123 
    124 	pass
    125 
    126 __ret:
    127 	nop;nop;nop;
    128 	R7 += 1;
    129 	rts;
    130