I've been working on getting Swift running properly on 64-bit Windows and 
wanted to get some feedback/ideas on a specific issue. 

In swift/Runtime/HeapObject.h, there is a TwoWordPair::Return type intended to 
return two word-sized values in registers. On Windows, structs are returned 
indirectly. For some platforms (ARM, i386, 32-bit Windows) this is worked 
around by packing the results into a 64-bit int.

We can apply a similar solution on Win64 by packing the results into an __m128 
and adopting the __vectorcall calling convention to ensure that the value is 
passed in a register. However, adopting a new calling convention for methods 
that interact with TwoWordPair::Return has a fairly major fallout; I've started 
work in a branch (see the most recent three commits on 
https://github.com/troughton/swift/tree/x64-vectorcall), but it feels very 
messy. The main issue is that __vectorcall using a different mangling scheme, 
which means we need to special-case in quite a few different places.

Another alternative would be to adopt the Swift calling convention for 
swift_allocBox. If this doesn't cause other issues, it seems cleaner and would 
have a much smaller impact on the code-base. However, there's currently an 
issue blocking using the Swift calling convention on Windows; it gets sent to 
MicrosoftMangle in Clang, which doesn't know how to mangle the Swift calling 
convention (https://reviews.llvm.org/D31372). I'd like to resolve this, and it 
seems like there are two possible implementations:

Pick an arbitrary prefix to use for SwiftCC and then mangle the rest of the 
string following the Microsoft convention, knowing that tools won't know how to 
deal with it.
Alternatively, for functions that use SwiftCC, use the Itanium mangling. This 
would require a more major refactoring in Clang but might be easier to demangle.
What are people's thoughts on these two issues?

- Thomas
_______________________________________________
swift-dev mailing list
swift-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-dev

Reply via email to