question about stubRoutines
Venkatachalam, Vasanth
Vasanth.Venkatachalam at amd.com
Thu Jul 5 15:44:46 PDT 2012
How do you handle the case where instructions in assembler_x86.cpp don't have overloaded versions that take an AddressLiteral as a source argument? Below is how I'm handling this case. Is this correct?
Take for example, the andl instruction. I defined an overloaded version taking an AddressLiteral in MacroAssembler:
void MacroAssembler::andl(Register dst, AddressLiteral src) {
if(reachable(src)) {
Assembler::andl(dst, as_Address(src));
}
else {
lea(rscratch1, src);
Assembler::andl(dst, Address(rscratch1, 0));
}
When I want to use the instruction (in StubGenerator_x86_64.cpp), I do it as follows:
ExternalAddress foo_address(StubRoutines::x86::mask_mant_all8());
__ andl(rax, foo_address);
When I do this I get the build errors below:
/home/tester/hotspot/hotspot-bd-dev/src/cpu/x86/vm/x86_64.ad: In member function 'virtual void loadUB2L_immI8Node::emit(CodeBuffer&, PhaseRegAlloc*) const':
/home/tester/hotspot/hotspot-bd-dev/src/cpu/x86/vm/x86_64.ad:4850:44: error: no matching function for call to 'MacroAssembler::andl(RegisterImpl*&, intptr_t)'
/home/tester/hotspot/hotspot-bd-dev/src/cpu/x86/vm/x86_64.ad:4850:44: note: candidate is:
In file included from /home/tester/hotspot/hotspot-bd-dev/src/share/vm/asm/assembler.hpp:448:0,
from /home/tester/hotspot/hotspot-bd-dev/src/share/vm/precompiled/precompiled.hpp:29:
/home/tester/hotspot/hotspot-bd-dev/src/cpu/x86/vm/assembler_x86.hpp:2256:8: note: void MacroAssembler::andl(Register, AddressLiteral)
/home/tester/hotspot/hotspot-bd-dev/src/cpu/x86/vm/assembler_x86.hpp:2256:8: note: no known conversion for argument 2 from 'intptr_t {aka long int}' to 'AddressLiteral'
-----Original Message-----
From: Vladimir Kozlov [mailto:vladimir.kozlov at oracle.com]
Sent: Monday, June 25, 2012 7:47 PM
To: Venkatachalam, Vasanth
Cc: hotspot-dev at openjdk.java.net
Subject: Re: question about stubRoutines
Look how StubRoutines::x86::float_sign_mask() is done. Then you can access it as
external address:
ExternalAddress foostart_adr(StubRoutines::x86::foostart());
__ lea(r9, foostart_Adr);
Vladimir
Venkatachalam, Vasanth wrote:
> Hi,
>
>
>
> I'm trying to write a new stub routine in Hotspot's
> stubGenerator_x86_64.cpp. The original code for the routine is in a MASM
> file. I'm trying to translate this code into calls to Hotspot's
> assembler so that the code can be implemented into a stub routine.
>
>
>
> The original MASM file has a large data segment (aligned to 16 bytes)
> which looks like:
>
>
>
> ALIGN 16
>
> __foostart:
>
> DQ 0000000000000000h
>
> DQ 3f6ff00aa0000000h
>
> DQ 3f7fe02a60000000h
>
> DQ 3f87dc4750000000h
>
> DQ 3f8fc0a8b0000000h
>
> DQ 3f93cea440000000h
>
> DQ 3f97b91b00000000h
>
> <several hundred
> more entries...>
>
>
>
> This data segment is used in one of the instructions:
>
> lea r9, QWORD PTR __foostart
>
>
>
> Can anyone explain how to handle this data segment when writing a new
> StubRoutine in Hotspot?
>
>
>
> Vasanth
>
>
>
> --
>
> Vasanth Venkatachalam
>
> AMD Runtimes
>
> (512)602-6177
>
>
>
More information about the hotspot-dev
mailing list