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 25 main: move.d stack,sp 26 moveq 0,r1 27 move.d result,r2 28 for1: 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 35 endfor1: 36 end: 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 55 funct: push r1 56 move.d pjt,r1 57 adds.w [r1+r0.w],pc 58 pjt: .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 72 near1: move.w 0x1111,r0 73 ba ret1 74 nop 75 76 near2: move.w 0x2222,r0 77 ba ret1 78 nop 79 80 far1: move.w 0x3333,r0 81 ba ret1 82 nop 83 84 far2: move.w 0x4444,r0 85 ret1: pop r1 86 ret 87 88 89 result: .space 4 * 2 ; static uword result[4]; 90 91 .space 4 92 stack: 93