Home | History | Annotate | Download | only in cris
      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