What calling convention is used for assembly language in Linux AMD64? Normally the parameters go in fixed order into designated registers.

import std.stdio;
// Linux AMD64
float* test(float *x,ulong y){
        asm{
                naked;
                align 16;
                mov RAX,RDI;
                ret;
        }
}

void main(){
        float[] f=new float[16];
        writeln(&f[0]);
        float* a=test(&f[0],7);
        writeln(a);
}

If the ulong y parameter is removed from the function definition the pointer x goes into RDI as expected. When y is added it all goes wrong. According to AMD64 the pointer should stay in RDI and the ulong go into RSI.

Reply via email to