This OS-independent macrolibrary can be included to 64bit programs written in EuroAssembler.
The library contains macroinstructions which sort data in memory.
sort64 HEAD
ShellSort %MACRO TablePtr,NrOfRecords,RecordSize,CallbackProc
PUSHQ %CallbackProc,%RecordSize,%NrOfRecords,%NrOfRecords,%TablePtr
CALL ShellSort64@RT::
ShellSort64@RT:: PROC1
PUSH RAX,RCX,RDX,RBX,RBP,RSI,RDI
MOV RBP,RSP
%ShellSortTablePtr %SET RBP+64
%ShellSortNrOfRecords %SET RBP+72
%ShellSortRecordNr %SET RBP+80
%ShellSortRecordSize %SET RBP+88
%ShellSortCallbackProc %SET RBP+96
.10: SARQ [%ShellSortNrOfRecords],1
JNG .90:
MOV RCX,[%ShellSortRecordNr]
SUB RCX,[%ShellSortNrOfRecords]
MOV EBX,1
.20: MOV RSI,RBX
.30: MOV RDI,RSI
ADD RDI,[%ShellSortNrOfRecords]
PUSH RSI,RDI
MOV RAX,RSI
DEC RAX
MULQ [%ShellSortRecordSize]
ADD RAX,[%ShellSortTablePtr]
MOV RSI,RAX
MOV RAX,RDI
DEC RAX
MULQ [%ShellSortRecordSize]
ADD RAX,[%ShellSortTablePtr]
MOV RDI,RAX
MOV RDX,[%ShellSortNrOfRecords]
CALL [%ShellSortCallbackProc]
POP RDI,RSI
JNC .40:
SUB RSI,[%ShellSortNrOfRecords]
JA .30:
.40: INC EBX
CMP EBX,ECX
JNA .20:
JMP .10:
.90: POP RDI,RSI,RBP,RBX,RDX,RCX,RAX
RET 5*8
ENDPROC1 ShellSort64@RT::
%ENDMACRO ShellSort
ENDHEAD sort64