aboutsummaryrefslogtreecommitdiff
path: root/src/sorter.s
blob: ba232fecc30084aecb01050a9d41bfd91fccbaa6 (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
# --------------------------------------------
# FUNCTION: sorter
# PURPOSE : Sorts array A, with references to arrays A_i, based on the given
# key in A_i, address and size of A, and an address of a sorting algorithm to be
# used
# INPUTS  : rdi = address for A
#           rsi = length of A in 64 bit chunks
#           rdx = index of key to sort by
#           rcx = address of sorting algorithm
# OUTPUTS : rax = address for sorted A
# CLOBBERS: none
# NOTES   : Preserves all registers
# --------------------------------------------
.section .text
.globl sorter
.type sorter, @function
sorter:
    # Save registers
    push %rbx
    push %rbp
    push %r12
    push %r13
    push %r14
    push %r15
    
    # rdi is the addres of a
    # rsi is the length of a
    # rdx is the index of the key
    call *%rcx    # Sort the array (* is indirect call)

    # Restore registers
    pop %r15
    pop %r14
    pop %r13
    pop %r12
    pop %rbp
    pop %rbx

    ret