Skip to content

Instantly share code, notes, and snippets.

@andrewrk
Created April 17, 2025 21:50
Show Gist options
  • Save andrewrk/838a3408d10b2eb220c42311fa2716a4 to your computer and use it in GitHub Desktop.
Save andrewrk/838a3408d10b2eb220c42311fa2716a4 to your computer and use it in GitHub Desktop.
litmus test for restricted function pointer types
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
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;
}
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
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