The Itanium C++ ABI was recently fixed to properly determine whether to pass objects of class type in registers in C++11 onwards, taking move constructors into account:
itanium-cxx-abi/cxx-abi@05fc233
Section 3.2.3 of the x86 psABI should be updated to take this into account. Or better, it should simply defer to the Itanium C++ ABI to determine how to pass C++ classes rather than trying to duplicate the specification.
Eg, something like:
If a C++ object has either a non-trivial copy constructor or a non-trivial destructor [Footnote] is non-trivial for the purpose of calls, as specified in the Itanium C++ ABI, it is passed by invisible reference (the object is replaced in the parameter list by a pointer that has class INTEGER)