-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbits.lst
executable file
·779 lines (778 loc) · 25.4 KB
/
bits.lst
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
1 .file "bits.c"
2 __SP_H__ = 0x3e
3 __SP_L__ = 0x3d
4 __SREG__ = 0x3f
5 __RAMPZ__ = 0x3b
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .text
9 .Ltext0:
10 .cfi_sections .debug_frame
11 .section .text.ddr,"ax",@progbits
12 .global ddr
14 ddr:
15 .LFB1:
16 .file 1 "bits.c"
1:bits.c **** /** \file Access to AVR pins via constants.
2:bits.c **** *
3:bits.c **** * ddr(0xA3, 1) == enable DDRA |= (1 << 3)
4:bits.c **** * out(0xA3, 1) == PORTA |= (1 << 3)
5:bits.c **** * in(0xA3) == PINA & (1 << 3)
6:bits.c **** */
7:bits.c **** #include <avr/io.h>
8:bits.c **** #include <avr/pgmspace.h>
9:bits.c **** #include "bits.h"
10:bits.c ****
11:bits.c **** #define set_bit(PORT, PIN, VALUE) do { \
12:bits.c **** if (VALUE) \
13:bits.c **** sbi(PORT, PIN); \
14:bits.c **** else \
15:bits.c **** cbi(PORT, PIN); \
16:bits.c **** } while (0)
17:bits.c ****
18:bits.c **** #define get_bit(PORT, PIN) \
19:bits.c **** ((PORT) & (1 << PIN))
20:bits.c ****
21:bits.c ****
22:bits.c **** void
23:bits.c **** ddr(
24:bits.c **** const uint8_t id,
25:bits.c **** const uint8_t value
26:bits.c **** )
27:bits.c **** {
17 .loc 1 27 0
18 .cfi_startproc
19 .LVL0:
20 /* prologue: function */
21 /* frame size = 0 */
22 /* stack size = 0 */
23 .L__stack_usage = 0
28:bits.c **** const uint8_t port = (id >> 4) & 0xF;
29:bits.c **** const uint8_t pin = (id >> 0) & 0xF;
24 .loc 1 29 0
25 0000 982F mov r25,r24
26 0002 9F70 andi r25,lo8(15)
27 .LVL1:
30:bits.c ****
31:bits.c **** switch (port)
28 .loc 1 31 0
29 0004 8295 swap r24
30 .LVL2:
31 0006 8F70 andi r24,lo8(15)
32 0008 8C30 cpi r24,lo8(12)
33 000a 01F4 brne .+2
34 000c 00C0 rjmp .L3
35 000e 00F4 brsh .L4
36 0010 8A30 cpi r24,lo8(10)
37 0012 01F0 breq .L5
38 0014 8B30 cpi r24,lo8(11)
39 0016 01F0 breq .L6
40 0018 0895 ret
41 .L4:
42 001a 8E30 cpi r24,lo8(14)
43 001c 01F4 brne .+2
44 001e 00C0 rjmp .L7
45 0020 00F4 brsh .+2
46 0022 00C0 rjmp .L8
47 0024 8F30 cpi r24,lo8(15)
48 0026 01F4 brne .+2
49 0028 00C0 rjmp .L9
50 002a 0895 ret
51 .L5:
32:bits.c **** {
33:bits.c **** case 0xA:
34:bits.c **** set_bit(DDRA, pin, value);
52 .loc 1 34 0
53 002c 41B1 in r20,0x1
54 002e 21E0 ldi r18,lo8(1)
55 0030 30E0 ldi r19,0
56 0032 6623 tst r22
57 0034 01F0 breq .L10
58 .loc 1 34 0 is_stmt 0 discriminator 1
59 0036 B901 movw r22,r18
60 .LVL3:
61 0038 00C0 rjmp 2f
62 1:
63 003a 660F lsl r22
64 003c 771F rol r23
65 2:
66 003e 9A95 dec r25
67 0040 02F4 brpl 1b
68 0042 CB01 movw r24,r22
69 0044 842B or r24,r20
70 0046 00C0 rjmp .L16
71 .LVL4:
72 .L10:
73 .loc 1 34 0 discriminator 2
74 0048 B901 movw r22,r18
75 .LVL5:
76 004a 00C0 rjmp 2f
77 1:
78 004c 660F lsl r22
79 004e 771F rol r23
80 2:
81 0050 9A95 dec r25
82 0052 02F4 brpl 1b
83 0054 CB01 movw r24,r22
84 0056 8095 com r24
85 0058 8423 and r24,r20
86 .L16:
87 005a 81B9 out 0x1,r24
88 005c 0895 ret
89 .LVL6:
90 .L6:
35:bits.c **** return;
36:bits.c **** case 0xB:
37:bits.c **** set_bit(DDRB, pin, value);
91 .loc 1 37 0 is_stmt 1
92 005e 44B1 in r20,0x4
93 0060 21E0 ldi r18,lo8(1)
94 0062 30E0 ldi r19,0
95 0064 6623 tst r22
96 0066 01F0 breq .L11
97 .loc 1 37 0 is_stmt 0 discriminator 1
98 0068 B901 movw r22,r18
99 .LVL7:
100 006a 00C0 rjmp 2f
101 1:
102 006c 660F lsl r22
103 006e 771F rol r23
104 2:
105 0070 9A95 dec r25
106 0072 02F4 brpl 1b
107 0074 CB01 movw r24,r22
108 0076 842B or r24,r20
109 0078 00C0 rjmp .L19
110 .LVL8:
111 .L11:
112 .loc 1 37 0 discriminator 2
113 007a B901 movw r22,r18
114 .LVL9:
115 007c 00C0 rjmp 2f
116 1:
117 007e 660F lsl r22
118 0080 771F rol r23
119 2:
120 0082 9A95 dec r25
121 0084 02F4 brpl 1b
122 0086 CB01 movw r24,r22
123 0088 8095 com r24
124 008a 8423 and r24,r20
125 .L19:
126 008c 84B9 out 0x4,r24
127 008e 0895 ret
128 .LVL10:
129 .L3:
38:bits.c **** return;
39:bits.c **** case 0xC:
40:bits.c **** set_bit(DDRC, pin, value);
130 .loc 1 40 0 is_stmt 1
131 0090 47B1 in r20,0x7
132 0092 21E0 ldi r18,lo8(1)
133 0094 30E0 ldi r19,0
134 0096 6623 tst r22
135 0098 01F0 breq .L12
136 .loc 1 40 0 is_stmt 0 discriminator 1
137 009a B901 movw r22,r18
138 .LVL11:
139 009c 00C0 rjmp 2f
140 1:
141 009e 660F lsl r22
142 00a0 771F rol r23
143 2:
144 00a2 9A95 dec r25
145 00a4 02F4 brpl 1b
146 00a6 CB01 movw r24,r22
147 00a8 842B or r24,r20
148 00aa 00C0 rjmp .L21
149 .LVL12:
150 .L12:
151 .loc 1 40 0 discriminator 2
152 00ac B901 movw r22,r18
153 .LVL13:
154 00ae 00C0 rjmp 2f
155 1:
156 00b0 660F lsl r22
157 00b2 771F rol r23
158 2:
159 00b4 9A95 dec r25
160 00b6 02F4 brpl 1b
161 00b8 CB01 movw r24,r22
162 00ba 8095 com r24
163 00bc 8423 and r24,r20
164 .L21:
165 00be 87B9 out 0x7,r24
166 00c0 0895 ret
167 .LVL14:
168 .L8:
41:bits.c **** return;
42:bits.c **** case 0xD:
43:bits.c **** set_bit(DDRD, pin, value);
169 .loc 1 43 0 is_stmt 1
170 00c2 4AB1 in r20,0xa
171 00c4 21E0 ldi r18,lo8(1)
172 00c6 30E0 ldi r19,0
173 00c8 6623 tst r22
174 00ca 01F0 breq .L13
175 .loc 1 43 0 is_stmt 0 discriminator 1
176 00cc B901 movw r22,r18
177 .LVL15:
178 00ce 00C0 rjmp 2f
179 1:
180 00d0 660F lsl r22
181 00d2 771F rol r23
182 2:
183 00d4 9A95 dec r25
184 00d6 02F4 brpl 1b
185 00d8 CB01 movw r24,r22
186 00da 842B or r24,r20
187 00dc 00C0 rjmp .L20
188 .LVL16:
189 .L13:
190 .loc 1 43 0 discriminator 2
191 00de B901 movw r22,r18
192 .LVL17:
193 00e0 00C0 rjmp 2f
194 1:
195 00e2 660F lsl r22
196 00e4 771F rol r23
197 2:
198 00e6 9A95 dec r25
199 00e8 02F4 brpl 1b
200 00ea CB01 movw r24,r22
201 00ec 8095 com r24
202 00ee 8423 and r24,r20
203 .L20:
204 00f0 8AB9 out 0xa,r24
205 00f2 0895 ret
206 .LVL18:
207 .L7:
44:bits.c **** return;
45:bits.c **** case 0xE:
46:bits.c **** set_bit(DDRE, pin, value);
208 .loc 1 46 0 is_stmt 1
209 00f4 4DB1 in r20,0xd
210 00f6 21E0 ldi r18,lo8(1)
211 00f8 30E0 ldi r19,0
212 00fa 6623 tst r22
213 00fc 01F0 breq .L14
214 .loc 1 46 0 is_stmt 0 discriminator 1
215 00fe B901 movw r22,r18
216 .LVL19:
217 0100 00C0 rjmp 2f
218 1:
219 0102 660F lsl r22
220 0104 771F rol r23
221 2:
222 0106 9A95 dec r25
223 0108 02F4 brpl 1b
224 010a CB01 movw r24,r22
225 010c 842B or r24,r20
226 010e 00C0 rjmp .L18
227 .LVL20:
228 .L14:
229 .loc 1 46 0 discriminator 2
230 0110 B901 movw r22,r18
231 .LVL21:
232 0112 00C0 rjmp 2f
233 1:
234 0114 660F lsl r22
235 0116 771F rol r23
236 2:
237 0118 9A95 dec r25
238 011a 02F4 brpl 1b
239 011c CB01 movw r24,r22
240 011e 8095 com r24
241 0120 8423 and r24,r20
242 .L18:
243 0122 8DB9 out 0xd,r24
244 0124 0895 ret
245 .LVL22:
246 .L9:
47:bits.c **** return;
48:bits.c **** case 0xF:
49:bits.c **** set_bit(DDRF, pin, value);
247 .loc 1 49 0 is_stmt 1
248 0126 40B3 in r20,0x10
249 0128 21E0 ldi r18,lo8(1)
250 012a 30E0 ldi r19,0
251 012c 6623 tst r22
252 012e 01F0 breq .L15
253 .loc 1 49 0 is_stmt 0 discriminator 1
254 0130 B901 movw r22,r18
255 .LVL23:
256 0132 00C0 rjmp 2f
257 1:
258 0134 660F lsl r22
259 0136 771F rol r23
260 2:
261 0138 9A95 dec r25
262 013a 02F4 brpl 1b
263 013c CB01 movw r24,r22
264 013e 842B or r24,r20
265 0140 00C0 rjmp .L17
266 .LVL24:
267 .L15:
268 .loc 1 49 0 discriminator 2
269 0142 B901 movw r22,r18
270 .LVL25:
271 0144 00C0 rjmp 2f
272 1:
273 0146 660F lsl r22
274 0148 771F rol r23
275 2:
276 014a 9A95 dec r25
277 014c 02F4 brpl 1b
278 014e CB01 movw r24,r22
279 0150 8095 com r24
280 0152 8423 and r24,r20
281 .L17:
282 0154 80BB out 0x10,r24
283 0156 0895 ret
284 .cfi_endproc
285 .LFE1:
287 .section .text.out,"ax",@progbits
288 .global out
290 out:
291 .LFB2:
50:bits.c **** return;
51:bits.c **** }
52:bits.c **** }
53:bits.c ****
54:bits.c ****
55:bits.c **** void
56:bits.c **** out(
57:bits.c **** const uint8_t id,
58:bits.c **** const uint8_t value
59:bits.c **** )
60:bits.c **** {
292 .loc 1 60 0 is_stmt 1
293 .cfi_startproc
294 .LVL26:
295 /* prologue: function */
296 /* frame size = 0 */
297 /* stack size = 0 */
298 .L__stack_usage = 0
61:bits.c **** const uint8_t port = (id >> 4) & 0xF;
62:bits.c **** const uint8_t pin = (id >> 0) & 0xF;
299 .loc 1 62 0
300 0000 982F mov r25,r24
301 0002 9F70 andi r25,lo8(15)
302 .LVL27:
63:bits.c ****
64:bits.c **** switch (port)
303 .loc 1 64 0
304 0004 8295 swap r24
305 .LVL28:
306 0006 8F70 andi r24,lo8(15)
307 0008 8C30 cpi r24,lo8(12)
308 000a 01F4 brne .+2
309 000c 00C0 rjmp .L25
310 000e 00F4 brsh .L26
311 0010 8A30 cpi r24,lo8(10)
312 0012 01F0 breq .L27
313 0014 8B30 cpi r24,lo8(11)
314 0016 01F0 breq .L28
315 0018 00C0 rjmp .L24
316 .L26:
317 001a 8E30 cpi r24,lo8(14)
318 001c 01F4 brne .+2
319 001e 00C0 rjmp .L29
320 0020 00F4 brsh .+2
321 0022 00C0 rjmp .L30
322 0024 8F30 cpi r24,lo8(15)
323 0026 01F4 brne .+2
324 0028 00C0 rjmp .L31
325 002a 00C0 rjmp .L24
326 .L27:
65:bits.c **** {
66:bits.c **** case 0xA:
67:bits.c **** set_bit(PORTA, pin, value);
327 .loc 1 67 0
328 002c 42B1 in r20,0x2
329 002e 21E0 ldi r18,lo8(1)
330 0030 30E0 ldi r19,0
331 0032 6623 tst r22
332 0034 01F0 breq .L32
333 .loc 1 67 0 is_stmt 0 discriminator 1
334 0036 B901 movw r22,r18
335 .LVL29:
336 0038 00C0 rjmp 2f
337 1:
338 003a 660F lsl r22
339 003c 771F rol r23
340 2:
341 003e 9A95 dec r25
342 0040 02F4 brpl 1b
343 0042 CB01 movw r24,r22
344 0044 842B or r24,r20
345 0046 00C0 rjmp .L41
346 .LVL30:
347 .L32:
348 .loc 1 67 0 discriminator 2
349 0048 B901 movw r22,r18
350 .LVL31:
351 004a 00C0 rjmp 2f
352 1:
353 004c 660F lsl r22
354 004e 771F rol r23
355 2:
356 0050 9A95 dec r25
357 0052 02F4 brpl 1b
358 0054 CB01 movw r24,r22
359 0056 8095 com r24
360 0058 8423 and r24,r20
361 .L41:
362 005a 82B9 out 0x2,r24
363 005c 0895 ret
364 .LVL32:
365 .L28:
68:bits.c **** return;
69:bits.c **** case 0xB:
70:bits.c **** set_bit(PORTB, pin, value);
366 .loc 1 70 0 is_stmt 1
367 005e 45B1 in r20,0x5
368 0060 21E0 ldi r18,lo8(1)
369 0062 30E0 ldi r19,0
370 0064 6623 tst r22
371 0066 01F0 breq .L34
372 .loc 1 70 0 is_stmt 0 discriminator 1
373 0068 B901 movw r22,r18
374 .LVL33:
375 006a 00C0 rjmp 2f
376 1:
377 006c 660F lsl r22
378 006e 771F rol r23
379 2:
380 0070 9A95 dec r25
381 0072 02F4 brpl 1b
382 0074 CB01 movw r24,r22
383 0076 842B or r24,r20
384 0078 00C0 rjmp .L43
385 .LVL34:
386 .L34:
387 .loc 1 70 0 discriminator 2
388 007a B901 movw r22,r18
389 .LVL35:
390 007c 00C0 rjmp 2f
391 1:
392 007e 660F lsl r22
393 0080 771F rol r23
394 2:
395 0082 9A95 dec r25
396 0084 02F4 brpl 1b
397 0086 CB01 movw r24,r22
398 0088 8095 com r24
399 008a 8423 and r24,r20
400 .L43:
401 008c 85B9 out 0x5,r24
402 008e 0895 ret
403 .LVL36:
404 .L25:
71:bits.c **** return;
72:bits.c **** case 0xC:
73:bits.c **** set_bit(PORTC, pin, value);
405 .loc 1 73 0 is_stmt 1
406 0090 48B1 in r20,0x8
407 0092 21E0 ldi r18,lo8(1)
408 0094 30E0 ldi r19,0
409 0096 6623 tst r22
410 0098 01F0 breq .L35
411 .loc 1 73 0 is_stmt 0 discriminator 1
412 009a B901 movw r22,r18
413 .LVL37:
414 009c 00C0 rjmp 2f
415 1:
416 009e 660F lsl r22
417 00a0 771F rol r23
418 2:
419 00a2 9A95 dec r25
420 00a4 02F4 brpl 1b
421 00a6 CB01 movw r24,r22
422 00a8 842B or r24,r20
423 00aa 00C0 rjmp .L44
424 .LVL38:
425 .L35:
426 .loc 1 73 0 discriminator 2
427 00ac B901 movw r22,r18
428 .LVL39:
429 00ae 00C0 rjmp 2f
430 1:
431 00b0 660F lsl r22
432 00b2 771F rol r23
433 2:
434 00b4 9A95 dec r25
435 00b6 02F4 brpl 1b
436 00b8 CB01 movw r24,r22
437 00ba 8095 com r24
438 00bc 8423 and r24,r20
439 .L44:
440 00be 88B9 out 0x8,r24
441 00c0 0895 ret
442 .LVL40:
443 .L30:
74:bits.c **** return;
75:bits.c **** case 0xD:
76:bits.c **** set_bit(PORTD, pin, value);
444 .loc 1 76 0 is_stmt 1
445 00c2 4BB1 in r20,0xb
446 00c4 21E0 ldi r18,lo8(1)
447 00c6 30E0 ldi r19,0
448 00c8 6623 tst r22
449 00ca 01F0 breq .L36
450 .loc 1 76 0 is_stmt 0 discriminator 1
451 00cc B901 movw r22,r18
452 .LVL41:
453 00ce 00C0 rjmp 2f
454 1:
455 00d0 660F lsl r22
456 00d2 771F rol r23
457 2:
458 00d4 9A95 dec r25
459 00d6 02F4 brpl 1b
460 00d8 CB01 movw r24,r22
461 00da 842B or r24,r20
462 00dc 00C0 rjmp .L42
463 .LVL42:
464 .L36:
465 .loc 1 76 0 discriminator 2
466 00de B901 movw r22,r18
467 .LVL43:
468 00e0 00C0 rjmp 2f
469 1:
470 00e2 660F lsl r22
471 00e4 771F rol r23
472 2:
473 00e6 9A95 dec r25
474 00e8 02F4 brpl 1b
475 00ea CB01 movw r24,r22
476 00ec 8095 com r24
477 00ee 8423 and r24,r20
478 .L42:
479 00f0 8BB9 out 0xb,r24
480 00f2 0895 ret
481 .LVL44:
482 .L29:
77:bits.c **** return;
78:bits.c **** case 0xE:
79:bits.c **** set_bit(PORTE, pin, value);
483 .loc 1 79 0 is_stmt 1
484 00f4 4EB1 in r20,0xe
485 00f6 21E0 ldi r18,lo8(1)
486 00f8 30E0 ldi r19,0
487 00fa 6623 tst r22
488 00fc 01F0 breq .L37
489 .loc 1 79 0 is_stmt 0 discriminator 1
490 00fe B901 movw r22,r18
491 .LVL45:
492 0100 00C0 rjmp 2f
493 1:
494 0102 660F lsl r22
495 0104 771F rol r23
496 2:
497 0106 9A95 dec r25
498 0108 02F4 brpl 1b
499 010a CB01 movw r24,r22
500 010c 842B or r24,r20
501 010e 00C0 rjmp .L40
502 .LVL46:
503 .L37:
504 .loc 1 79 0 discriminator 2
505 0110 B901 movw r22,r18
506 .LVL47:
507 0112 00C0 rjmp 2f
508 1:
509 0114 660F lsl r22
510 0116 771F rol r23
511 2:
512 0118 9A95 dec r25
513 011a 02F4 brpl 1b
514 011c CB01 movw r24,r22
515 011e 8095 com r24
516 0120 8423 and r24,r20
517 .L40:
518 0122 8EB9 out 0xe,r24
519 0124 0895 ret
520 .LVL48:
521 .L31:
80:bits.c **** return;
81:bits.c **** case 0xF:
82:bits.c **** set_bit(PORTF, pin, value);
522 .loc 1 82 0 is_stmt 1
523 0126 41B3 in r20,0x11
524 0128 21E0 ldi r18,lo8(1)
525 012a 30E0 ldi r19,0
526 012c 6623 tst r22
527 012e 01F0 breq .L38
528 .loc 1 82 0 is_stmt 0 discriminator 1
529 0130 B901 movw r22,r18
530 .LVL49:
531 0132 00C0 rjmp 2f
532 1:
533 0134 660F lsl r22
534 0136 771F rol r23
535 2:
536 0138 9A95 dec r25
537 013a 02F4 brpl 1b
538 013c CB01 movw r24,r22
539 013e 842B or r24,r20
540 0140 00C0 rjmp .L39
541 .LVL50:
542 .L38:
543 .loc 1 82 0 discriminator 2
544 0142 B901 movw r22,r18
545 .LVL51:
546 0144 00C0 rjmp 2f
547 1:
548 0146 660F lsl r22
549 0148 771F rol r23
550 2:
551 014a 9A95 dec r25
552 014c 02F4 brpl 1b
553 014e CB01 movw r24,r22
554 0150 8095 com r24
555 0152 8423 and r24,r20
556 .L39:
557 0154 81BB out 0x11,r24
558 0156 0895 ret
559 .LVL52:
560 .L24:
83:bits.c **** return;
84:bits.c **** }
85:bits.c ****
86:bits.c **** send_str(PSTR("bad\r\n"));
561 .loc 1 86 0 is_stmt 1
562 0158 80E0 ldi r24,lo8(__c.1793)
563 015a 90E0 ldi r25,hi8(__c.1793)
564 015c 0C94 0000 jmp send_str
565 .LVL53:
566 .cfi_endproc
567 .LFE2:
569 .section .text.in,"ax",@progbits
570 .global in
572 in:
573 .LFB3:
87:bits.c **** }
88:bits.c ****
89:bits.c ****
90:bits.c **** uint8_t
91:bits.c **** in(
92:bits.c **** const uint8_t id
93:bits.c **** )
94:bits.c **** {
574 .loc 1 94 0
575 .cfi_startproc
576 .LVL54:
577 /* prologue: function */
578 /* frame size = 0 */
579 /* stack size = 0 */
580 .L__stack_usage = 0
95:bits.c **** const uint8_t port = (id >> 4) & 0xF;
96:bits.c **** const uint8_t pin = (id >> 0) & 0xF;
581 .loc 1 96 0
582 0000 282F mov r18,r24
583 0002 2F70 andi r18,lo8(15)
584 .LVL55:
97:bits.c ****
98:bits.c **** switch (port)
585 .loc 1 98 0
586 0004 8295 swap r24
587 .LVL56:
588 0006 8F70 andi r24,lo8(15)
589 0008 8C30 cpi r24,lo8(12)
590 000a 01F0 breq .L47
591 000c 00F4 brsh .L48
592 000e 8A30 cpi r24,lo8(10)
593 0010 01F0 breq .L49
594 0012 8B30 cpi r24,lo8(11)
595 0014 01F4 brne .L54
99:bits.c **** {
100:bits.c **** case 0xA:
101:bits.c **** return get_bit(PINA, pin);
102:bits.c **** case 0xB:
103:bits.c **** return get_bit(PINB, pin);
596 .loc 1 103 0
597 0016 33B1 in r19,0x3
598 0018 00C0 rjmp .L55
599 .L48:
98:bits.c **** {
600 .loc 1 98 0
601 001a 8E30 cpi r24,lo8(14)
602 001c 01F0 breq .L51
603 001e 00F0 brlo .L52
604 0020 8F30 cpi r24,lo8(15)
605 0022 01F4 brne .L54
104:bits.c **** case 0xC:
105:bits.c **** return get_bit(PINC, pin);
106:bits.c **** case 0xD:
107:bits.c **** return get_bit(PIND, pin);
108:bits.c **** case 0xE:
109:bits.c **** return get_bit(PINE, pin);
110:bits.c **** case 0xF:
111:bits.c **** return get_bit(PINF, pin);
606 .loc 1 111 0
607 0024 3FB1 in r19,0xf
608 0026 00C0 rjmp .L55
609 .L49:
101:bits.c **** case 0xB:
610 .loc 1 101 0
611 0028 30B1 in r19,0
612 002a 00C0 rjmp .L55
613 .L47:
105:bits.c **** case 0xD:
614 .loc 1 105 0
615 002c 36B1 in r19,0x6
616 002e 00C0 rjmp .L55
617 .L52:
107:bits.c **** case 0xE:
618 .loc 1 107 0
619 0030 39B1 in r19,0x9
620 0032 00C0 rjmp .L55
621 .L51:
109:bits.c **** case 0xF:
622 .loc 1 109 0
623 0034 3CB1 in r19,0xc
624 .L55:
625 .loc 1 111 0
626 0036 81E0 ldi r24,lo8(1)
627 0038 90E0 ldi r25,0
628 003a 00C0 rjmp 2f
629 1:
630 003c 880F lsl r24
631 2:
632 003e 2A95 dec r18
633 0040 02F4 brpl 1b
634 0042 8323 and r24,r19
635 0044 0895 ret
636 .L54:
112:bits.c **** }
113:bits.c ****
114:bits.c **** return 0;
637 .loc 1 114 0
638 0046 80E0 ldi r24,0
115:bits.c **** }
639 .loc 1 115 0
640 0048 0895 ret
641 .cfi_endproc
642 .LFE3:
644 .section .progmem.data,"a",@progbits
647 __c.1793:
648 0000 6261 640D .string "bad\r\n"
648 0A00
649 .text
650 .Letext0:
651 .file 2 "/usr/lib/avr/include/stdint.h"
DEFINED SYMBOLS
*ABS*:0000000000000000 bits.c
/tmp/ccjkeghV.s:2 *ABS*:000000000000003e __SP_H__
/tmp/ccjkeghV.s:3 *ABS*:000000000000003d __SP_L__
/tmp/ccjkeghV.s:4 *ABS*:000000000000003f __SREG__
/tmp/ccjkeghV.s:5 *ABS*:000000000000003b __RAMPZ__
/tmp/ccjkeghV.s:6 *ABS*:0000000000000000 __tmp_reg__
/tmp/ccjkeghV.s:7 *ABS*:0000000000000001 __zero_reg__
/tmp/ccjkeghV.s:14 .text.ddr:0000000000000000 ddr
/tmp/ccjkeghV.s:290 .text.out:0000000000000000 out
/tmp/ccjkeghV.s:647 .progmem.data:0000000000000000 __c.1793
/tmp/ccjkeghV.s:572 .text.in:0000000000000000 in
UNDEFINED SYMBOLS
send_str