~ubuntu-branches/ubuntu/trusty/avr-libc/trusty-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/regression/bug-21955.c

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2009-10-31 11:52:10 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20091031115210-crjd42sn6ezrj52c
Tags: 1:1.6.7-1
* New upstream relese (closes: #544030)
* Added lintian overrides (closes: #553265)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* bug #21955: pgm_read_xxxx() does not use enhanced LPM instruction
2
 
   $Id: bug-21955.c,v 1.1.2.2 2008/01/13 00:53:31 dmix Exp $
3
 
 
4
 
   Idea is to force 'region text is full': pgm_read_word() takes 5 words
5
 
   in case of classic LPM, and takes 2 words with enhanced LPM. */
6
 
 
7
 
#ifndef __AVR__
8
 
 
9
 
/* There are not sense to check host computer.  */
10
 
int main ()
11
 
{
12
 
    return 0;
13
 
}
14
 
 
15
 
#else
16
 
 
17
 
#include <avr/io.h>
18
 
#include <avr/pgmspace.h>
19
 
 
20
 
/* avr-gcc 4.1.2, Avr-libc 1.6.1, main() contains only 1 line with
21
 
   pgm_read_word, bytes:
22
 
      MIN_SIZE == 90  --> Fault
23
 
      MIN_SIZE == 100 --> OK
24
 
   So, for 50 lines it would:
25
 
      100 + 8*49 =  492  for enhanced
26
 
      100 + 14*49 = 786  for enhanced
27
 
   No use __AVR_HAVE_LPMX__ for preprocessing.  */
28
 
#if  (__AVR_ARCH__ == 2) || (__AVR_ARCH__ == 3)
29
 
# define MIN_SIZE 940
30
 
#else
31
 
# define MIN_SIZE 640
32
 
#endif
33
 
 
34
 
#define NWORDS  ((FLASHEND - _VECTORS_SIZE - MIN_SIZE)/2)
35
 
void very_big_function (void)
36
 
{
37
 
    asm volatile (
38
 
        ".rept  (%0)*256 + %1   \n\t"
39
 
        "nop                    \n\t"
40
 
        ".endr "
41
 
        :: "M" (NWORDS / 256),
42
 
           "M" (NWORDS % 256)
43
 
    );
44
 
}
45
 
 
46
 
 
47
 
int main ()
48
 
{
49
 
    volatile int rslt;
50
 
    int addr = 0;
51
 
 
52
 
    /* 10*4 words with enhanced LPM
53
 
       10*7 words with classic LPM      */
54
 
    addr = pgm_read_word (addr) & 0x7FF;
55
 
    addr = pgm_read_word (addr) & 0x7FF;
56
 
    addr = pgm_read_word (addr) & 0x7FF;
57
 
    addr = pgm_read_word (addr) & 0x7FF;
58
 
    addr = pgm_read_word (addr) & 0x7FF;
59
 
    addr = pgm_read_word (addr) & 0x7FF;
60
 
    addr = pgm_read_word (addr) & 0x7FF;
61
 
    addr = pgm_read_word (addr) & 0x7FF;
62
 
    addr = pgm_read_word (addr) & 0x7FF;
63
 
    addr = pgm_read_word (addr) & 0x7FF;                /* 10 */
64
 
 
65
 
    /* 10*4 words with enhanced LPM
66
 
       10*7 words with classic LPM      */
67
 
    addr = pgm_read_word (addr) & 0x7FF;
68
 
    addr = pgm_read_word (addr) & 0x7FF;
69
 
    addr = pgm_read_word (addr) & 0x7FF;
70
 
    addr = pgm_read_word (addr) & 0x7FF;
71
 
    addr = pgm_read_word (addr) & 0x7FF;
72
 
    addr = pgm_read_word (addr) & 0x7FF;
73
 
    addr = pgm_read_word (addr) & 0x7FF;
74
 
    addr = pgm_read_word (addr) & 0x7FF;
75
 
    addr = pgm_read_word (addr) & 0x7FF;
76
 
    addr = pgm_read_word (addr) & 0x7FF;                /* 20 */
77
 
 
78
 
    /* 10*4 words with enhanced LPM
79
 
       10*7 words with classic LPM      */
80
 
    addr = pgm_read_word (addr) & 0x7FF;
81
 
    addr = pgm_read_word (addr) & 0x7FF;
82
 
    addr = pgm_read_word (addr) & 0x7FF;
83
 
    addr = pgm_read_word (addr) & 0x7FF;
84
 
    addr = pgm_read_word (addr) & 0x7FF;
85
 
    addr = pgm_read_word (addr) & 0x7FF;
86
 
    addr = pgm_read_word (addr) & 0x7FF;
87
 
    addr = pgm_read_word (addr) & 0x7FF;
88
 
    addr = pgm_read_word (addr) & 0x7FF;
89
 
    addr = pgm_read_word (addr) & 0x7FF;                /* 30 */
90
 
 
91
 
    /* 10*4 words with enhanced LPM
92
 
       10*7 words with classic LPM      */
93
 
    addr = pgm_read_word (addr) & 0x7FF;
94
 
    addr = pgm_read_word (addr) & 0x7FF;
95
 
    addr = pgm_read_word (addr) & 0x7FF;
96
 
    addr = pgm_read_word (addr) & 0x7FF;
97
 
    addr = pgm_read_word (addr) & 0x7FF;
98
 
    addr = pgm_read_word (addr) & 0x7FF;
99
 
    addr = pgm_read_word (addr) & 0x7FF;
100
 
    addr = pgm_read_word (addr) & 0x7FF;
101
 
    addr = pgm_read_word (addr) & 0x7FF;
102
 
    addr = pgm_read_word (addr) & 0x7FF;                /* 40 */
103
 
 
104
 
    /* 10*4 words with enhanced LPM
105
 
       10*7 words with classic LPM      */
106
 
    addr = pgm_read_word (addr) & 0x7FF;
107
 
    addr = pgm_read_word (addr) & 0x7FF;
108
 
    addr = pgm_read_word (addr) & 0x7FF;
109
 
    addr = pgm_read_word (addr) & 0x7FF;
110
 
    addr = pgm_read_word (addr) & 0x7FF;
111
 
    addr = pgm_read_word (addr) & 0x7FF;
112
 
    addr = pgm_read_word (addr) & 0x7FF;
113
 
    addr = pgm_read_word (addr) & 0x7FF;
114
 
    addr = pgm_read_word (addr) & 0x7FF;
115
 
    addr = pgm_read_word (addr) & 0x7FF;                /* 50 */
116
 
 
117
 
    rslt = (int)addr;
118
 
    return 0;
119
 
}
120
 
 
121
 
#endif  /* __AVR__ */