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

« back to all changes in this revision

Viewing changes to tests/simulate/avr/sfrasm-2.S

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2009-10-31 11:52:10 UTC
  • mfrom: (1.1.8 upstream) (4.1.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091031115210-x0mlijnegkce86fk
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
 
/* Test of _SFR's macroses.  Old style ASM program, where the ports are
2
 
   values, suitable to use with LDS/STS instruction.
3
 
   $Id: sfrasm-2.S,v 1.1.2.2 2008/05/02 08:47:38 dmix Exp $     */
4
 
 
5
 
/* XXX: Seems, the _SFR_MEM_ADDR() is worse.  In this case it works only
6
 
   with ports, which have the address higher then SREG.  There is no
7
 
   method to obtain the address suitable for LDS/STS instruction.  Now
8
 
   this test cases are commented.  Second, the _SFR_ADDR() is not defined.
9
 
   This is mismatch to C behavior (_SFR_ASM_COMPAT, __SFR_OFFSET = 0).  */
10
 
 
11
 
#define __SFR_OFFSET    0
12
 
#include <avr/io.h>
13
 
 
14
 
#if     defined (__AVR_AT90S8515__)
15
 
 
16
 
# if     SREG != 0x3F                   \
17
 
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
18
 
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
19
 
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
20
 
     ||  !_SFR_IO_REG_P (SREG)
21
 
#  error
22
 
# endif
23
 
 
24
 
# if     WDTCR != 0x21                  \
25
 
     /*||  _SFR_ADDR (WDTCR) != 0x41*/  \
26
 
     /*||  _SFR_MEM_ADDR (WDTCR) != 0x41*/      \
27
 
     ||  _SFR_IO_ADDR (WDTCR) != 0x21   \
28
 
     ||  !_SFR_IO_REG_P (WDTCR)
29
 
#  error
30
 
# endif
31
 
 
32
 
# if     EEARH != 0x1F                  \
33
 
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
34
 
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
35
 
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
36
 
     ||  !_SFR_IO_REG_P (EEARH)
37
 
#  error
38
 
# endif
39
 
 
40
 
# if     ACSR != 0x08                   \
41
 
     /*||  _SFR_ADDR (ACSR) != 0x28*/   \
42
 
     /*||  _SFR_MEM_ADDR (ACSR) != 0x28*/       \
43
 
     ||  _SFR_IO_ADDR (ACSR) != 0x08    \
44
 
     ||  !_SFR_IO_REG_P (ACSR)
45
 
#  error
46
 
# endif
47
 
 
48
 
#elif   defined (__AVR_ATmega8__)
49
 
 
50
 
# if     SREG != 0x3F                   \
51
 
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
52
 
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
53
 
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
54
 
     ||  !_SFR_IO_REG_P (SREG)
55
 
#  error
56
 
# endif
57
 
 
58
 
# if     UCSRC != 0x20                  \
59
 
     /*||  _SFR_ADDR (UCSRC) != 0x40*/  \
60
 
     /*||  _SFR_MEM_ADDR (UCSRC) != 0x40*/      \
61
 
     ||  _SFR_IO_ADDR (UCSRC) != 0x20   \
62
 
     ||  !_SFR_IO_REG_P (UCSRC)
63
 
#  error
64
 
# endif
65
 
 
66
 
# if     EEARH != 0x1F                  \
67
 
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
68
 
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
69
 
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
70
 
     ||  !_SFR_IO_REG_P (EEARH)
71
 
#  error
72
 
# endif
73
 
 
74
 
# if     TWBR != 0x00                   \
75
 
     /*||  _SFR_ADDR (TWBR) != 0x20*/   \
76
 
     /*||  _SFR_MEM_ADDR (TWBR) != 0x20*/       \
77
 
     ||  _SFR_IO_ADDR (TWBR) != 0x00    \
78
 
     ||  !_SFR_IO_REG_P (TWBR)
79
 
#  error
80
 
# endif
81
 
 
82
 
#elif   defined (__AVR_ATmega128__)
83
 
 
84
 
# if     UCSR1C != 0x9D                 \
85
 
     /*||  _SFR_ADDR (UCSR1C) != 0x9D*/ \
86
 
     ||  _SFR_MEM_ADDR (UCSR1C) != 0x9D \
87
 
     ||  _SFR_IO_REG_P (UCSR1C)
88
 
#  error
89
 
# endif
90
 
 
91
 
# if     DDRF != 0x61                   \
92
 
     /*||  _SFR_ADDR (DDRF) != 0x61*/   \
93
 
     ||  _SFR_MEM_ADDR (DDRF) != 0x61   \
94
 
     ||  _SFR_IO_REG_P (DDRF)
95
 
#  error
96
 
# endif
97
 
 
98
 
# if     SREG != 0x3F                   \
99
 
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
100
 
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
101
 
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
102
 
     ||  !_SFR_IO_REG_P (SREG)
103
 
#  error
104
 
# endif
105
 
 
106
 
# if     SFIOR != 0x20                  \
107
 
     /*||  _SFR_ADDR (SFIOR) != 0x40*/  \
108
 
     /*||  _SFR_MEM_ADDR (SFIOR) != 0x40*/      \
109
 
     ||  _SFR_IO_ADDR (SFIOR) != 0x20   \
110
 
     ||  !_SFR_IO_REG_P (SFIOR)
111
 
#  error
112
 
# endif
113
 
 
114
 
# if     EEARH != 0x1F                  \
115
 
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
116
 
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
117
 
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
118
 
     ||  !_SFR_IO_REG_P (EEARH)
119
 
#  error
120
 
# endif
121
 
 
122
 
# if     PINF != 0x00                   \
123
 
     /*||  _SFR_ADDR (PINF) != 0x20*/   \
124
 
     /*||  _SFR_MEM_ADDR (PINF) != 0x20*/       \
125
 
     ||  _SFR_IO_ADDR (PINF) != 0x00    \
126
 
     ||  !_SFR_IO_REG_P (PINF)
127
 
#  error
128
 
# endif
129
 
 
130
 
#endif
131
 
 
132
 
 
133
 
.macro  EXIT    result
134
 
        ldi     r24, lo8 (\result)
135
 
        ldi     r25, hi8 (\result)
136
 
        rjmp    exit
137
 
.endm
138
 
 
139
 
        .text
140
 
        .global main
141
 
main:
142
 
        sei
143
 
        in      r16, SREG
144
 
        sbrc    r16, SREG_I
145
 
        rjmp    0f
146
 
        EXIT    __LINE__
147
 
 
148
 
0:      cli
149
 
        in      r16, SREG
150
 
        sbrs    r16, SREG_I
151
 
        rjmp    0f
152
 
        EXIT    __LINE__
153
 
 
154
 
0:      sei
155
 
;;;     lds     r16, _SFR_ADDR (SREG)
156
 
;;;     sbrc    r16, SREG_I
157
 
        rjmp    0f
158
 
        EXIT    __LINE__
159
 
 
160
 
0:      cli
161
 
;;;     lds     r16, _SFR_ADDR (SREG)
162
 
;;;     sbrs    r16, SREG_I
163
 
        rjmp    0f
164
 
        EXIT    __LINE__
165
 
 
166
 
0:      sei
167
 
;;;     lds     r16, _SFR_MEM_ADDR (SREG)
168
 
;;;     sbrc    r16, SREG_I
169
 
        rjmp    0f
170
 
        EXIT    __LINE__
171
 
 
172
 
0:      cli
173
 
;;;     lds     r16, _SFR_MEM_ADDR (SREG)
174
 
;;;     sbrs    r16, SREG_I
175
 
        rjmp    0f
176
 
        EXIT    __LINE__
177
 
 
178
 
0:      sei
179
 
        in      r16, _SFR_IO_ADDR (SREG)
180
 
        sbrc    r16, SREG_I
181
 
        rjmp    0f
182
 
        EXIT    __LINE__
183
 
 
184
 
0:      cli
185
 
        in      r16, _SFR_IO_ADDR (SREG)
186
 
        sbrs    r16, SREG_I
187
 
        rjmp    0f
188
 
        EXIT    __LINE__
189
 
 
190
 
0:      EXIT    0
191
 
        .end