The present invention provides a compiler that can compile Java byte code
at high speed while employing only limited resources. The technique
converts byte code into intermediate code that employs, as an opcode, an
address of an execution routine that corresponds to a byte code, and
executes the execution routines in a sequential order corresponding to
that of the intermediate code. The length of the intermediate code is
constant and the bit location of the opcode is also constant. The
execution routine is stored in sequential areas in a memory, and an offset
of the execution routine group from the head address of the sequential
memory area is employed as an opcode. Furthermore, by employing empty
pipelines in the CPU, one part (operand generation and a jump) of an
instruction group for jumping to the next intermediate code execution
routine, and one part (prefetching of intermediate code and address
calculation of a execution routine) of an instruction group for jumping to
the next plus one intermediate execution routine can be executed in
parallel to the original intermediate code process. Further, rule-based
optimization using idioms is performed, without requiring analysis of the
program structure.
La actual invención proporciona un recopilador que pueda compilar código del octeto de Java en la velocidad mientras que emplea solamente recursos limitados. La técnica convierte código del octeto en el código intermedio que emplea, como opcode, una dirección de una rutina de la ejecución que corresponda a un código del octeto, y ejecuta las rutinas de la ejecución en una orden secuencial que corresponde a la del código intermedio. La longitud del código intermedio es constante y la localización de pedacito del opcode es también constante. La rutina de la ejecución se almacena en áreas secuenciales en una memoria, y una compensación del grupo rutinario de la ejecución de la dirección principal del área de memoria secuencial se emplea como opcode. Además, empleando tuberías vacías en la CPU, una porción (generación del operando y un salto) de un grupo de la instrucción para saltar a la rutina intermedia siguiente de la ejecución del código, y una porción (el prefetching del cálculo intermedio del código y de dirección de una rutina de la ejecución) de un grupo de la instrucción para saltar al siguiente más una rutina intermedia de la ejecución se pueden ejecutar en paralelo al proceso intermedio original del código. Además, la optimización basada en las reglas que usa idiomas se realiza, sin requerir el análisis de la estructura del programa.