Mergesort performance in C
The register keyword will do nothing. Current day compilers are smart enough to find a good register allocation themselves without you running in its way.

Why calloc? you initialize the values through memcpy anyway so no need for the zero initialization, malloc will work fine. Speaking of you need to free what you allocate otherwise you'll get a memory leak.

You should only need to allocate a single extra array for the merge. 

When the amount left to sort is small (amount &lt; 5) you can switch over to another sort that is more efficient for small numbers like insertion sort.

Finally brace position on your else is a bit odd:

    if(*pos1 &lt;= *pos2) {

    }
    else {

    }


I'd expect either the opening braces to also be on its own line or else to be on the same as the closing brace of the if.