#include "abi.inc" #include "defs.inc" .text FUNC cepis__strndup PROLOGUE 24 mov %rdi, %r12 mov %rsi, %r13 lea 1(%r13), %rdi call malloc@PLT test %rax, %rax jz .Lstrndup_out mov %rax, %rbx test %r13, %r13 jz .Lstrndup_term mov %rbx, %rdi mov %r12, %rsi mov %r13, %rdx call memcpy@PLT .Lstrndup_term: movb $0, (%rbx, %r13, 1) mov %rbx, %rax .Lstrndup_out: EPILOGUE ret ENDFUNC cepis__strndup FUNC cepis__strdup PROLOGUE 8 test %rdi, %rdi jz .Lstrdup_null mov %rdi, %rbx call strlen@PLT mov %rbx, %rdi mov %rax, %rsi call cepis__strndup EPILOGUE ret .Lstrdup_null: xor %eax, %eax EPILOGUE ret ENDFUNC cepis__strdup FUNC cepis__empty PROLOGUE 8 lea .Lempty_str(%rip), %rdi xor %esi, %esi call cepis__strndup EPILOGUE ret ENDFUNC cepis__empty FUNC cepis__buf_reserve PROLOGUE 24 mov %rdi, %rbx mov B_LEN(%rbx), %rax add %rsi, %rax add $1, %rax cmp B_CAP(%rbx), %rax jbe .Lreserve_ok mov %rax, %r12 mov B_CAP(%rbx), %r13 test %r13, %r13 jnz .Lreserve_grow mov $64, %r13 .Lreserve_grow: cmp %r12, %r13 jae .Lreserve_alloc shl $1, %r13 jmp .Lreserve_grow .Lreserve_alloc: mov B_DATA(%rbx), %rdi mov %r13, %rsi call realloc@PLT test %rax, %rax jz .Lreserve_fail mov %rax, B_DATA(%rbx) mov %r13, B_CAP(%rbx) .Lreserve_ok: xor %eax, %eax EPILOGUE ret .Lreserve_fail: mov $-1, %eax EPILOGUE ret ENDFUNC cepis__buf_reserve FUNC cepis__buf_append PROLOGUE 24 mov %rdi, %rbx mov %rsi, %r12 mov %rdx, %r13 mov %rbx, %rdi mov %r13, %rsi call cepis__buf_reserve test %eax, %eax jnz .Lappend_fail test %r13, %r13 jz .Lappend_term mov B_DATA(%rbx), %rdi add B_LEN(%rbx), %rdi mov %r12, %rsi mov %r13, %rdx call memcpy@PLT .Lappend_term: add %r13, B_LEN(%rbx) mov B_DATA(%rbx), %rax mov B_LEN(%rbx), %rcx movb $0, (%rax, %rcx, 1) xor %eax, %eax EPILOGUE ret .Lappend_fail: mov $-1, %eax EPILOGUE ret ENDFUNC cepis__buf_append FUNC cepis__buf_appendc PROLOGUE 24 mov %esi, %eax movb %al, LOCAL0(%rbp) lea LOCAL0(%rbp), %rsi mov $1, %rdx call cepis__buf_append EPILOGUE ret ENDFUNC cepis__buf_appendc FUNC cepis__buf_appendz PROLOGUE 24 test %rsi, %rsi jz .Lappendz_ok mov %rdi, %rbx mov %rsi, %r12 mov %rsi, %rdi call strlen@PLT mov %rbx, %rdi mov %r12, %rsi mov %rax, %rdx call cepis__buf_append EPILOGUE ret .Lappendz_ok: xor %eax, %eax EPILOGUE ret ENDFUNC cepis__buf_appendz FUNC cepis__buf_reset movq $0, B_LEN(%rdi) mov B_DATA(%rdi), %rax test %rax, %rax jz .Lreset_out movb $0, (%rax) .Lreset_out: ret ENDFUNC cepis__buf_reset FUNC cepis__buf_free PROLOGUE 8 mov %rdi, %rbx mov B_DATA(%rbx), %rdi test %rdi, %rdi jz .Lbfree_zero call free@PLT .Lbfree_zero: movq $0, B_DATA(%rbx) movq $0, B_LEN(%rbx) movq $0, B_CAP(%rbx) EPILOGUE ret ENDFUNC cepis__buf_free FUNC cepis__buf_take mov B_DATA(%rdi), %rax movq $0, B_DATA(%rdi) movq $0, B_LEN(%rdi) movq $0, B_CAP(%rdi) ret ENDFUNC cepis__buf_take .section .rodata .Lempty_str: .byte 0 .section .note.GNU-stack,"",@progbits