It's a bit of a newbie question, but I've been wondering if you can
intermix hard float VFPv3-D16 code with VFPv3-D32 code.  You can as:

According to the ABI:
 * d0-d15 are used for floating point parameters, no matter if you are
D16 or D32
 * d0-d15 are not preserved across function calls
 * d16-d31 must be preserved across function calls

The scenarios are:
A D32 function calls a D16 function:
 * The first 16 (!) parameters are passed in D0-D15
 * Any remaining are passed on the stack
 * The D16 function doesn't know about D16-D31, doesn't use them, and
hence preserves them

A D16 function calls a D32 function:
 * The first 16 parameters are passed in D0-D15
 * Any remaining are passed on the stack
 * The D32 function preserves any of the D16-D31 registers that it
uses.  Redundant, but fine.

A D32 function (A) calls a D16 function (B) which calls a D32 function (C):
 * Parameters are OK, as above
 * B doesn't use D16-D31 and hence preserves them
 * C preserves any of the D16-D31 that it uses, which preserves them
from A's point of view

-- Michael

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to