indirect array reference from interpreter

Keith McGuigan Keith.McGuigan at Sun.COM
Thu Nov 12 22:42:27 PST 2009


Hi Manjiri,

The code for the interpreter is generated at startup, and at that time 
the current address of ptr_queue is getting embedded in the code as an 
immediate constant.  That first __mov32 instruction isn't evaluating 
'ptr_queue' each time it executes.

In order to do what you want here, I think you'll need to use a double 
indirection, where the baked-in address refers to a location in the heap 
which points at your array.  Then you can change the address stored in 
the heap at each iteration.

hope that helps...

--
- Keith

Manjiri Namjoshi wrote:
> Hello,
> 
> I am trying to set a global array from the hotspot interpreter.
> I am using x86 machine, so in the templateInterpreter_x86_32.cpp (on 
> every method entry) I have put following code :
> 
> __ mov32(ExternalAddress((address)(ptr_queue)),rdx);   // rdx contains 
> the value that I want to set in the array location that ptr_queue is 
> currently pointing
> 
> // following code increments the ptr_queue, so that it will point to the 
> next array index.
> __ mov32(rax, ExternalAddress((address)&(ptr_queue)));
> __ addl(rax, 4);
> __ mov32(ExternalAddress((address)&(ptr_queue)),rax);
> 
> 
> where,
> int * ptr_queue = &profileQueue[0];
> // profileQueue is the actual global array that I want to set.
> 
> But, this code is able to set only profileQueue[0] with the value in 
> rdx. All the other locations in the array are not getting set to rdx.
> 
> Basically, I need to do indirect array referencing from the interpreter.
> 
> Please let me know if my question is not clear.
> 
> Thank You.
> 
> Sincerely,
> Manjiri



More information about the hotspot-dev mailing list