Kai Tietz writes:
>I detected, that the MS-ABI does not support SSE or MMX argument passing 
>(as gcc does for x86_64). Therefore I search some advice about the 
>enforcement of passing (sse,mmx) registers passing via the standard 
>integer registers (for MS they are ecx,edx,r9) and via stack.

I think you may be confused here.  You don't pass registers, you pass
values.  Micrsoft's x64 ABI documents how to pass values with SSE and
MMX types:

        __m128 types, arrays and strings are never passed by immediate
        value but rather a pointer will be passed to memory allocated
        by the caller. Structs/unions of size 8, 16, 32, or 64 bits
        and __m64 will be passed as if they were integers of the same
        size. Structs/unions other than these sizes will be passed as a
        pointer to memory allocated by the caller. For these aggregate
        types passed as a pointer (including __m128), the caller-allocated
        temporary memory will be 16-byte aligned.

Since __m128 types are the equivilent of GCC's 128-bit vector types
(SSE), values of this type should be passed by reference.  GCC's 64-bit
vector types (MMX) should by passed by value using an integer register.
This is how SSE and MMX values should be passed regardless of wether
the function takes a variable number of arguments or not.

                                        Ross Ridge


Reply via email to