patch to C++ ABI doc for decimal float classes
Janis Johnson
janis187 at us.ibm.com
Thu Nov 19 17:11:27 UTC 2009
On Tue, 2009-10-13 at 15:51 -0700, Janis Johnson wrote:
> This patch to the C++ ABI document provides exceptions to the usual
> function calling convention and mangling rules to treat the decimal
> classes defined in TR 24733 the same as the corresponding native
> scalar types. Please consider it and, if it's acceptable, apply it.
>
> Janis Johnson
No one has commented on this patch, although discussion about
other aspects of decimal float continued in another thread.
Janis
> --- abi.html.orig 2009-10-13 15:36:16.000000000 -0700
> +++ abi.html 2009-10-13 15:46:08.000000000 -0700
> @@ -2577,7 +2577,12 @@
> <p>
> In general, C++ value parameters are handled just like C parameters.
> This includes class type parameters passed wholly or partially in registers.
> -However, in the special case where the parameter type has a non-trivial
> +There are, however, some special cases.
> +</p><ol type="1">
> +<p>
> +</p><li>
> +<p>
> +In the special case where the parameter type has a non-trivial
> copy constructor or destructor,
> the caller must allocate space for a temporary copy,
> and pass the resulting copy by reference (below).
> @@ -2622,7 +2627,16 @@
> If necessary (e.g. if the parameter was allocated on the heap),
> the caller deallocates space after return and destruction.
>
> +<p></p> </li></ul>
> +<li>
> +In the case where the parameter type is class
> +<code>std::decimal::decimal32</code>, <code>std::decimal::decimal64</code>,
> +or <code>std::decimal::decimal128</code> as defined in TR 24733, the
> +parameter is passed the same as the corresponding native decimal
> +floating-point scalar type.
> +<p></p>
> </li></ul>
> +</ol>
>
>
> <p>
> @@ -2663,6 +2677,12 @@
> The callee constructs the return value into this temporary.
>
> </p><p>
> +Another exception is that a return value type of class
> +<code>std::decimal::decimal32</code>, <code>std::decimal::decimal64</code>,
> +or <code>std::decimal::decimal128</code> as defined in TR 24733 is returned
> +the same as the corresponding native decimal floating-point scalar type.
> +
> +</p><p>
> A result of an empty class type will be returned as though it were
> a struct containing a single char,
> i.e. <code>struct S { char c; };</code>.
> @@ -4343,6 +4363,13 @@
> <class-enum-type> ::= <name>
> </font></code></pre>
>
> +<p>
> +An exception, however, is that class <code>std::decimal::decimal32</code>,
> +<code>std::decimal::decimal64</code>, or <code>std::decimal::decimal128</code>
> +as defined in TR 24733 uses the same encoding as the corresponding native
> +decimal-floating point scalar type.
> +
> +</p><p>
> Unnamed class, union, and enum types that aren't closure types, that
> haven't acquired a "name for linkage purposes" (through a typedef), and
> that aren't anonymous union types, follow
>
More information about the cxx-abi-dev
mailing list