You need to call emit_pushresult_Ptr after the first helper call to get the 
return value pushed onto the stack:

<emit the first helper call with a "normal" emit macro, without problem>
emit_pushresult_Ptr();
enregisterTOS;
mov_register_indirect_to(ARG_1, TOS_REG_1);
callInfo.reset();
emit_callhelper_D(func);

-Jan

-----Original Message-----
From: Discussion of the Rotor Shared Source CLI implementation [mailto:[EMAIL 
PROTECTED] On Behalf Of J. Redondo
Sent: Monday, March 21, 2005 1:43 AM
To: DOTNET-ROTOR@DISCUSS.DEVELOP.COM
Subject: [DOTNET-ROTOR] Using helper return into native code

Hello,

In my quest to explore and study the FJit a bit more, I'm having trouble
accessing to certain data that I need to fully implement my own Rotor
project. The problem is that, once I managed to insert calls to jit
interface helpers in the places I wanted, thanks to your valuable help,
there is a special case in which I'm not having too much success. The
problem is that when a helper call is performed, I need its return value to
pass it as a parameter to another helper call which follows the first
(performed with another emit_callhelper_X macro or similar). The first
helper returns an int value and the second helper only admits an int
parameter, although I pretend to add some extra parameters once I solve this
issue. So, the steps I follow are:

<emit the first helper call with a "normal" emit macro, without problem>
enregisterTOS;
mov_register_indirect_to(ARG_1, TOS_REG_1);
callInfo.reset();
emit_callhelper_D(func);

As far as I know, when a function returns, it's return value is placed in
the stack, so I basically try to place the top of the stack into a register
(enregisterTOS place the value into the TOS_REG_1 register), move the value
to be the first argument of my second call, and perform the call. However,
an error related to the method table of the current object is shown, because
I think that the value I move is the pointer to the 'this' object. If that
it's true, that means that the return value of the first helper is not in
the top of the stack, but then I'm completely clueless about where is it
placed. ¿Anybody can give me a clue about this problem?

Thank you very much in advance,

J. Redondo

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

===================================
This list is hosted by DevelopMentor®  http://www.develop.com

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to