aboutsummaryrefslogtreecommitdiff
path: root/ft_list_push_front.s
blob: 048a7768293573a893c10503d5f3f02454508cb8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
; **************************************************************************** ;
;                                                                              ;
;                                                         :::      ::::::::    ;
;    ft_list_push_front.s                               :+:      :+:    :+:    ;
;                                                     +:+ +:+         +:+      ;
;    By: cacharle <marvin@42.fr>                    +#+  +:+       +#+         ;
;                                                 +#+#+#+#+#+   +#+            ;
;    Created: 2019/11/22 20:55:08 by cacharle          #+#    #+#              ;
;    Updated: 2019/11/22 21:17:45 by cacharle         ###   ########.fr        ;
;                                                                              ;
; **************************************************************************** ;

%include "libasm.s"

%ifdef __LINUX__
    %define M_FT_LIST_PUSH_FRONT ft_list_push_front
    %define M_MALLOC malloc
%else
    %define M_FT_LIST_PUSH_FRONT _ft_list_push_front
    %define M_MALLOC _malloc
%endif

extern M_MALLOC

global M_FT_LIST_PUSH_FRONT

; void ft_list_push_front(t_list **begin_list, void *data);
M_FT_LIST_PUSH_FRONT:
    cmp  rdi, 0
    je   FT_LIST_PUSH_FRONT_END

    push rdi
    push rsi
    xor  rdi, rdi
    mov  edi, 16
    call M_MALLOC M_EXTERN_CALL_SUFFIX
    pop  rsi
    pop  rdi
    cmp  rax, 0
    je   FT_LIST_PUSH_FRONT_END

    mov  qword [rax + 0], rsi
    mov  r10, [rdi]
    mov  [rax + 8], r10
    mov  [rdi], rax
FT_LIST_PUSH_FRONT_END:
    ret