Created
April 17, 2025 21:50
-
-
Save andrewrk/838a3408d10b2eb220c42311fa2716a4 to your computer and use it in GitHub Desktop.
litmus test for restricted function pointer types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
andy@bark ~/d/z/build-release (master) [1]> stage3/bin/zig build-obj test.zig -target avr-freestanding -OReleaseFast | |
andy@bark ~/d/z/build-release (master)> ~/local/llvm20-assert/bin/llvm-objdump -d test.o | |
test.o: file format elf32-avr | |
Disassembly of section .text: | |
00000000 <example>: | |
0: 6f 92 7f 92 <unknown> | |
4: 8f 92 9f 92 <unknown> | |
8: af 92 bf 92 <unknown> | |
c: cf 92 df 92 <unknown> | |
10: ef 92 ff 92 <unknown> | |
14: 0f 93 1f 93 <unknown> | |
18: cf 93 df 93 <unknown> | |
1c: cd b7 in r28, 0x3d | |
1e: de b7 in r29, 0x3e | |
20: 28 97 0f b6 <unknown> | |
24: f8 94 cli | |
26: de bf out 0x3e, r29 | |
28: 0f be out 0x3f, r0 | |
2a: cd bf out 0x3d, r28 | |
2c: 00 e0 ldi r16, 0x0 | |
2e: 10 e0 ldi r17, 0x0 | |
30: c0 90 00 00 <unknown> | |
34: d0 90 00 00 <unknown> | |
38: e0 90 00 00 <unknown> | |
3c: f0 90 00 00 <unknown> | |
40: 8c 2f mov r24, r28 | |
42: 9d 2f mov r25, r29 | |
44: 01 96 a8 2e <unknown> | |
48: b9 2e mov r11, r25 | |
4a: 84 e0 ldi r24, 0x4 | |
4c: 90 e0 ldi r25, 0x0 | |
4e: 88 2e mov r8, r24 | |
50: 99 2e mov r9, r25 | |
52: 8c 2f mov r24, r28 | |
54: 9d 2f mov r25, r29 | |
56: 05 96 68 2e <unknown> | |
5a: 79 2e mov r7, r25 | |
5c: 4a 2d mov r20, r10 | |
5e: 5b 2d mov r21, r11 | |
60: 40 0f add r20, r16 | |
62: 51 1f adc r21, r17 | |
64: 28 2d mov r18, r8 | |
66: 39 2d mov r19, r9 | |
68: 20 1b sub r18, r16 | |
6a: 31 0b sbc r19, r17 | |
6c: 86 2d mov r24, r6 | |
6e: 97 2d mov r25, r7 | |
70: 6e 2d mov r22, r14 | |
72: 7f 2d mov r23, r15 | |
74: ec 2d mov r30, r12 | |
76: fd 2d mov r31, r13 | |
78: 09 95 8d 81 <unknown> | |
7c: 9e 81 ldd r25, Y+6 | |
7e: 08 0f add r16, r24 | |
80: 19 1f adc r17, r25 | |
82: 04 30 cpi r16, 0x4 | |
84: 11 05 cpc r17, r1 | |
86: 50 f3 brlo .-44 | |
88: 8b 81 ldd r24, Y+3 | |
8a: 9c 81 ldd r25, Y+4 | |
8c: 69 81 ldd r22, Y+1 | |
8e: 7a 81 ldd r23, Y+2 | |
90: 28 96 0f b6 <unknown> | |
94: f8 94 cli | |
96: de bf out 0x3e, r29 | |
98: 0f be out 0x3f, r0 | |
9a: cd bf out 0x3d, r28 | |
9c: df 91 cf 91 <unknown> | |
a0: 1f 91 0f 91 <unknown> | |
a4: ff 90 ef 90 <unknown> | |
a8: df 90 cf 90 <unknown> | |
ac: bf 90 af 90 <unknown> | |
b0: 9f 90 8f 90 <unknown> | |
b4: 7f 90 6f 90 <unknown> | |
b8: 08 95 ret | |
000000ba <io.GenericReader(void,error{},(function 'read')).typeErasedReadFn>: | |
ba: a4 2f mov r26, r20 | |
bc: b5 2f mov r27, r21 | |
be: 20 91 be ba <unknown> | |
c2: 2c 93 st X, r18 | |
c4: 20 e0 ldi r18, 0x0 | |
c6: 30 e0 ldi r19, 0x0 | |
c8: e8 2f mov r30, r24 | |
ca: f9 2f mov r31, r25 | |
cc: 33 83 std Z+3, r19 | |
ce: 22 83 std Z+2, r18 | |
d0: 81 e0 ldi r24, 0x1 | |
d2: 90 e0 ldi r25, 0x0 | |
d4: 91 83 std Z+1, r25 | |
d6: 80 83 std Z+0, r24 | |
d8: 08 95 ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const std = @import("std"); | |
const uart: *volatile u8 = @ptrFromInt(0xbabe); | |
fn read(context: void, buffer: []u8) error{}!usize { | |
_ = context; | |
buffer[0] = uart.*; | |
return 1; | |
} | |
export fn example() u32 { | |
var reader: std.io.GenericReader(void, error{}, read) = .{ | |
.context = {}, | |
}; | |
return reader.readInt(u32, .little) catch unreachable; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
andy@bark ~/s/z/build-release (wrangle-writer-buffering) [1]> stage3/bin/zig build-obj test.zig -OReleaseFast -target avr-freestanding | |
andy@bark ~/s/z/build-release (wrangle-writer-buffering)> ~/local/llvm20-assert/bin/llvm-objdump -d test.o | |
test.o: file format elf32-avr | |
Disassembly of section .text: | |
00000000 <example>: | |
0: cf 92 df 92 <unknown> | |
4: ef 92 ff 92 <unknown> | |
8: 0f 93 1f 93 <unknown> | |
c: cf 93 df 93 <unknown> | |
10: cd b7 in r28, 0x3d | |
12: de b7 in r29, 0x3e | |
14: 6a 97 0f b6 <unknown> | |
18: f8 94 cli | |
1a: de bf out 0x3e, r29 | |
1c: 0f be out 0x3f, r0 | |
1e: cd bf out 0x3d, r28 | |
20: 80 91 00 00 <unknown> | |
24: 90 91 00 00 <unknown> | |
28: 98 8b std Y+0, r25 | |
2a: 8f 87 std Y+7, r24 | |
2c: 80 91 00 00 <unknown> | |
30: 90 91 00 00 <unknown> | |
34: 9e 87 std Y+6, r25 | |
36: 8d 87 std Y+5, r24 | |
38: 80 e0 ldi r24, 0x0 | |
3a: 90 e0 ldi r25, 0x0 | |
3c: 9c 87 std Y+4, r25 | |
3e: 8b 87 std Y+3, r24 | |
40: 24 e0 ldi r18, 0x4 | |
42: 30 e0 ldi r19, 0x0 | |
44: 38 87 std Y+0, r19 | |
46: 2f 83 std Y+7, r18 | |
48: 2c 2f mov r18, r28 | |
4a: 3d 2f mov r19, r29 | |
4c: 2d 5e subi r18, 0xed | |
4e: 3f 4f sbci r19, 0xff | |
50: 3e 83 std Y+6, r19 | |
52: 2d 83 std Y+5, r18 | |
54: 20 e0 ldi r18, 0x0 | |
56: 30 e0 ldi r19, 0x0 | |
58: 3c 83 std Y+4, r19 | |
5a: 2b 83 std Y+3, r18 | |
5c: 2c 2f mov r18, r28 | |
5e: 3d 2f mov r19, r29 | |
60: 2f 5f subi r18, 0xff | |
62: 3f 4f sbci r19, 0xff | |
64: e2 2e mov r14, r18 | |
66: f3 2e mov r15, r19 | |
68: 3a 83 std Y+2, r19 | |
6a: 29 83 std Y+1, r18 | |
6c: 9a 8b std Y+2, r25 | |
6e: 89 8b std Y+1, r24 | |
70: 9a 87 std Y+2, r25 | |
72: 89 87 std Y+1, r24 | |
74: 0c 2f mov r16, r28 | |
76: 1d 2f mov r17, r29 | |
78: 09 5e subi r16, 0xe9 | |
7a: 1f 4f sbci r17, 0xff | |
7c: 8f ef ldi r24, 0xff | |
7e: 9f ef ldi r25, 0xff | |
80: c8 2e mov r12, r24 | |
82: d9 2e mov r13, r25 | |
84: ef 85 ldd r30, Y+7 | |
86: f8 89 ldd r31, Y+0 | |
88: a0 81 ldd r26, Z+0 | |
8a: b1 81 ldd r27, Z+1 | |
8c: 6d 85 ldd r22, Y+5 | |
8e: 7e 85 ldd r23, Y+6 | |
90: 80 2f mov r24, r16 | |
92: 91 2f mov r25, r17 | |
94: 4e 2d mov r20, r14 | |
96: 5f 2d mov r21, r15 | |
98: 2c 2d mov r18, r12 | |
9a: 3d 2d mov r19, r13 | |
9c: ea 2f mov r30, r26 | |
9e: fb 2f mov r31, r27 | |
a0: 09 95 89 85 <unknown> | |
a4: 9a 85 ldd r25, Y+2 | |
a6: 84 30 cpi r24, 0x4 | |
a8: 91 05 cpc r25, r1 | |
aa: 60 f3 brlo .-40 | |
ac: 89 89 ldd r24, Y+1 | |
ae: 9a 89 ldd r25, Y+2 | |
b0: e8 2f mov r30, r24 | |
b2: f9 2f mov r31, r25 | |
b4: 34 96 fa 8b <unknown> | |
b8: e9 8b std Y+1, r30 | |
ba: 2d 81 ldd r18, Y+5 | |
bc: 3e 81 ldd r19, Y+6 | |
be: 28 0f add r18, r24 | |
c0: 39 1f adc r19, r25 | |
c2: e2 2f mov r30, r18 | |
c4: f3 2f mov r31, r19 | |
c6: 60 81 ldd r22, Z+0 | |
c8: 71 81 ldd r23, Z+1 | |
ca: 82 81 ldd r24, Z+2 | |
cc: 93 81 ldd r25, Z+3 | |
ce: 6a 96 0f b6 <unknown> | |
d2: f8 94 cli | |
d4: de bf out 0x3e, r29 | |
d6: 0f be out 0x3f, r0 | |
d8: cd bf out 0x3d, r28 | |
da: df 91 cf 91 <unknown> | |
de: 1f 91 0f 91 <unknown> | |
e2: ff 90 ef 90 <unknown> | |
e6: df 90 cf 90 <unknown> | |
ea: 08 95 ret | |
000000ec <test.read>: | |
ec: 2f 92 3f 92 <unknown> | |
f0: 4f 92 5f 92 <unknown> | |
f4: 6f 92 7f 92 <unknown> | |
f8: 8f 92 9f 92 <unknown> | |
fc: af 92 bf 92 <unknown> | |
100: cf 92 df 92 <unknown> | |
104: ff 92 0f 93 <unknown> | |
108: 1f 93 cf 93 <unknown> | |
10c: df 93 cd b7 <unknown> | |
110: de b7 in r29, 0x3e | |
112: 2f 97 0f b6 <unknown> | |
116: f8 94 cli | |
118: de bf out 0x3e, r29 | |
11a: 0f be out 0x3f, r0 | |
11c: cd bf out 0x3d, r28 | |
11e: 21 15 cp r18, r1 | |
120: 31 05 cpc r19, r1 | |
122: 09 f4 brne .+2 | |
124: 28 c0 rjmp .+80 | |
126: f0 90 be ba <unknown> | |
12a: e4 2f mov r30, r20 | |
12c: f5 2f mov r31, r21 | |
12e: 64 81 ldd r22, Z+4 | |
130: 75 81 ldd r23, Z+5 | |
132: a0 85 ldd r26, Z+0 | |
134: b1 85 ldd r27, Z+1 | |
136: 26 81 ldd r18, Z+6 | |
138: 37 81 ldd r19, Z+7 | |
13a: a2 17 cp r26, r18 | |
13c: b3 07 cpc r27, r19 | |
13e: 20 e0 ldi r18, 0x0 | |
140: 30 e0 ldi r19, 0x0 | |
142: 01 e0 ldi r16, 0x1 | |
144: 10 e0 ldi r17, 0x0 | |
146: 08 f0 brlo .+2 | |
148: 36 c0 rjmp .+108 | |
14a: e6 2f mov r30, r22 | |
14c: f7 2f mov r31, r23 | |
14e: ea 0f add r30, r26 | |
150: fb 1f adc r31, r27 | |
152: f0 82 std Z+0, r15 | |
154: 11 96 e4 2f <unknown> | |
158: f5 2f mov r31, r21 | |
15a: b1 87 std Z+1, r27 | |
15c: a0 87 std Z+0, r26 | |
15e: a2 85 ldd r26, Z+2 | |
160: b3 85 ldd r27, Z+3 | |
162: 11 96 b3 87 <unknown> | |
166: a2 87 std Z+2, r26 | |
168: e8 2f mov r30, r24 | |
16a: f9 2f mov r31, r25 | |
16c: 33 83 std Z+3, r19 | |
16e: 22 83 std Z+2, r18 | |
170: 11 83 std Z+1, r17 | |
172: 00 83 std Z+0, r16 | |
174: 08 c0 rjmp .+16 | |
176: 20 e0 ldi r18, 0x0 | |
178: 30 e0 ldi r19, 0x0 | |
17a: e8 2f mov r30, r24 | |
17c: f9 2f mov r31, r25 | |
17e: 33 83 std Z+3, r19 | |
180: 22 83 std Z+2, r18 | |
182: 31 83 std Z+1, r19 | |
184: 20 83 std Z+0, r18 | |
186: 2f 96 0f b6 <unknown> | |
18a: f8 94 cli | |
18c: de bf out 0x3e, r29 | |
18e: 0f be out 0x3f, r0 | |
190: cd bf out 0x3d, r28 | |
192: df 91 cf 91 <unknown> | |
196: 1f 91 0f 91 <unknown> | |
19a: ff 90 df 90 <unknown> | |
19e: cf 90 bf 90 <unknown> | |
1a2: af 90 9f 90 <unknown> | |
1a6: 8f 90 7f 90 <unknown> | |
1aa: 6f 90 5f 90 <unknown> | |
1ae: 4f 90 3f 90 <unknown> | |
1b2: 2f 90 08 95 <unknown> | |
1b6: 6a 2e mov r6, r26 | |
1b8: 7b 2e mov r7, r27 | |
1ba: be 83 std Y+6, r27 | |
1bc: ad 83 std Y+5, r26 | |
1be: 7a 83 std Y+2, r23 | |
1c0: 69 83 std Y+1, r22 | |
1c2: 7c 83 std Y+4, r23 | |
1c4: 6b 83 std Y+3, r22 | |
1c6: fb 86 std Y+3, r15 | |
1c8: 1a 87 std Y+2, r17 | |
1ca: 09 87 std Y+1, r16 | |
1cc: 2c 2f mov r18, r28 | |
1ce: 3d 2f mov r19, r29 | |
1d0: 25 5f subi r18, 0xf5 | |
1d2: 3f 4f sbci r19, 0xff | |
1d4: 38 87 std Y+0, r19 | |
1d6: 2f 83 std Y+7, r18 | |
1d8: e4 2f mov r30, r20 | |
1da: f5 2f mov r31, r21 | |
1dc: 2c 2f mov r18, r28 | |
1de: 3d 2f mov r19, r29 | |
1e0: 24 5f subi r18, 0xf4 | |
1e2: 3f 4f sbci r19, 0xff | |
1e4: 82 2e mov r8, r18 | |
1e6: 93 2e mov r9, r19 | |
1e8: 2c 2f mov r18, r28 | |
1ea: 3d 2f mov r19, r29 | |
1ec: 2d 5f subi r18, 0xfd | |
1ee: 3f 4f sbci r19, 0xff | |
1f0: 42 2e mov r4, r18 | |
1f2: 53 2e mov r5, r19 | |
1f4: a4 2e mov r10, r20 | |
1f6: b5 2e mov r11, r21 | |
1f8: c8 2e mov r12, r24 | |
1fa: d9 2e mov r13, r25 | |
1fc: 60 81 ldd r22, Z+0 | |
1fe: 71 81 ldd r23, Z+1 | |
200: 2e 2e mov r2, r30 | |
202: 3f 2e mov r3, r31 | |
204: 82 81 ldd r24, Z+2 | |
206: 93 81 ldd r25, Z+3 | |
208: e8 2f mov r30, r24 | |
20a: f9 2f mov r31, r25 | |
20c: a0 81 ldd r26, Z+0 | |
20e: b1 81 ldd r27, Z+1 | |
210: 88 2d mov r24, r8 | |
212: 99 2d mov r25, r9 | |
214: 44 2d mov r20, r4 | |
216: 55 2d mov r21, r5 | |
218: 22 e0 ldi r18, 0x2 | |
21a: 30 e0 ldi r19, 0x0 | |
21c: ea 2f mov r30, r26 | |
21e: fb 2f mov r31, r27 | |
220: 09 95 8e 85 <unknown> | |
224: 9f 85 ldd r25, Y+7 | |
226: 81 15 cp r24, r1 | |
228: 91 05 cpc r25, r1 | |
22a: 09 f0 breq .+2 | |
22c: 21 c0 rjmp .+66 | |
22e: 2c 85 ldd r18, Y+4 | |
230: 3d 85 ldd r19, Y+5 | |
232: 21 15 cp r18, r1 | |
234: 31 05 cpc r19, r1 | |
236: 8c 2d mov r24, r12 | |
238: 9d 2d mov r25, r13 | |
23a: 4a 2d mov r20, r10 | |
23c: 5b 2d mov r21, r11 | |
23e: e2 2d mov r30, r2 | |
240: f3 2d mov r31, r3 | |
242: 09 f4 brne .+2 | |
244: d7 cf rjmp .-82 | |
246: e4 2f mov r30, r20 | |
248: f5 2f mov r31, r21 | |
24a: a2 85 ldd r26, Z+2 | |
24c: b3 85 ldd r27, Z+3 | |
24e: 11 96 b3 87 <unknown> | |
252: a2 87 std Z+2, r26 | |
254: 26 15 cp r18, r6 | |
256: 37 05 cpc r19, r7 | |
258: 80 f0 brlo .+32 | |
25a: 62 16 cp r6, r18 | |
25c: 73 06 cpc r7, r19 | |
25e: 08 f0 brlo .+2 | |
260: 35 c0 rjmp .+106 | |
262: e4 2f mov r30, r20 | |
264: f5 2f mov r31, r21 | |
266: 20 e0 ldi r18, 0x0 | |
268: 30 e0 ldi r19, 0x0 | |
26a: 31 87 std Z+1, r19 | |
26c: 20 87 std Z+0, r18 | |
26e: 7c cf rjmp .-264 | |
270: ec 2d mov r30, r12 | |
272: fd 2d mov r31, r13 | |
274: 93 83 std Z+3, r25 | |
276: 82 83 std Z+2, r24 | |
278: 86 cf rjmp .-244 | |
27a: 62 1a sub r6, r18 | |
27c: 73 0a sbc r7, r19 | |
27e: 66 2d mov r22, r6 | |
280: 77 2d mov r23, r7 | |
282: 89 81 ldd r24, Y+1 | |
284: 9a 81 ldd r25, Y+2 | |
286: 28 0f add r18, r24 | |
288: 39 1f adc r19, r25 | |
28a: 80 e0 ldi r24, 0x0 | |
28c: 90 e0 ldi r25, 0x0 | |
28e: a9 81 ldd r26, Y+1 | |
290: ba 81 ldd r27, Y+2 | |
292: a8 0f add r26, r24 | |
294: b9 1f adc r27, r25 | |
296: e2 2f mov r30, r18 | |
298: f3 2f mov r31, r19 | |
29a: e8 0f add r30, r24 | |
29c: f9 1f adc r31, r25 | |
29e: 40 81 ldd r20, Z+0 | |
2a0: 4c 93 st X, r20 | |
2a2: 01 96 46 2f <unknown> | |
2a6: 57 2f mov r21, r23 | |
2a8: 84 17 cp r24, r20 | |
2aa: 95 07 cpc r25, r21 | |
2ac: 80 f3 brlo .-32 | |
2ae: 86 2f mov r24, r22 | |
2b0: 97 2f mov r25, r23 | |
2b2: a9 81 ldd r26, Y+1 | |
2b4: ba 81 ldd r27, Y+2 | |
2b6: a8 0f add r26, r24 | |
2b8: b9 1f adc r27, r25 | |
2ba: fc 92 st X, r15 | |
2bc: 01 96 ea 2d <unknown> | |
2c0: fb 2d mov r31, r11 | |
2c2: 91 87 std Z+1, r25 | |
2c4: 80 87 std Z+0, r24 | |
2c6: 8c 2d mov r24, r12 | |
2c8: 9d 2d mov r25, r13 | |
2ca: 07 c0 rjmp .+14 | |
2cc: a9 81 ldd r26, Y+1 | |
2ce: ba 81 ldd r27, Y+2 | |
2d0: fc 92 st X, r15 | |
2d2: e4 2f mov r30, r20 | |
2d4: f5 2f mov r31, r21 | |
2d6: 11 87 std Z+1, r17 | |
2d8: 00 87 std Z+0, r16 | |
2da: 20 e0 ldi r18, 0x0 | |
2dc: 30 e0 ldi r19, 0x0 | |
2de: 44 cf rjmp .-376 | |
000002e0 <test.readVec>: | |
2e0: e4 2f mov r30, r20 | |
2e2: f5 2f mov r31, r21 | |
2e4: a0 81 ldd r26, Z+0 | |
2e6: b1 81 ldd r27, Z+1 | |
2e8: 20 91 be ba <unknown> | |
2ec: 2c 93 st X, r18 | |
2ee: 20 e0 ldi r18, 0x0 | |
2f0: 30 e0 ldi r19, 0x0 | |
2f2: e8 2f mov r30, r24 | |
2f4: f9 2f mov r31, r25 | |
2f6: 33 83 std Z+3, r19 | |
2f8: 22 83 std Z+2, r18 | |
2fa: 81 e0 ldi r24, 0x1 | |
2fc: 90 e0 ldi r25, 0x0 | |
2fe: 91 83 std Z+1, r25 | |
300: 80 83 std Z+0, r24 | |
302: 08 95 ret | |
00000304 <test.discard>: | |
304: 41 15 cp r20, r1 | |
306: 51 05 cpc r21, r1 | |
308: 39 f0 breq .+14 | |
30a: 20 91 be ba <unknown> | |
30e: 40 e0 ldi r20, 0x0 | |
310: 50 e0 ldi r21, 0x0 | |
312: 21 e0 ldi r18, 0x1 | |
314: 30 e0 ldi r19, 0x0 | |
316: 04 c0 rjmp .+8 | |
318: 20 e0 ldi r18, 0x0 | |
31a: 30 e0 ldi r19, 0x0 | |
31c: 42 2f mov r20, r18 | |
31e: 53 2f mov r21, r19 | |
320: e8 2f mov r30, r24 | |
322: f9 2f mov r31, r25 | |
324: 31 83 std Z+1, r19 | |
326: 20 83 std Z+0, r18 | |
328: 53 83 std Z+3, r21 | |
32a: 42 83 std Z+2, r20 | |
32c: 08 95 ret | |
0000032e <io.BufferedWriter.fixedWriteSplat>: | |
32e: 2f 92 3f 92 <unknown> | |
332: 4f 92 5f 92 <unknown> | |
336: 6f 92 7f 92 <unknown> | |
33a: 8f 92 9f 92 <unknown> | |
33e: af 92 bf 92 <unknown> | |
342: cf 92 df 92 <unknown> | |
346: ef 92 ff 92 <unknown> | |
34a: 0f 93 1f 93 <unknown> | |
34e: c2 2e mov r12, r18 | |
350: d3 2e mov r13, r19 | |
352: 44 2e mov r4, r20 | |
354: 55 2e mov r5, r21 | |
356: e6 2e mov r14, r22 | |
358: f7 2e mov r15, r23 | |
35a: 88 2e mov r8, r24 | |
35c: 99 2e mov r9, r25 | |
35e: c1 14 cp r12, r1 | |
360: ee 2d mov r30, r14 | |
362: ff 2d mov r31, r15 | |
364: d1 04 cpc r13, r1 | |
366: 09 f4 brne .+2 | |
368: 48 c0 rjmp .+144 | |
36a: 20 85 ldd r18, Z+0 | |
36c: 31 85 ldd r19, Z+1 | |
36e: 80 e0 ldi r24, 0x0 | |
370: 90 e0 ldi r25, 0x0 | |
372: 28 2e mov r2, r24 | |
374: 39 2e mov r3, r25 | |
376: 22 c0 rjmp .+68 | |
378: ea 2f mov r30, r26 | |
37a: fb 2f mov r31, r27 | |
37c: 84 81 ldd r24, Z+4 | |
37e: 95 81 ldd r25, Z+5 | |
380: 6e 2e mov r6, r30 | |
382: 7f 2e mov r7, r31 | |
384: 82 0f add r24, r18 | |
386: 93 1f adc r25, r19 | |
388: e4 2f mov r30, r20 | |
38a: f5 2f mov r31, r21 | |
38c: 60 81 ldd r22, Z+0 | |
38e: 71 81 ldd r23, Z+1 | |
390: 4a 2d mov r20, r10 | |
392: 5b 2d mov r21, r11 | |
394: ff df rcall .-2 | |
396: e6 2d mov r30, r6 | |
398: f7 2d mov r31, r7 | |
39a: 20 85 ldd r18, Z+0 | |
39c: 31 85 ldd r19, Z+1 | |
39e: 2a 0d add r18, r10 | |
3a0: 3b 1d adc r19, r11 | |
3a2: 31 87 std Z+1, r19 | |
3a4: 20 87 std Z+0, r18 | |
3a6: 33 87 std Z+3, r19 | |
3a8: 22 87 std Z+2, r18 | |
3aa: 82 2d mov r24, r2 | |
3ac: 93 2d mov r25, r3 | |
3ae: 01 96 28 2e <unknown> | |
3b2: 39 2e mov r3, r25 | |
3b4: 8c 15 cp r24, r12 | |
3b6: 9d 05 cpc r25, r13 | |
3b8: 08 f0 brlo .+2 | |
3ba: 21 c0 rjmp .+66 | |
3bc: 86 81 ldd r24, Z+6 | |
3be: 97 81 ldd r25, Z+7 | |
3c0: 82 17 cp r24, r18 | |
3c2: 93 07 cpc r25, r19 | |
3c4: 09 f4 brne .+2 | |
3c6: 6d c0 rjmp .+218 | |
3c8: ae 2f mov r26, r30 | |
3ca: bf 2f mov r27, r31 | |
3cc: 82 1b sub r24, r18 | |
3ce: 93 0b sbc r25, r19 | |
3d0: 42 2d mov r20, r2 | |
3d2: 53 2d mov r21, r3 | |
3d4: 44 0f lsl r20 | |
3d6: 55 1f rol r21 | |
3d8: 44 0f lsl r20 | |
3da: 55 1f rol r21 | |
3dc: 64 2d mov r22, r4 | |
3de: 75 2d mov r23, r5 | |
3e0: 46 0f add r20, r22 | |
3e2: 57 1f adc r21, r23 | |
3e4: e4 2f mov r30, r20 | |
3e6: f5 2f mov r31, r21 | |
3e8: a2 80 ldd r10, Z+2 | |
3ea: b3 80 ldd r11, Z+3 | |
3ec: a8 16 cp r10, r24 | |
3ee: b9 06 cpc r11, r25 | |
3f0: 08 f4 brsh .+2 | |
3f2: c2 cf rjmp .-124 | |
3f4: a8 2e mov r10, r24 | |
3f6: b9 2e mov r11, r25 | |
3f8: bf cf rjmp .-130 | |
3fa: 20 85 ldd r18, Z+0 | |
3fc: 31 85 ldd r19, Z+1 | |
3fe: ee 2d mov r30, r14 | |
400: ff 2d mov r31, r15 | |
402: a4 80 ldd r10, Z+4 | |
404: b5 80 ldd r11, Z+5 | |
406: a2 0e add r10, r18 | |
408: b3 1e adc r11, r19 | |
40a: cc 0c lsl r12 | |
40c: dd 1c rol r13 | |
40e: cc 0c lsl r12 | |
410: dd 1c rol r13 | |
412: a4 2d mov r26, r4 | |
414: b5 2d mov r27, r5 | |
416: ac 0d add r26, r12 | |
418: bd 1d adc r27, r13 | |
41a: 8a 2f mov r24, r26 | |
41c: 9b 2f mov r25, r27 | |
41e: 04 97 e8 2f <unknown> | |
422: f9 2f mov r31, r25 | |
424: c0 80 ldd r12, Z+0 | |
426: d1 80 ldd r13, Z+1 | |
428: 12 97 ea 2f <unknown> | |
42c: fb 2f mov r31, r27 | |
42e: 80 81 ldd r24, Z+0 | |
430: 91 81 ldd r25, Z+1 | |
432: 81 30 cpi r24, 0x1 | |
434: 91 05 cpc r25, r1 | |
436: 69 f4 brne .+26 | |
438: ee 2d mov r30, r14 | |
43a: ff 2d mov r31, r15 | |
43c: 46 81 ldd r20, Z+6 | |
43e: 57 81 ldd r21, Z+7 | |
440: 42 1b sub r20, r18 | |
442: 53 0b sbc r21, r19 | |
444: ac 2d mov r26, r12 | |
446: bd 2d mov r27, r13 | |
448: 6c 91 ld r22, X | |
44a: 8a 2d mov r24, r10 | |
44c: 9b 2d mov r25, r11 | |
44e: ff df rcall .-2 | |
450: 20 c0 rjmp .+64 | |
452: 48 2e mov r4, r24 | |
454: 59 2e mov r5, r25 | |
456: a0 2f mov r26, r16 | |
458: b1 2f mov r27, r17 | |
45a: 11 97 a1 15 <unknown> | |
45e: b1 05 cpc r27, r1 | |
460: c1 f0 breq .+48 | |
462: 80 e0 ldi r24, 0x0 | |
464: 90 e0 ldi r25, 0x0 | |
466: 0a 2f mov r16, r26 | |
468: 1b 2f mov r17, r27 | |
46a: 64 2d mov r22, r4 | |
46c: 75 2d mov r23, r5 | |
46e: 28 2e mov r2, r24 | |
470: 39 2e mov r3, r25 | |
472: ff df rcall .-2 | |
474: 8a 0d add r24, r10 | |
476: 9b 1d adc r25, r11 | |
478: 6c 2d mov r22, r12 | |
47a: 7d 2d mov r23, r13 | |
47c: 44 2d mov r20, r4 | |
47e: 55 2d mov r21, r5 | |
480: ff df rcall .-2 | |
482: a0 2f mov r26, r16 | |
484: b1 2f mov r27, r17 | |
486: 82 2d mov r24, r2 | |
488: 93 2d mov r25, r3 | |
48a: 01 96 8a 17 <unknown> | |
48e: 9b 07 cpc r25, r27 | |
490: 50 f3 brlo .-44 | |
492: ee 2d mov r30, r14 | |
494: ff 2d mov r31, r15 | |
496: 86 81 ldd r24, Z+6 | |
498: 97 81 ldd r25, Z+7 | |
49a: 93 87 std Z+3, r25 | |
49c: 82 87 std Z+2, r24 | |
49e: 91 87 std Z+1, r25 | |
4a0: 80 87 std Z+0, r24 | |
4a2: 81 e0 ldi r24, 0x1 | |
4a4: 90 e0 ldi r25, 0x0 | |
4a6: e8 2d mov r30, r8 | |
4a8: f9 2d mov r31, r9 | |
4aa: 93 83 std Z+3, r25 | |
4ac: 82 83 std Z+2, r24 | |
4ae: 80 e0 ldi r24, 0x0 | |
4b0: 90 e0 ldi r25, 0x0 | |
4b2: 91 83 std Z+1, r25 | |
4b4: 80 83 std Z+0, r24 | |
4b6: 1f 91 0f 91 <unknown> | |
4ba: ff 90 ef 90 <unknown> | |
4be: df 90 cf 90 <unknown> | |
4c2: bf 90 af 90 <unknown> | |
4c6: 9f 90 8f 90 <unknown> | |
4ca: 7f 90 6f 90 <unknown> | |
4ce: 5f 90 4f 90 <unknown> | |
4d2: 3f 90 2f 90 <unknown> | |
4d6: 08 95 ret | |
000004d8 <io.Writer.failingWriteFile>: | |
4d8: 21 e0 ldi r18, 0x1 | |
4da: 30 e0 ldi r19, 0x0 | |
4dc: e8 2f mov r30, r24 | |
4de: f9 2f mov r31, r25 | |
4e0: 33 83 std Z+3, r19 | |
4e2: 22 83 std Z+2, r18 | |
4e4: 80 e0 ldi r24, 0x0 | |
4e6: 90 e0 ldi r25, 0x0 | |
4e8: 91 83 std Z+1, r25 | |
4ea: 80 83 std Z+0, r24 | |
4ec: 08 95 ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const std = @import("std"); | |
const uart: *volatile u8 = @ptrFromInt(0xbabe); | |
fn reader() std.io.Reader { | |
return .{ | |
.context = undefined, | |
.vtable = &.{ | |
.read = read, | |
.readVec = readVec, | |
.discard = discard, | |
}, | |
}; | |
} | |
fn read(context: ?*anyopaque, bw: *std.io.BufferedWriter, limit: std.io.Reader.Limit) std.io.Reader.RwError!usize { | |
_ = context; | |
if (limit == .nothing) return 0; | |
try bw.writeByte(uart.*); | |
return 1; | |
} | |
fn discard(context: ?*anyopaque, limit: std.io.Reader.Limit) std.io.Reader.Error!usize { | |
_ = context; | |
if (limit == .nothing) return 0; | |
_ = uart.*; | |
return 1; | |
} | |
fn readVec(context: ?*anyopaque, data: []const []u8) std.io.Reader.Error!usize { | |
_ = context; | |
data[0][0] = uart.*; | |
return 1; | |
} | |
export fn example() u32 { | |
var br: std.io.BufferedReader = undefined; | |
var buffer: [4]u8 = undefined; | |
br.init(reader(), &buffer); | |
return br.takeInt(u32, .little) catch unreachable; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment