This is an archive of the discontinued LLVM Phabricator instance.

X86: Implement the vectorcall calling convention
ClosedPublic

Authored by rnk on Oct 23 2014, 3:00 PM.

Details

Summary

This is a Microsoft calling convention that supports both x86 and x86_64
subtargets. It passes vector and floating point arguments in XMM0-XMM5,
and passes them indirectly once they are consumed.

Homogenous vector aggregates of up to four elements can be passed in
sequential vector registers, but this part is not yet implemented in
LLVM.

On 32-bit x86, it is similar to fastcall in that it uses ecx:edx as
integer register parameters and is callee cleanup. On x86_64, it
delegates to the normal win64 calling convention.

Diff Detail

Repository
rL LLVM

Event Timeline

rnk updated this revision to Diff 15351.Oct 23 2014, 3:00 PM
rnk retitled this revision from to X86: Implement the vectorcall calling convention.
rnk updated this object.
rnk added a reviewer: majnemer.
rnk added a subscriber: Unknown Object (MLST).
majnemer accepted this revision.Oct 27 2014, 5:37 PM
majnemer edited edge metadata.
majnemer added inline comments.
lib/IR/Mangler.cpp
121 ↗(On Diff #15351)

Name.startsWith("\01")

This revision is now accepted and ready to land.Oct 27 2014, 5:37 PM
rnk closed this revision.Oct 27 2014, 6:40 PM
rnk updated this revision to Diff 15512.

Closed by commit rL220745 (authored by @rnk).