aboutsummaryrefslogtreecommitdiff
path: root/src/sorter.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/sorter.s')
-rw-r--r--src/sorter.s39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/sorter.s b/src/sorter.s
new file mode 100644
index 0000000..ba232fe
--- /dev/null
+++ b/src/sorter.s
@@ -0,0 +1,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