This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: Create binary from GCJ generated assembly
- From: Andrew Haley <aph at redhat dot com>
- To: isuru herath <isuru81 at yahoo dot com>
- Cc: java at gcc dot gnu dot org
- Date: Wed, 28 Oct 2009 15:56:30 +0000
- Subject: Re: Create binary from GCJ generated assembly
- References: <276268.36412.qm@web56002.mail.re3.yahoo.com>
isuru herath wrote:
Thanks a lot for the quick reply. I did accordingly. But results were not the same. My program is a multi threaded shared counter.
so in my Java code I have
counter++
I need to surround this with two xchg instructions. like
xchg
counter++
xchg
so that I can count number of read and write operations between two xchg instructions.
OK.
with gcc I got both as 1 which is correct.
with gcj and JNI I got 47 read operations and 29 write operations
with gcj and CNI I got 6 read operations and 6 write operations
the way I am doing with CNI is follows.
1. a java class with native method.(custom.java)
2. c++ implementation of it to insert assembly.(custom.cc)
3. compile custom.java (gcj -C custom.java)
4. create the header file (gcjh custom -o custom.h)
5. write multi threaded shared counter program. it has calls to native method to insert assembly(shared_counter.java)
6. compile all java classes (gcj -C *.java)
7. compile the custom.cc (g++ -c custom.cc -o custom.o)
8. create the executable.
(gcj do_options.class custom.class shared_counter.class custom.o -lstdc++ --main=shared_counter -o shared_conter)
do_options is an interface with final variables. is there something that is wrong. or should I need do some additional thing. any help/ advice is greatly appreciated.
I'd rather see your code than guess what you did.
But yes, you're right. You'd be calling code to invoke the inline asm,
rather than executing it directly. If you can't tolerate that, your
only recourse is to add an intrinsic counter increment. gcj already has
intrinsics for things like sun.misc.Unsafe.compareAndSwapInt(), so this one
should be easy enough. Personally speaking, I'd just write the routines
that need to access the counter in C++.
Andrew.