v5.4 is designed so that you can use any of the three supported float packs for system calls and/or callbacks. The translation between the selected float pack and the native SSE is performed automagically by the EXTERN: and DEFCALLPROC: parsers and code generators.
These work fine for the System V ABI used by MacOS and Linux, but are much more complex for Windows. This occurs because System V ABI for AMD64 can have six integer and eight float parameters in registers, usually plenty. For Windows, there's a maximum of four register parameters, integer and/or float.
To add to the problems, the Cocoa interface does not use the EXTERN/DEFCALLBACK notation, but instead uses a dual stack notation. ( int1 int2 -- ) ( float1 float2 -- float3 ). Under conditions involving a large number of parameters, the Cocoa notation cannot be correctly code generated. This is especially true under Windows. For this reason alone, the Cocoa dual stack notation is unacceptable, however well it reads. We have to use a notation that can always generate correct code.
Note that we are going to support ARM64 and other CPUs in the future. I do not have the income or the resources to write special case parsers and code generators for each CPU and O/S. Hence all future work will use the EXTERN:/DEFCALLPROC: interface.
Adding new types to the EXTERN:/DEFCALLPROC: interface is straight-forward but sometimes tedious.
Note that the requirement to support more than one FP pack stems from engineering reality. In some application domains 64 bit floats are just inadequate and 80 bit floats are marginally adequate. It would not be difficult to add 128 bit floats to v5.4.