This is the mail archive of the java-discuss@sourceware.cygnus.com mailing list for the GCJ project. See the GCJ home page for more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Current Status


On Wed, 17 Feb 1999, Brian Miller wrote:
>Jon Olson wrote:
>> 
>>We produce alot of microcontrollers that use ... AMD A29K.
>
>I bet bytecode maps real well to the 29K's stack architecture.
>Does GCJ's back-end take advantage of that when targetting the 29K?

The big advantage 29Ks, with their register stack,  have is being able to
efficiently allocate an arbitrary number of registers on function entry
and deallocate them on exit.  The large number of registers gives GCC,
in general, a register for every pseudo it generates and eliminates all
stack slot spills.  This is true whether you're compiling C, C++, Java,
or almost any other languages  Lots of registers makes for good code.
The 29K is incredibly good at function calls, due to its architecture.
Unfortunately, the 29K has alot of disadvantages as well:

  1) The 29K requires two stacks, one for registers and one for memory
      addressable things like arrays and objects.  I've found from experience
      that each stack needs roughly the same size as a single stack on
      other microprocessors.  Hence 29K needs about twice as much stack
      space.
  2) The 29K has no indexed offset addressing.  The effective address of
      anything must first be computed in a register.  You thus need lots
      of registers just for computing addresses, and things that take one
      instruction on RISCs like SPARC or ARM require 2 instructions on A29K.
  3) Each register requires 8-bits to encode in an instruction, because you
      have so many of them.  This makes an incredibly non-compact instruction
      set.  On typical C++ code, the 29K requires about 60% more code space
      than a ARM.
  4) AMD has ended all development on the 29K architecture.  Instead, they're
      targetting low end 186-386 processors for embedded applications.  A
      big mistake in my humble opinion.

In compiled Java, the A29K seems to fare better than with C++, since Java has
alot of fixed space overhead with all its metadata tables and Java tends to have
alot of small methods and little in-line field access.  Hence, the A29K's
efficient function call help it and I've found that A29K binaries are only about
15% larger than it's StrongARM brother.

 --
Jon Olson, Modular Mining Systems
	   3289 E. Hemisphere Loop
	   Tucson, AZ 85706
INTERNET:  olson@mmsi.com
PHONE:     (520)746-9127
FAX:       (520)889-5790