1; File bwtest-err-1.s
2
3;  { dg-do assemble { target cris-*-* } }
4
5; A variant of exbwtest.s.  This is an example of invalid use of the broken-
6; dot-word function.  The nearest label occurs about 32 kbytes after the primary
7; jump table so the secondary jump table can't be reached by word displace-
8; ments and the broken words overflow.
9
10;  main()
11;  {
12;    byte i;
13;
14;    for (i=0; i <= 3; i++) {
15;      result[i] = funct(i);
16;    }
17;  }
18;
19;  Register use :  r1 - i
20;                  r2 - result address
21
22        .text
23	.syntax no_register_prefix
24        .word   0
25main:   move.d  stack,sp
26        moveq   0,r1
27        move.d  result,r2
28for1:   cmpq    3,r1
29        bgt     endfor1
30        move.d  r1,r0
31        jsr     funct
32        move.w  r0,[r2+r1.w]
33        ba      for1
34        addq    1,r1
35endfor1:
36end:    ba      end
37        nop
38
39
40;  uword funct(i)
41;    byte i;
42;  {
43;    switch (i) {
44;      case 0 :  return 0x1111;
45;      case 1 :  return 0x2222;
46;      case 2 :  return 0x3333;
47;      case 3 :  return 0x4444;
48;    }
49;  }
50;
51;  Parameters   :  r0 - i
52;
53;  Register use :  r1 - pjt address
54
55funct:  push    r1
56        move.d  pjt,r1
57        adds.w  [r1+r0.w],pc
58pjt:    .word   near1 - pjt
59        .word   near2 - pjt
60        .word   far1 - pjt
61        .word   far2 - pjt
62
63; Note that the line-number of the source-location of the error
64; seems slightly off from the user perspective, but it's the
65; best I could get without major changes in BW-handling.  Not
66; sure it it's worth fixing.  May need adjustments if
67; BW-handling changes.  Four errors from four .words are what's
68; expected.
69
70        .space  32760,0xFF; { dg-error "Adjusted signed \.word \(.*\) overflow.*" }
71
72near1:  move.w  0x1111,r0
73        ba      ret1
74        nop
75
76near2:  move.w  0x2222,r0
77        ba      ret1
78        nop
79
80far1:   move.w  0x3333,r0
81        ba      ret1
82        nop
83
84far2:   move.w  0x4444,r0
85ret1:   pop     r1
86        ret
87
88
89result: .space  4 * 2   ; static uword result[4];
90
91        .space  4
92stack:
93