Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################################
- # Naively simple implementation of prime sieve
- ########################################################
- import stdio;
- a: [32767]uint8;
- sieve() -> void {
- n: uint16;
- i: uint16;
- for(n=2; n<32768; n+=1) {
- if (a[n]) {
- continue;
- }
- stdio::printf("%d\n", n);
- for(i=n; i<32768; i+=n) {
- a[i] = 1;
- }
- }
- }
- main() -> uint8 {
- sieve();
- return 0;
- }
- ########################################################
- # Compiler output
- ########################################################
- SECTION .bss
- ;
- ; tests/df/sieve.df:2: a: [32767]uint8;
- ;
- a:
- RESB 32767
- SECTION .rodata
- ;
- ; tests/df/sieve.df:11: stdio::printf("%d\n", n);
- ;
- str_6:
- DB 37,100,10,0
- SECTION .text
- ;
- ; tests/df/sieve.df:0: import stdio;
- ;
- ;
- ; builtin/stdio.df:2: printf: extern __magic__("alias:printf") (format: &const uint8, ...) -> int32;
- ;
- %define stdio$printf printf
- EXTERN printf
- ;
- ; tests/df/sieve.df:4: sieve() -> void {
- ;
- GLOBAL sieve
- sieve:
- PUSH ebp
- MOV ebp, esp
- AND esp, 4294967280
- SUB esp, 32800
- MOV [ebp-4], ebx
- MOV [ebp-8], esi
- MOV [ebp-12], edi
- ;
- ; tests/df/sieve.df:7: for(n=2; n<32768; n+=1) {
- ;
- MOV eax, 2
- LEA ebx, dword [ebp-20]
- MOV word [ebx], ax
- for_test_2:
- LEA eax, dword [ebp-20]
- MOVZX eax, word [eax]
- MOV ebx, 32768
- CMP eax, ebx
- JGE for_exit_4
- ;
- ; tests/df/sieve.df:8: if (a[n]) {
- ;
- MOV eax, a
- LEA ebx, dword [ebp-20]
- MOVZX ebx, word [ebx]
- MOV ecx, 1
- MOV dword [ebp-16], eax
- MOV eax, ebx
- MUL ecx
- MOV ebx, dword [ebp-16]
- ADD ebx, eax
- MOVZX eax, byte [ebx]
- OR eax, eax
- JE lbl_5
- ;
- ; tests/df/sieve.df:9: continue;
- ;
- JMP for_ctrl_3
- lbl_5:
- ;
- ; tests/df/sieve.df:11: stdio::printf("%d\n", n);
- ;
- MOV eax, str_6
- LEA ebx, dword [ebp-20]
- MOVZX ebx, word [ebx]
- MOV [esp+0], eax
- MOV [esp+4], ebx
- CALL stdio$printf
- ;
- ; tests/df/sieve.df:12: for(i=n; i<32768; i+=n) {
- ;
- LEA eax, dword [ebp-20]
- MOVZX eax, word [eax]
- LEA ebx, dword [ebp-24]
- MOV word [ebx], ax
- for_test_7:
- LEA eax, dword [ebp-24]
- MOVZX eax, word [eax]
- MOV ebx, 32768
- CMP eax, ebx
- JGE for_exit_9
- ;
- ; tests/df/sieve.df:13: a[i] = 1;
- ;
- MOV eax, 1
- MOV ebx, a
- LEA ecx, dword [ebp-24]
- MOVZX ecx, word [ecx]
- MOV edx, 1
- MOV dword [ebp-28], eax
- MOV eax, ecx
- MOV dword [ebp-32], edx
- MUL dword [ebp-32]
- ADD ebx, eax
- MOV eax, dword [ebp-28]
- MOV byte [ebx], al
- for_ctrl_8:
- LEA eax, dword [ebp-24]
- MOVZX eax, word [eax]
- LEA ebx, dword [ebp-20]
- MOVZX ebx, word [ebx]
- ADD eax, ebx
- LEA ebx, dword [ebp-24]
- MOV word [ebx], ax
- JMP for_test_7
- for_exit_9:
- for_ctrl_3:
- LEA eax, dword [ebp-20]
- MOVZX eax, word [eax]
- MOV ebx, 1
- ADD eax, ebx
- LEA ebx, dword [ebp-20]
- MOV word [ebx], ax
- JMP for_test_2
- for_exit_4:
- fnexit_sieve_1:
- MOV ebx, [ebp-4]
- MOV esi, [ebp-8]
- MOV edi, [ebp-12]
- MOV esp, ebp
- POP ebp
- RET
- ;
- ; tests/df/sieve.df:18: main() -> uint8 {
- ;
- GLOBAL main
- main:
- PUSH ebp
- MOV ebp, esp
- AND esp, 4294967280
- SUB esp, 32800
- MOV [ebp-4], ebx
- MOV [ebp-8], esi
- MOV [ebp-12], edi
- ;
- ; tests/df/sieve.df:19: sieve();
- ;
- CALL sieve
- ;
- ; tests/df/sieve.df:20: return 0;
- ;
- MOV eax, 0
- fnexit_main_10:
- MOV ebx, [ebp-4]
- MOV esi, [ebp-8]
- MOV edi, [ebp-12]
- MOV esp, ebp
- POP ebp
- RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement