summaryrefslogtreecommitdiff
path: root/epilogue.snippet.asm
diff options
context:
space:
mode:
Diffstat (limited to 'epilogue.snippet.asm')
-rw-r--r--epilogue.snippet.asm81
1 files changed, 81 insertions, 0 deletions
diff --git a/epilogue.snippet.asm b/epilogue.snippet.asm
new file mode 100644
index 0000000..fffddb7
--- /dev/null
+++ b/epilogue.snippet.asm
@@ -0,0 +1,81 @@
+
+ mov rdi, [buf] ; EPILOGUE
+ call _free
+
+%ifdef OUTPUT_LAST_CELL
+ lea rdi, [strbuf64] ; snprintf(strbuf64,64,LCRformatstr,maxp-buf)
+ mov esi, 64
+ lea rdx, [LCRformatstr]
+ mov rcx, qword [maxp]
+ sub rcx, qword [buf]
+ call _snprintf
+
+ mov edi, 2
+ lea rsi, [strbuf64]
+ mov edx, eax
+ call _write
+%endif
+
+%ifdef HEATMAP
+ mov ebx, 0 ;loop counter
+hmloop:
+ lea rdi, [strbuf64] ; snprintf(strbuf64,64,HMformatstr,ebx /*counter*/,r12[rbx])
+ mov esi, 64
+ lea rdx, [HMformatstr]
+ mov ecx, ebx
+ mov r8d, dword [r12+4*rbx]
+ xor eax, eax
+ call _snprintf
+
+ mov edi, 2
+ lea rsi, [strbuf64]
+ mov edx, eax
+ call _write
+
+ inc ebx
+ cmp ebx, SOURCE_LENGTH
+ jl hmloop
+%endif
+
+ xor eax, eax
+
+mainend:
+ pop r12
+ pop rbx
+ mov rsp, rbp
+ pop rbp
+ ret
+
+nomem:
+ mov edi, 2
+ lea rsi, [nomemstr]
+ mov rdx, nomemstr.len
+ call _write
+ mov eax, 1
+ jmp mainend
+
+
+section .data
+sectalign 8
+
+nomemstr: db "Out of memory!"
+.len: equ $-nomemstr
+
+%ifdef OUTPUT_LAST_CELL
+ LCRformatstr: db "Last cell reached: %d", 10, 0
+
+ align 8, db 0
+ maxp: dq 0
+%endif
+
+%ifdef HEATMAP
+ HMformatstr: db "%d %d", 10, 0
+%endif
+
+
+section .bss
+sectalign 8
+
+buf: resq 1
+
+strbuf64: resb 64