[Openmcl-devel] How do I make a cocoa method that returns a float

Anders Conradi beque at telia.com
Tue Feb 22 06:46:11 PST 2005


On tisdag, feb 22, 2005, at 00:32 Europe/Stockholm, Dan Knapp wrote:

>> How do I implement cocoa methods that return floats? I
>
>   It's not implemented yet - I ran into this a little while
> ago.  For now, you should probably just reconsider whether
> you really need to.  And I should make sure it's documented...

I need that float return since I am overriding a method that returns a 
float.
Anyway, it is more fun to at least try to implement it first.

I dug into the internals of OpenMCL to see what is going on.
When I do defcallback the callback body is wrapped inside a lambda that 
takes a mac-ptr and places the result of the body into that ptr. Then 
the named lambda and some auxiliary information is wrapped into a pfe 
vector. The pfe vector is added to %pascal-functions%. Then a 
trampoline is created. The trampoline is some ppc-code that calls the 
subprim .SPcallback with the index to the pfe vector. When the callback 
is called the trampoline is called and it calls the subprim. The 
subprim must call the lambda containing the callback body with a 
mac-ptr for the result. Then it places the result into gpr3 and returns 
to the foreign code. My hope is that it would be easy to hack the 
subprim to also place the result into fpr1, which is used to return 
floating point values. Since fpr1 isn't preserved across function calls 
this shouldn't break code that wants integer results.

I am sure that I have underestimated the difficulty and missed 
something. I don't even know PPC assembly, but by adding one line to 
spentry.s and rebuilding the kernel my callback test seems to return 
the correct value. Unfortunately callbacks can't recieve floats and 
still can't return doubles.

Well, anyway here it is.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: spentry.patch
Type: application/octet-stream
Size: 569 bytes
Desc: not available
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20050222/3a879eee/attachment.obj>
-------------- next part --------------

>
> -- Dan Knapp
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
>


More information about the Openmcl-devel mailing list