global ft_list_remove_if section .text remove_element: call call_free_elem push rax mov rax, [rax + 8] test r8, r8 jz element_is_first mov [r8 + 8], rax pop rax ret element_is_first: mov [rdi], rax pop rax ret call_free_elem: push rdi push rsi push rdx push rcx push rax push r8 mov rdi, [rax] call rcx pop r8 pop rax pop rcx pop rdx pop rsi pop rdi ret ft_list_remove_if: test rdi, rdi jz end test rdx, rdx jz end test rcx, rcx jz end xor r8, r8 mov rax, [rdi] loop: test rax, rax jz end push rax push rdi push rsi push rdx push rcx push r8 mov rdi, [rax] call rdx test eax, eax pop r8 pop rcx pop rdx pop rsi pop rdi jz loop_end mov rax, [rsp] call remove_element loop_end: pop rax mov r8, rax mov rax, [rax + 8] jmp loop end: ret