US20020188827A1 - Opcode numbering for meta-data encoding - Google Patents

Opcode numbering for meta-data encoding Download PDF

Info

Publication number
US20020188827A1
US20020188827A1 US10/159,300 US15930002A US2002188827A1 US 20020188827 A1 US20020188827 A1 US 20020188827A1 US 15930002 A US15930002 A US 15930002A US 2002188827 A1 US2002188827 A1 US 2002188827A1
Authority
US
United States
Prior art keywords
opcode
property
program
opcodes
machine
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
US10/159,300
Inventor
Dean Long
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Priority to US10/159,300 priority Critical patent/US20020188827A1/en
Publication of US20020188827A1 publication Critical patent/US20020188827A1/en
Abandoned legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Definitions

  • the present invention relates to computer systems. More particularly, the present invention relates to opcode numbering for meta-data encoding.
  • JavaTM programming language was developed at Sun Microsystems as a platform independent, object oriented computer language.
  • JavaTM achieves its operating system independence by being both a compiled and interpreted language.
  • the way in which this independence is achieved is illustrated in FIG. 1.
  • JavaTM source code 10 which consists of JavaTM classfiles, is compiled into a generic intermediate format called JavaTM bytecode 14 .
  • JavaTM's bytecodes consist of a sequence of single byte opcodes, each of which identify a particular operation to be carried out. Additionally, some of the opcodes have parameters. For example, opcode number 21 , iload ⁇ varnum>, takes the single-word integer value stored in the local variable, varnum, and pushes it onto a stack.
  • the bytecodes 14 are interpreted by a JavaTM Virtual Machine (JVM) 16 .
  • the JVM executes the bytecodes, either by interpreting them or by compiling them to native machine code and then executing the compiled code.
  • the JVM 16 is a stacked-based implementation of a “virtual” processor that shares many characteristics with physical microprocessors.
  • the bytecodes 14 executed by the JVM 16 are essentially a machine instruction set, and as will be appreciated by those of ordinary skill in the art, are similar to the assembly language of a computing machine. Accordingly, every hardware platform or operating system may have a unique implementation of the JVM 16 , called a JavaTM Runtime System, to route the universal bytecode calls to the underlying native system 18 .
  • JavaTM provides portability through bytecodes
  • JavaTM programs lag natively compiled programs, written in languages like C/C++, in their execution time.
  • a user activates a Java program on a Web Page, the user must wait not only for the program to download but also to be interpreted.
  • optimizations can be introduced into the processing of JavaTM bytecodes 14 . These optimizations can be implemented in a variety of manners including as Stand-Alone Optimizers (SAOs) or as part of Just-in-Time (JIT) compilers.
  • SAOs Stand-Alone Optimizers
  • JIT Just-in-Time
  • a SAO transforms an input classfile containing bytecode 14 into an output classfile containing bytecodes that more efficiently perform the same operations.
  • a JIT transforms an input classfile containing bytecode 14 into an executable program.
  • a JVM 16 Prior to the development of JITs, a JVM 16 would step through all the bytecode instructions in a program and mechanically perform the native code calls. With a JIT compiler, however, the JVM 16 first makes a call to the JIT which compiles the instructions into native code that is then run directly on the native operating system 18 .
  • the JIT compiler permits natively complied code to run faster and makes it so that the code only needs to be compiled once. Further, JIT compilers offer a stage at which the executable code can be optimized.
  • a method for including opcode information in an opcode includes numbering the opcode such that a property of the opcode is represented by at least one bit of the opcode. According to one aspect, the number of data units required to advance to the next opcode is encoded into the opcode value itself. According to another aspect, opcodes are numbered such that opcodes having the same properties have opcode values in the same opcode range.
  • FIG. 1 is a block diagram that illustrates a typical JavaTM system.
  • FIG. 2A is a code sample that illustrates one application for opcode numbering in accordance with one embodiment of the present invention.
  • FIG. 2B is a flow diagram that illustrates one application for opcode numbering in accordance with one embodiment of the present invention.
  • FIG. 3A is a code sample that illustrates extracting an opcode property according to one embodiment of the present invention.
  • FIG. 3B is a code sample that illustrates extracting and decoding an opcode property according to one embodiment of the present invention.
  • FIG. 4 is a block diagram that illustrates opcode numbering in accordance with one embodiment of the present invention.
  • FIG. 5 is a diagram that illustrates renumbering opcodes in accordance with one embodiment of the present invention.
  • FIG. 6A is a block diagram that illustrates numbering opcodes in accordance with one embodiment of the present invention.
  • FIG. 6B is a code sample illustrating decoding opcode properties in accordance with one embodiment of the present invention.
  • FIG. 7A is a block diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention.
  • FIG. 7B is a flow diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention.
  • FIG. 8A is a block diagram that illustrates executing program files in accordance with one embodiment of the present invention.
  • FIG. 8B is a flow diagram that illustrates executing program files in accordance with one embodiment of the present invention.
  • FIG. 9A is a block diagram that illustrates filtering JavaTM classfiles in accordance with one embodiment of the present invention.
  • FIG. 9B is a flow diagram that illustrates filtering JavaTM classfiles in accordance with one embodiment of the present invention.
  • FIG. 10A is a block diagram that illustrates executing JavaTM classfiles in accordance with one embodiment of the present invention.
  • FIG. 10B is a flow diagram that illustrates executing JavaTM classfiles in accordance with one embodiment of the present invention.
  • FIG. 11A is a block diagram that illustrates pre-loading JavaTM classfiles in accordance with one embodiment of the present invention.
  • FIG. 11B is a flow diagram that illustrates pre-loading JavaTM classfiles in accordance with one embodiment of the present invention.
  • This invention relates to computer systems. More particularly, the present invention relates to opcode numbering for meta-data encoding.
  • the invention further relates to machine readable media on which are stored (1) the layout parameters of the present invention and/or (2) program instructions for using the present invention in performing operations on a computer.
  • Such media includes by way of example magnetic tape, magnetic disks, optically readable media such as CD ROMs and semiconductor memory such as PCMCIA cards.
  • the medium may also take the form of a portable item such as a small disk, diskette or cassette.
  • the medium may also take the form of a larger or immobile item such as a hard disk drive or a computer RAM.
  • opcodes are numbered such that one or more properties of an opcode are encoded within the opcode itself.
  • the present invention enables optimizations by allowing applications such as interpreters to use the information encoded within the opcode, rather than executing additional instructions to obtain the same information from another source.
  • An operand is the part of an instruction that references data to be acted upon.
  • An operation code (opcode) is the part of an instruction that tells the computer what to do, such as input, add or branch.
  • the opcode is the verb; the operands are the nouns. For example, in the instruction iadd value 1 value 2 , value 1 and value 2 are the operands and iadd is the opcode.
  • opcodes are assigned numbers fairly arbitrarily.
  • the opcode number serves no purpose other than to uniquely identify an opcode. Such was the case with JavaTM.
  • JavaTM When developing the JavaTM bytecode instruction set, the designers sought to ensure that it was simple enough for hardware optimization. A unique eight-bit number identified each JavaTM opcode.
  • Each opcode has properties that are inherently associated with the opcode. These properties are referred to as “meta-data”.
  • opcode meta-data is the opcode length, which is the number of data units required to advance to the next opcode.
  • opcode meta-data is the type of comparison for a “compare” opcode. Some examples of types of comparisons include “greater than”, “less than” and “equal to”.
  • Table 1 illustrates the format of the JavaTM invokeinterface instruction.
  • the instruction has one opcode (invokeinterface), followed by four operands.
  • the opcode length is thus five.
  • Table 2 illustrates the format of the JavaTM invokestatic instruction.
  • the instruction has one opcode (invokestatic), followed by two operands.
  • the opcode length is thus three.
  • the length of an opcode could be defined as one less than the number of data units required to advance to the next opcode.
  • the code sample 20 includes a switch statement 22 .
  • Code segment 24 is executed when the program counter (PC) 26 evaluates to invokestatic 28 and code segment 30 is executed when the PC 26 evaluates to invokeinterface 32 .
  • Code segment 24 includes a branch to common_invoke 34 , which represents a program unit callable by many other program units.
  • common_invoke 34 represents a program unit callable by many other program units.
  • JavaTM classfiles contain many instructions. Each instruction includes an opcode, followed by the operands associated with each opcode. An application that reads an opcode knows how many operands to read based on the opcode. Code to read the appropriate number of operands may be generated in this case, rather than generating code that both (1) uses the opcode to determine how many operands to read and (2) reads the operands.
  • FIG. 2B a flow diagram that illustrates one application for opcode numbering in accordance with one embodiment of the present invention is presented.
  • program execution begins executing opcode-specific code based upon an opcode value.
  • a check is made to determine whether program execution should branch to common code. If program execution does branch to common code, an opcode property is obtained by extracting and decoding the property from the opcode value at reference numeral 44 . If program execution has not branched to common code, there is no need to extract and decode opcode properties, since the opcode properties are known based upon the context of the current execution state.
  • the length is encoded in the three MSBs of the opcode.
  • FIG. 3A extracting an opcode property according to the above embodiment is illustrated using C code.
  • the opcode length is assigned a value equal to the current opcode right-shifted by five bits. This statement will extract the three MSBs from the opcode.
  • FIG. 4 a block diagram that illustrates opcode numbering according to the above embodiment is presented.
  • Eight bits represent the opcode 60 .
  • Bit 62 is the most significant bit (MSB) and bit 64 is the least significant bit.
  • Table 3 illustrates the valid opcode range for each meta-data value in accordance with this embodiment of the present invention.
  • TABLE 3 Meta- Opcode Range Data (Hex) 0 00 . . . 1F 1 20 . . . 3F 2 40 . . . 5F 3 60 . . . 7F 4 80 . . . 9F 5 A0 . . . BF 6 C0 . . . DF 7 E0 . . . FF
  • the above embodiment allocated three bits to represent length values including length three and length five.
  • Those of ordinary skill in the art will recognize that a smaller number of bits could be used in systems having a smaller number of opcode lengths. For example, suppose all opcodes had a length of either three or five. In this case, only one bit would be required to represent the two opcode lengths. The value zero could represent length three, and the value one could represent the length five. In such a system, a property would need to be extracted from the opcode, and then the value extracted would be decoded to obtain the property. Using the above example, if the value zero is extracted, this value would be decoded to obtain a length of three.
  • FIG. 3B extracting and decoding an opcode property according to the above example is illustrated using C code.
  • the opcode length is encoded in the MSB of the opcode.
  • the opcode property is extracted by right-shifting the current opcode by seven bits to obtain the MSB.
  • the part of the statement indicated by reference numeral 56 decodes the opcode length by multiplying the MSB by two and adding three. Thus, a MSB of zero indicates a length of three and a MSB of one indicates a length of five.
  • the particular opcode values chosen are not important. Any value within the valid range would suffice.
  • the above embodiment provides for relatively efficient code generation and code execution.
  • the opcode length may be obtained with a shift operation, rather than executing additional instructions to obtain the same information by other means such as a table look-up.
  • Assigning new opcode values for every opcode is not required. However, multiple opcodes cannot have the same opcode value. Thus, any conflicts between default opcode values and new opcode values must be resolved.
  • x60 (70) was selected as the new value for invokeinterface. However, x60 (70) is also the default opcode value for iadd. Thus, the iadd opcode must be assigned a new value.
  • the new value for invokestatic (xA0) conflicts with the default opcode value for if_icompare. Thus, the if_icompare opcode must be assigned a new value as well.
  • FIG. 6A another method for opcode numbering in accordance with one embodiment of the present invention is presented.
  • opcodes having the same properties are assigned opcode values in the in this way.
  • three boolean properties are called EXC, GC and BR.
  • Opcode range 80 is reserved for opcodes having the EXC property but not any other defined property.
  • Opcode range 81 is reserved for opcodes having at least the EXC property.
  • Opcode range 82 is reserved for opcodes having both the EXC and the GC properties.
  • Opcodes in range 83 have at least the GC property.
  • Opcodes in range 84 have the GC property but not any other defined property.
  • Opcodes in range 86 have none of the three defined properties and opcodes in range 88 have the BR property.
  • the opcode properties are encoded in all opcodes, not a subset of opcodes.
  • “extracting” the opcode properties simply uses the entire opcode value and “decoding” the opcode properties requires a comparison of all the bits comprising the opcode.
  • FIG. 6B includes three C code samples that illustrate decoding properties according this embodiment of the present invention.
  • Code sample 90 determines whether an opcode has the EXC property based upon whether the opcode value is less than opcode value B.
  • Code sample 92 determines whether an opcode has the GC property based upon whether the opcode value is less than opcode value C and greater than or equal to opcode value A.
  • Code sample 94 determines whether an opcode has the BR property based upon whether the opcode value is greater than or equal to opcode value D. Note that tests for properties EXC and BR require only one comparison.
  • the opcode range containing the EXC property includes the lowest range of the entire opcode range and the opcode range containing the BR property includes the highest range of the entire opcode range.
  • the opcode values are always greater than zero and less than N.
  • the opcodes could be numbered such that the opcode property is obtained by subtracting a number from the opcode, or by adding a number to the opcode.
  • the opcodes could be encoded such that the opcode property is obtained by performing modulus arithmetic on the opcode and assigning the opcode length to the remainder of the modulus operation.
  • FIGS. 7A through 11B illustrate several ways to number opcodes in accordance with the present invention.
  • the figures and the accompanying description are provided for illustrative purposes only and are not intended to be limiting in any way.
  • a runtime system loads and executes opcodes that have been renumbered.
  • a runtime systems loads opcodes, renumbers the opcodes and then executes the renumbered opcodes.
  • opcodes are optimized by renumbering them at some point before a runtime system such as a JVM executes them.
  • FIG. 7A a block diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention is presented.
  • At least one program file 100 is pre-processed by pre-processor 102 .
  • the program file 100 may be any file including opcodes.
  • the pre-processor 102 renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and creates at least one pre-processed file 104 .
  • the pre-processed program file 104 is loaded and executed by a processor 106 .
  • Processor 106 may be, for example, an interpreter or a runtime system.
  • FIG. 7B a method for pre-loading program files in accordance with one embodiment of the present is illustrated.
  • a program file is received.
  • the program file is processed to create a preprocessed file containing opcodes numbered such that at least one opcode property is encoded in at least one opcode.
  • the preprocessed program file is stored to a computer-readable medium.
  • FIG. 8A a block diagram that illustrates executing program files in accordance with one embodiment of the present invention is presented.
  • a processor 122 loads a program file 124 , renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and makes the modified program file available for execution.
  • Processor 122 may be, for example, an interpreter or a runtime system.
  • FIG. 8B a method for executing program files in accordance with one embodiment of the present is illustrated.
  • a program file is received.
  • opcodes within the program file are renumbered such that at least one opcode property is encoded in at least one opcode.
  • the program file is made available for execution.
  • Compiler 142 compiles at least one source code file 140 .
  • the compiler 142 creates at least one classfile 144 .
  • the filter 146 loads a classfile 144 , renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and creates a preprocessed classfile 148 .
  • the preprocessed classfile 148 is read by the runtime system 150 .
  • the runtime system 150 makes calls to the native operating system 152 .
  • FIG. 9B a method for filtering JavaTM classfiles in accordance with one embodiment of the present is illustrated.
  • a JavaTM classfile is received.
  • the classfile is filtered to create a preprocessed file containing opcodes numbered such that at least one opcode property is encoded in at least one opcode.
  • the preprocessed classfile is stored to a computer-readable medium.
  • Compiler 172 compiles at least one source code file 170 .
  • the compiler 172 creates at least one classfile 174 .
  • the runtime system 176 loads a classfile 174 , renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and makes the modified classfile available for execution.
  • the runtirne system 176 makes calls to the native operating system 178 .
  • FIG. 10B a method for executing JavaTM classfiles in accordance with one embodiment of the present is illustrated.
  • a JavaTM classfile is received.
  • opcodes within the classfile are renumbered such that at least one opcode property is encoded in at least one opcode.
  • the classfile made available for execution.
  • FIG. 11A a block diagram that illustrates pre-loading JavaTM classfiles in accordance with one embodiment of the present invention is presented.
  • the preloader 192 loads a classfile 190 and renumbers the opcodes such that at least one opcode property is encoded in at least one opcode.
  • the preloader 192 outputs code and data structures for the runtime system 194 .
  • the output may be in the form of .c files or linkable object files.
  • the .c files are compiled into object files and the object files are linked together into the runtime system 194 executable image either at build time or at runtime via dynamic linking.
  • the runtime system 194 makes calls to the native operating system 196 .
  • FIG. 11B a method for pre-loading JavaTM classfiles in accordance with one embodiment of the present is illustrated.
  • a JavaTM classfile is received.
  • opcodes in the classfile are numbered such that at least one opcode property is encoded in at least one opcode.
  • the classfile is preloaded by outputting code and data structures for the runtime system, thus linking the classfiles to the runtime system.
  • a JVM may read files other than classfiles or pre-processed classfiles.
  • the JVM could read a file having any format that the JVM understands. For example, bytecodes could be converted to C data structures and then compiled into an object file. This object file could be linked into the runtime system. Alternatively, the runtime system could load the object file and runtime system using a form of dynamic linking. In accordance with the present invention, however, the opcodes are renumbered before the JVM executes the opcodes.
  • the present invention provides opcode numbering for meta-data encoding.
  • the opcode numbering process can be performed in parallel with the interpretation of the opcode, it is best to perform the numbering process first and then store the results for the subsequent interpretation process.
  • the renumbering of JavaTM opcodes is described in the present disclosure, it is understood by those who are skilled in the art that opcodes from other languages may be renumbered by utilizing the same technique as disclosed.
  • eight-bit opcodes are used in the present disclosure for illustrating the invention, the same technique as described is also applicable to other opcodes of other sizes generated by a compilation of a high-level computer program.
  • the present invention may be implemented in software or firmware, as well as in programmable gate array devices, Application Specific Integrated Circuits (ASICs), and other hardware.
  • ASICs Application Specific Integrated Circuits

Abstract

A method for including opcode information in an opcode includes numbering the opcode such that a property of the opcode is represented by at least one bit of the opcode. According to one aspect, the number of data units required to advance to the next opcode is encoded into the opcode value itself. According to another aspect, opcodes are numbered such that opcodes having the same properties have opcode values in the same opcode range.

Description

    BACKGROUND OF THE INVENTION
  • 1. Field Of the Invention [0001]
  • The present invention relates to computer systems. More particularly, the present invention relates to opcode numbering for meta-data encoding. [0002]
  • 2. Background [0003]
  • A known problem for software developers and computer users is the lack of portability of software across operating system platforms. As a response to this concern, the Java™ programming language was developed at Sun Microsystems as a platform independent, object oriented computer language. [0004]
  • Java™ achieves its operating system independence by being both a compiled and interpreted language. The way in which this independence is achieved is illustrated in FIG. 1. First, Java™ source code [0005] 10, which consists of Java™ classfiles, is compiled into a generic intermediate format called Java™ bytecode 14. Java™'s bytecodes consist of a sequence of single byte opcodes, each of which identify a particular operation to be carried out. Additionally, some of the opcodes have parameters. For example, opcode number 21, iload <varnum>, takes the single-word integer value stored in the local variable, varnum, and pushes it onto a stack.
  • Next, the [0006] bytecodes 14 are interpreted by a Java™ Virtual Machine (JVM) 16. The JVM executes the bytecodes, either by interpreting them or by compiling them to native machine code and then executing the compiled code. The JVM 16 is a stacked-based implementation of a “virtual” processor that shares many characteristics with physical microprocessors. The bytecodes 14 executed by the JVM 16 are essentially a machine instruction set, and as will be appreciated by those of ordinary skill in the art, are similar to the assembly language of a computing machine. Accordingly, every hardware platform or operating system may have a unique implementation of the JVM 16, called a Java™ Runtime System, to route the universal bytecode calls to the underlying native system 18.
  • Although Java™ provides portability through bytecodes, Java™ programs lag natively compiled programs, written in languages like C/C++, in their execution time. When a user activates a Java program on a Web Page, the user must wait not only for the program to download but also to be interpreted. To improve Java™'s execution time, optimizations can be introduced into the processing of Java™ [0007] bytecodes 14. These optimizations can be implemented in a variety of manners including as Stand-Alone Optimizers (SAOs) or as part of Just-in-Time (JIT) compilers.
  • A SAO transforms an input [0008] classfile containing bytecode 14 into an output classfile containing bytecodes that more efficiently perform the same operations. A JIT transforms an input classfile containing bytecode 14 into an executable program. Prior to the development of JITs, a JVM 16 would step through all the bytecode instructions in a program and mechanically perform the native code calls. With a JIT compiler, however, the JVM 16 first makes a call to the JIT which compiles the instructions into native code that is then run directly on the native operating system 18. The JIT compiler permits natively complied code to run faster and makes it so that the code only needs to be compiled once. Further, JIT compilers offer a stage at which the executable code can be optimized.
  • Increasing demands on computers in general create an incentive to optimize the speed and efficiency of program execution. The run time nature of Java™-like systems provides a significant additional incentive for such optimizations. Accordingly, a need exists in the prior art for a method for optimizing program execution. [0009]
  • BRIEF DESCRIPTION OF THE INVENTION
  • A method for including opcode information in an opcode includes numbering the opcode such that a property of the opcode is represented by at least one bit of the opcode. According to one aspect, the number of data units required to advance to the next opcode is encoded into the opcode value itself. According to another aspect, opcodes are numbered such that opcodes having the same properties have opcode values in the same opcode range. [0010]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • FIG. 1 is a block diagram that illustrates a typical Java™ system. [0011]
  • FIG. 2A is a code sample that illustrates one application for opcode numbering in accordance with one embodiment of the present invention. [0012]
  • FIG. 2B is a flow diagram that illustrates one application for opcode numbering in accordance with one embodiment of the present invention. [0013]
  • FIG. 3A is a code sample that illustrates extracting an opcode property according to one embodiment of the present invention. [0014]
  • FIG. 3B is a code sample that illustrates extracting and decoding an opcode property according to one embodiment of the present invention. [0015]
  • FIG. 4 is a block diagram that illustrates opcode numbering in accordance with one embodiment of the present invention. [0016]
  • FIG. 5 is a diagram that illustrates renumbering opcodes in accordance with one embodiment of the present invention. [0017]
  • FIG. 6A is a block diagram that illustrates numbering opcodes in accordance with one embodiment of the present invention. [0018]
  • FIG. 6B is a code sample illustrating decoding opcode properties in accordance with one embodiment of the present invention. [0019]
  • FIG. 7A is a block diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention. [0020]
  • FIG. 7B is a flow diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention. [0021]
  • FIG. 8A is a block diagram that illustrates executing program files in accordance with one embodiment of the present invention. [0022]
  • FIG. 8B is a flow diagram that illustrates executing program files in accordance with one embodiment of the present invention. [0023]
  • FIG. 9A is a block diagram that illustrates filtering Java™ classfiles in accordance with one embodiment of the present invention. [0024]
  • FIG. 9B is a flow diagram that illustrates filtering Java™ classfiles in accordance with one embodiment of the present invention. [0025]
  • FIG. 10A is a block diagram that illustrates executing Java™ classfiles in accordance with one embodiment of the present invention. [0026]
  • FIG. 10B is a flow diagram that illustrates executing Java™ classfiles in accordance with one embodiment of the present invention. [0027]
  • FIG. 11A is a block diagram that illustrates pre-loading Java™ classfiles in accordance with one embodiment of the present invention. [0028]
  • FIG. 11B is a flow diagram that illustrates pre-loading Java™ classfiles in accordance with one embodiment of the present invention. [0029]
  • DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
  • Those of ordinary skill in the art will realize that the following description of the present invention is illustrative only. Other embodiments of the invention will readily suggest themselves to such skilled persons having the benefit of this disclosure. [0030]
  • This invention relates to computer systems. More particularly, the present invention relates to opcode numbering for meta-data encoding. The invention further relates to machine readable media on which are stored (1) the layout parameters of the present invention and/or (2) program instructions for using the present invention in performing operations on a computer. Such media includes by way of example magnetic tape, magnetic disks, optically readable media such as CD ROMs and semiconductor memory such as PCMCIA cards. The medium may also take the form of a portable item such as a small disk, diskette or cassette. The medium may also take the form of a larger or immobile item such as a hard disk drive or a computer RAM. [0031]
  • According to the present-invention, opcodes are numbered such that one or more properties of an opcode are encoded within the opcode itself. The present invention enables optimizations by allowing applications such as interpreters to use the information encoded within the opcode, rather than executing additional instructions to obtain the same information from another source. [0032]
  • Although the opcode numbering described herein is described with reference to Java™ bytecodes, the invention has a broader scope. The description of Java™ is done merely for illustrating possible applications of the present invention. Those of ordinary skill in the art will recognize that the invention could be applied to opcodes of various sizes and of various languages, generated for any program to be executed on a computer. [0033]
  • An operand is the part of an instruction that references data to be acted upon. An operation code (opcode) is the part of an instruction that tells the computer what to do, such as input, add or branch. The opcode is the verb; the operands are the nouns. For example, in the instruction iadd value[0034] 1 value2, value1 and value2 are the operands and iadd is the opcode.
  • Typically, opcodes are assigned numbers fairly arbitrarily. The opcode number serves no purpose other than to uniquely identify an opcode. Such was the case with Java™. When developing the Java™ bytecode instruction set, the designers sought to ensure that it was simple enough for hardware optimization. A unique eight-bit number identified each Java™ opcode. [0035]
  • Each opcode has properties that are inherently associated with the opcode. These properties are referred to as “meta-data”. One example of opcode meta-data is the opcode length, which is the number of data units required to advance to the next opcode. Another example of opcode meta-data is the type of comparison for a “compare” opcode. Some examples of types of comparisons include “greater than”, “less than” and “equal to”. [0036]
  • default opcode=xB[0037] 9 (185)
    TABLE 1
    invokeinterface
    indexbyte1
    indexbyte2
    count
    0
  • default opcode=xB[0038] 8 (184)
    TABLE 2
    invokestatic
    indexbyte1
    indexbyte2
  • Table 1 illustrates the format of the Java™ invokeinterface instruction. The instruction has one opcode (invokeinterface), followed by four operands. The opcode length is thus five. Table 2 illustrates the format of the Java™ invokestatic instruction. The instruction has one opcode (invokestatic), followed by two operands. The opcode length is thus three. Alternatively, the length of an opcode could be defined as one less than the number of data units required to advance to the next opcode. [0039]
  • Turning now to FIG. 2A, a code sample illustrating one application for opcode numbering is presented. The [0040] code sample 20 includes a switch statement 22. Code segment 24 is executed when the program counter (PC) 26 evaluates to invokestatic 28 and code segment 30 is executed when the PC 26 evaluates to invokeinterface 32. Code segment 24 includes a branch to common_invoke 34, which represents a program unit callable by many other program units. Those of ordinary skill in the art will recognize there are many other ways to branch to common code, such as the call statement indicated at reference numeral 36. When in code segment 30, the last opcode is known, since code segment 30 can only be executed when the PC 26 evaluates to invoke_interface 32. A program compiler, optimizer or interpreter may take advantage of this information. For example, Java™ classfiles contain many instructions. Each instruction includes an opcode, followed by the operands associated with each opcode. An application that reads an opcode knows how many operands to read based on the opcode. Code to read the appropriate number of operands may be generated in this case, rather than generating code that both (1) uses the opcode to determine how many operands to read and (2) reads the operands.
  • However, less information is available within the context of a common program unit like [0041] common_invoke 34. The last opcode is not known within the common invoke program unit 34, since the program unit 34 has no knowledge of who invoked it. Typically, information specific to the operand is obtained via relatively inefficient mechanisms, such as a table look-up based on the opcode. The present invention avoids this inefficiency by numbering opcodes such that meta-data is encoded in the opcodes themselves.
  • Turning now to FIG. 2B, a flow diagram that illustrates one application for opcode numbering in accordance with one embodiment of the present invention is presented. At reference numeral [0042] 40, program execution begins executing opcode-specific code based upon an opcode value. At reference numeral 42, a check is made to determine whether program execution should branch to common code. If program execution does branch to common code, an opcode property is obtained by extracting and decoding the property from the opcode value at reference numeral 44. If program execution has not branched to common code, there is no need to extract and decode opcode properties, since the opcode properties are known based upon the context of the current execution state.
  • According to one embodiment of the present invention, the length is encoded in the three MSBs of the opcode. Thus, the binary representation for the invokestatic opcode would be 011xxxxx, where “011” represents the length. This would mean that the invokestatic opcode and other opcodes having the same length could take on any value between 3*(256/8)=96 (x60) and 4*(256/8)−1=127 (x7F). Likewise, the invokeinterface command would have a binary representation of 101xxxxx. The invokeinterface opcode and other opcodes having the same length could take on any value between 5*(256/8)=160 (xA0) and 6*(256/8)−1=191 (xBF). [0043]
  • Turning now to FIG. 3A, extracting an opcode property according to the above embodiment is illustrated using C code. At [0044] reference numeral 50, the opcode length is assigned a value equal to the current opcode right-shifted by five bits. This statement will extract the three MSBs from the opcode.
  • Turning now to FIG. 4, a block diagram that illustrates opcode numbering according to the above embodiment is presented. Eight bits represent the opcode [0045] 60. Bit 62 is the most significant bit (MSB) and bit 64 is the least significant bit. The three MSBs 66 represent a property of the opcode. Accordingly, the property may represent 23=eight different values. Table 3 illustrates the valid opcode range for each meta-data value in accordance with this embodiment of the present invention.
    TABLE 3
    Meta- Opcode Range
    Data (Hex)
    0 00 . . . 1F
    1 20 . . . 3F
    2 40 . . . 5F
    3 60 . . . 7F
    4 80 . . . 9F
    5 A0 . . . BF
    6 C0 . . . DF
    7 E0 . . . FF
  • The above embodiment allocated three bits to represent length values including length three and length five. Those of ordinary skill in the art will recognize that a smaller number of bits could be used in systems having a smaller number of opcode lengths. For example, suppose all opcodes had a length of either three or five. In this case, only one bit would be required to represent the two opcode lengths. The value zero could represent length three, and the value one could represent the length five. In such a system, a property would need to be extracted from the opcode, and then the value extracted would be decoded to obtain the property. Using the above example, if the value zero is extracted, this value would be decoded to obtain a length of three. [0046]
  • Turning now to FIG. 3B, extracting and decoding an opcode property according to the above example is illustrated using C code. In the example, the opcode length is encoded in the MSB of the opcode. At [0047] reference numeral 54, the opcode property is extracted by right-shifting the current opcode by seven bits to obtain the MSB. The part of the statement indicated by reference numeral 56 decodes the opcode length by multiplying the MSB by two and adding three. Thus, a MSB of zero indicates a length of three and a MSB of one indicates a length of five.
  • Turning now to FIG. 5, renumbering opcodes in accordance with one embodiment of the present invention is presented. As discussed above, the valid opcode range for invokeinterface (length=three) in this embodiment is x60 to x7F. Accordingly, x60 (70) is selected as the new opcode for invokeinterface. Likewise, the valid opcode range for invokestatic (length=five) in this embodiment is xA0 to xBF. Accordingly, xA0 (72) is selected as the new opcode for invokestatic. The particular opcode values chosen are not important. Any value within the valid range would suffice. [0048]
  • The above embodiment provides for relatively efficient code generation and code execution. The opcode length may be obtained with a shift operation, rather than executing additional instructions to obtain the same information by other means such as a table look-up. [0049]
  • Assigning new opcode values for every opcode is not required. However, multiple opcodes cannot have the same opcode value. Thus, any conflicts between default opcode values and new opcode values must be resolved. In the above example, x60 (70) was selected as the new value for invokeinterface. However, x60 (70) is also the default opcode value for iadd. Thus, the iadd opcode must be assigned a new value. Similarly, the new value for invokestatic (xA0) conflicts with the default opcode value for if_icompare. Thus, the if_icompare opcode must be assigned a new value as well. [0050]
  • Turning now to FIG. 6A, another method for opcode numbering in accordance with one embodiment of the present invention is presented. According to this embodiment, opcodes having the same properties are assigned opcode values in the in this way. In the present example, three boolean properties are called EXC, GC and BR. [0051] Opcode range 80 is reserved for opcodes having the EXC property but not any other defined property. Opcode range 81 is reserved for opcodes having at least the EXC property. Opcode range 82 is reserved for opcodes having both the EXC and the GC properties. Opcodes in range 83 have at least the GC property. Opcodes in range 84 have the GC property but not any other defined property. Opcodes in range 86 have none of the three defined properties and opcodes in range 88 have the BR property.
  • According to the above embodiment of the present invention, the opcode properties are encoded in all opcodes, not a subset of opcodes. Thus, “extracting” the opcode properties simply uses the entire opcode value and “decoding” the opcode properties requires a comparison of all the bits comprising the opcode. [0052]
  • FIG. 6B includes three C code samples that illustrate decoding properties according this embodiment of the present invention. [0053] Code sample 90 determines whether an opcode has the EXC property based upon whether the opcode value is less than opcode value B. Code sample 92 determines whether an opcode has the GC property based upon whether the opcode value is less than opcode value C and greater than or equal to opcode value A. Code sample 94 determines whether an opcode has the BR property based upon whether the opcode value is greater than or equal to opcode value D. Note that tests for properties EXC and BR require only one comparison. This is because the opcode range containing the EXC property includes the lowest range of the entire opcode range and the opcode range containing the BR property includes the highest range of the entire opcode range. In other words, the opcode values are always greater than zero and less than N.
  • The use of three properties in the above embodiments is not intended to be limiting in any way. Those of ordinary skill in the art will recognize that the present invention may be used to number opcodes such that fewer than or more than three properties are represented by separate opcode ranges. [0054]
  • Those of ordinary skill in the art will recognize that there are many other ways of encoding an opcode property in the opcode. For example, the opcodes could be numbered such that the opcode property is obtained by subtracting a number from the opcode, or by adding a number to the opcode. Alternatively, the opcodes could be encoded such that the opcode property is obtained by performing modulus arithmetic on the opcode and assigning the opcode length to the remainder of the modulus operation. [0055]
  • The above description with respect to the Java™ programing language is not intended to be limiting in any way. Those of ordinary skill in the art will recognize that the invention may be applied to other languages as well. In addition, those of ordinary skill in the art will recognize that the invention may be applied to opcodes of various sizes. For example, the invention may be applied to systems having 16 or 32 bit opcodes. [0056]
  • FIGS. 7A through 11B illustrate several ways to number opcodes in accordance with the present invention. The figures and the accompanying description are provided for illustrative purposes only and are not intended to be limiting in any way. In some embodiments of the present invention described below, a runtime system loads and executes opcodes that have been renumbered. In other embodiments of the present invention, a runtime systems loads opcodes, renumbers the opcodes and then executes the renumbered opcodes. In each of these embodiments, opcodes are optimized by renumbering them at some point before a runtime system such as a JVM executes them. [0057]
  • Turning now to FIG. 7A, a block diagram that illustrates pre-loading program files in accordance with one embodiment of the present invention is presented. At least one [0058] program file 100 is pre-processed by pre-processor 102. The program file 100 may be any file including opcodes. The pre-processor 102 renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and creates at least one pre-processed file 104. The pre-processed program file 104 is loaded and executed by a processor 106. Processor 106 may be, for example, an interpreter or a runtime system.
  • Turning now to FIG. 7B, a method for pre-loading program files in accordance with one embodiment of the present is illustrated. At [0059] reference numeral 110, a program file is received. At reference numeral 112, the program file is processed to create a preprocessed file containing opcodes numbered such that at least one opcode property is encoded in at least one opcode. At reference numeral 114, the preprocessed program file is stored to a computer-readable medium.
  • Turning now to FIG. 8A, a block diagram that illustrates executing program files in accordance with one embodiment of the present invention is presented. A [0060] processor 122 loads a program file 124, renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and makes the modified program file available for execution. Processor 122 may be, for example, an interpreter or a runtime system.
  • Turning now to FIG. 8B, a method for executing program files in accordance with one embodiment of the present is illustrated. At reference numeral [0061] 130, a program file is received. At reference numeral 132, opcodes within the program file are renumbered such that at least one opcode property is encoded in at least one opcode. At reference numeral 134, the program file is made available for execution.
  • Turning now to FIG. 9A, a block diagram that illustrates filtering Java™ classfiles in accordance with one embodiment of the present invention is presented. [0062] Compiler 142 compiles at least one source code file 140. The compiler 142 creates at least one classfile 144. The filter 146 loads a classfile 144, renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and creates a preprocessed classfile 148. The preprocessed classfile 148 is read by the runtime system 150. The runtime system 150 makes calls to the native operating system 152.
  • Turning now to FIG. 9B; a method for filtering Java™ classfiles in accordance with one embodiment of the present is illustrated. At [0063] reference numeral 160, a Java™ classfile is received. At reference numeral 162, the classfile is filtered to create a preprocessed file containing opcodes numbered such that at least one opcode property is encoded in at least one opcode. At reference numeral 164, the preprocessed classfile is stored to a computer-readable medium.
  • Turning now to FIG. 10A, a block diagram that illustrates executing Java™ classfiles in accordance with one embodiment of the present invention is presented. Compiler [0064] 172 compiles at least one source code file 170. The compiler 172 creates at least one classfile 174. The runtime system 176 loads a classfile 174, renumbers the opcodes such that at least one opcode property is encoded in at least one opcode, and makes the modified classfile available for execution. The runtirne system 176 makes calls to the native operating system 178.
  • Turning now to FIG. 10B, a method for executing Java™ classfiles in accordance with one embodiment of the present is illustrated. At reference numeral [0065] 180, a Java™ classfile is received. At reference numeral 182, opcodes within the classfile are renumbered such that at least one opcode property is encoded in at least one opcode. At reference numeral 184, the classfile made available for execution.
  • Turning now to FIG. 11A, a block diagram that illustrates pre-loading Java™ classfiles in accordance with one embodiment of the present invention is presented. The [0066] preloader 192 loads a classfile 190 and renumbers the opcodes such that at least one opcode property is encoded in at least one opcode. The preloader 192 outputs code and data structures for the runtime system 194. The output may be in the form of .c files or linkable object files. The .c files are compiled into object files and the object files are linked together into the runtime system 194 executable image either at build time or at runtime via dynamic linking. The runtime system 194 makes calls to the native operating system 196.
  • Turning now to FIG. 11B, a method for pre-loading Java™ classfiles in accordance with one embodiment of the present is illustrated. At [0067] reference numeral 200, a Java™ classfile is received. At reference numeral 202, opcodes in the classfile are numbered such that at least one opcode property is encoded in at least one opcode. At reference numeral 204, the classfile is preloaded by outputting code and data structures for the runtime system, thus linking the classfiles to the runtime system.
  • The description of file formats read by a runtime system such as a JVM is not intended to be limiting in any way. Those of ordinary skill in the art will recognize that a JVM may read files other than classfiles or pre-processed classfiles. The JVM could read a file having any format that the JVM understands. For example, bytecodes could be converted to C data structures and then compiled into an object file. This object file could be linked into the runtime system. Alternatively, the runtime system could load the object file and runtime system using a form of dynamic linking. In accordance with the present invention, however, the opcodes are renumbered before the JVM executes the opcodes. [0068]
  • As has been described, the present invention provides opcode numbering for meta-data encoding. Although the opcode numbering process can be performed in parallel with the interpretation of the opcode, it is best to perform the numbering process first and then store the results for the subsequent interpretation process. Moreover, even though the renumbering of Java™ opcodes is described in the present disclosure, it is understood by those who are skilled in the art that opcodes from other languages may be renumbered by utilizing the same technique as disclosed. Further, even though eight-bit opcodes are used in the present disclosure for illustrating the invention, the same technique as described is also applicable to other opcodes of other sizes generated by a compilation of a high-level computer program. [0069]
  • According to a presently preferred embodiment, the present invention may be implemented in software or firmware, as well as in programmable gate array devices, Application Specific Integrated Circuits (ASICs), and other hardware. [0070]
  • Thus, a novel method for opcode numbering has been described. While embodiments and applications of this invention have been shown and described, it would be apparent to those skilled in the art having the benefit of this disclosure that many more modifications than mentioned above are possible without departing from the inventive concepts herein. The invention, therefore, is not to be restricted except in the spirit of the appended claims. [0071]

Claims (30)

What is claimed is:
1. A method for encoding opcode information in an opcode, the opcode including a plurality of bits, the method comprising encoding a property of the opcode in at least one bit of the opcode.
2. A method for including opcode information in a plurality of opcodes, each opcode including a plurality of bits, the method comprising numbering the opcodes such that opcodes having the same properties have opcode values in the same opcode range.
3. A method for including opcode information in an opcode, the opcode including a plurality of bits, the method comprising numbering the opcode such that a property of the opcode is represented by at least one bit of the opcode.
4. The method of claim 3 wherein opcodes comprise eight bits.
5. The method of claim 3 wherein the bits representing a property of each opcode are contiguous.
6. The method of claim 5 wherein the bits representing a property of each opcode comprise three bits.
7. The method of claim 6 wherein the property comprises the length of a first opcode, the length equal to the number of data units required to advance to a second opcode.
8. The method of claim 6 wherein the bits representing a property of each opcode comprise the three most significant bits of the opcode.
9. A method for extracting opcode information from an opcode, the opcode including a plurality of bits, the method comprising extracting a property from the opcode, the property including at least one bit.
10. A method for decoding opcode information in an opcode, the opcode including a plurality of bits, the method comprising decoding a property of the opcode from at least one bit of the opcode.
11. The method of claim 9 wherein extracting the property further comprises dividing the opcode by a power of two.
12. The method of claim 11 wherein opcodes comprise eight bits.
13. The method of claim 12 wherein the bits representing a property of each opcode are contiguous.
14. The method of claim 13 wherein the bits representing a property of each opcode comprise three bits.
15. The method of claim 14 wherein the property comprises the length of a first opcode, the length equal to the number of data units required to advance to a second opcode.
16. The method of claim 15 wherein the bits representing a property of each opcode comprise the three most significant bits of the opcode.
17. A method for pre-processing a program file, the program file including a plurality of opcodes, the method comprising:
receiving the program file;
processing said program file to create at least one pre-processed program file, said at least one pre-processed program file including a plurality of opcodes, said processing including numbering opcodes within said at least one pre-processed program file such that at least one opcode property is encoded in at least one opcode; and
storing said at least one pre-processed program file on a computer-readable medium.
18. A method for executing a program, the program including a plurality of opcodes, the method comprising:
receiving the program;
renumbering opcodes within said program such that at least one opcode property is encoded in at least one opcode; and
executing the program.
19. The method of claim 18 wherein said executing further comprises extracting an opcode property from an opcode such that said opcode property may be used directly.
20. An improved method for pre-loading Java™ classfiles, the method comprising:
receiving a Java™ classfile;
processing said Java™ classfile to create at least one pre-processed classfile, said at least one pre-processed classfile including a plurality of opcodes, said processing including numbering opcodes within said at least one pre-processed classfile such that at least one opcode property is encoded in at least one opcode; and
storing said at least one pre-processed classfile on a computer-readable medium.
13. An improved method for executing Java™ classfiles, the method comprising:
receiving a classfile, said classfile comprising a plurality of opcodes;
renumbering opcodes within said classfile such that at least one opcode property is encoded in at least one opcode; and
executing said classfile.
22. The method of claim 21 wherein said executing further comprises extracting an opcode property from an opcode such that said opcode property may be used directly.
23. A program storage device readable by a machine, embodying a program of instructions executable by the machine to encode opcode information in an opcode, the opcode including a plurality of bits, the program storage device comprising a module comprising code for causing a machine to encode a property of the opcode in at least one bit of the opcode.
24. A program storage device readable by a machine, embodying a program of instructions executable by the machine to include opcode information in an opcode, the opcode including a plurality of bits, the program storage device comprising a module comprising code for causing a machine to number the opcode such that a property of the opcode is represented by at least one bit of the opcode.
25. A program storage device readable by a machine, embodying a program of instructions executable by the machine to extract opcode information from an opcode, the opcode including a plurality of bits, the program storage device comprising a module comprising code for causing a machine to extract a property from the opcode, the property including at least one bit.
26. A program storage device readable by a machine, embodying a program of instructions executable by the machine to decode opcode information in an opcode, the opcode including a plurality of bits, the program storage device comprising a module comprising code for causing a machine to decode a property of the opcode from at least one bit of the opcode.
27. A program storage device readable by a machine, embodying a program of instructions executable by the machine to pre-process a program file, the program file including a plurality of opcodes, the program storage device comprising:
a first module comprising code for causing a machine to receive a program file;
a second module comprising code for causing a machine to process said program file to create at least one pre-processed program file, said at least one pre-processed program file including a plurality of opcodes, said processing including numbering opcodes within said at least one pre-processed program file such that at least one opcode property is encoded in at least one opcode; and
a third module comprising code for causing a machine to store said at least one pre-processed program file on a computer-readable medium.
28. A program storage device readable by a machine, embodying a program of instructions executable by the machine to execute a program, the program including
a plurality of opcodes, the program storage device comprising:
a first module comprising code for receiving the program;
a second module comprising code for renumbering opcodes within said program such that at least one opcode property is encoded in at least one opcode; and
a third module comprising code for executing the program.
29. A program storage device readable by a machine, embodying a program of instructions executable by the machine to pre-load Java™ classfiles, the program storage device comprising:
a first module comprising code for causing a machine to receive a Java™ classfile;
a second module comprising code for causing a machine to process said Java™ classfile to create at least one pre-processed classfile, said at least one pre-processed classfile including a plurality of opcodes, said processing including numbering opcodes within said at least one pre-processed classfile such that at least one opcode property is encoded in at least one opcode; and
a third module comprising code for causing a machine to store said at least one pre-processed classfile on a computer-readable medium.
30. A program storage device readable by a machine, embodying a program of instructions executable by the machine to execute Java™ classfiles, the program storage device comprising:
a first module comprising code for causing a machine to receive a classfile, said classfile comprising a plurality of opcodes;
a second module comprising code for causing a machine to renumber opcodes within said classfile such that at least one opcode property is encoded in at least one opcode; and
a third module comprising code for causing a machine to execute said classfile.
US10/159,300 1999-06-23 2002-05-31 Opcode numbering for meta-data encoding Abandoned US20020188827A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US10/159,300 US20020188827A1 (en) 1999-06-23 2002-05-31 Opcode numbering for meta-data encoding

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/338,875 US6463521B1 (en) 1999-06-23 1999-06-23 Opcode numbering for meta-data encoding
US10/159,300 US20020188827A1 (en) 1999-06-23 2002-05-31 Opcode numbering for meta-data encoding

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US09/338,875 Continuation US6463521B1 (en) 1999-06-23 1999-06-23 Opcode numbering for meta-data encoding

Publications (1)

Publication Number Publication Date
US20020188827A1 true US20020188827A1 (en) 2002-12-12

Family

ID=23326520

Family Applications (2)

Application Number Title Priority Date Filing Date
US09/338,875 Expired - Lifetime US6463521B1 (en) 1999-06-23 1999-06-23 Opcode numbering for meta-data encoding
US10/159,300 Abandoned US20020188827A1 (en) 1999-06-23 2002-05-31 Opcode numbering for meta-data encoding

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US09/338,875 Expired - Lifetime US6463521B1 (en) 1999-06-23 1999-06-23 Opcode numbering for meta-data encoding

Country Status (3)

Country Link
US (2) US6463521B1 (en)
EP (1) EP1063585A3 (en)
JP (1) JP2001034483A (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060225045A1 (en) * 2005-03-31 2006-10-05 Gilad Bracha Supporting dynamically-typed languages in typed assembly languages

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding
US6308256B1 (en) * 1999-08-18 2001-10-23 Sun Microsystems, Inc. Secure execution of program instructions provided by network interactions with processor
US6654952B1 (en) 2000-02-03 2003-11-25 Sun Microsystems, Inc. Region based optimizations using data dependence graphs
US6725363B1 (en) 2000-07-31 2004-04-20 Sun Microsystems, Inc. Method for filtering instructions to get more precise event counts
US6675372B1 (en) 2000-10-31 2004-01-06 Sun Microsystems, Inc. Counting speculative and non-speculative events
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US6975250B2 (en) * 2002-05-28 2005-12-13 Broadcom Corporation Methods and systems for data manipulation
US7363620B2 (en) 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US7549145B2 (en) * 2003-09-25 2009-06-16 International Business Machines Corporation Processor dedicated code handling in a multi-processor environment
US7496917B2 (en) 2003-09-25 2009-02-24 International Business Machines Corporation Virtual devices using a pluarlity of processors
US7516456B2 (en) 2003-09-25 2009-04-07 International Business Machines Corporation Asymmetric heterogeneous multi-threaded operating system
US7415703B2 (en) 2003-09-25 2008-08-19 International Business Machines Corporation Loading software on a plurality of processors
US7389508B2 (en) * 2003-09-25 2008-06-17 International Business Machines Corporation System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment
US7475257B2 (en) 2003-09-25 2009-01-06 International Business Machines Corporation System and method for selecting and using a signal processor in a multiprocessor system to operate as a security for encryption/decryption of data
US7318218B2 (en) 2003-09-25 2008-01-08 International Business Machines Corporation System and method for processor thread for software debugging
US7415618B2 (en) 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
US8220058B2 (en) 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7424620B2 (en) 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7353499B2 (en) 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US7444632B2 (en) * 2003-09-25 2008-10-28 International Business Machines Corporation Balancing computational load across a plurality of processors
US7523157B2 (en) * 2003-09-25 2009-04-21 International Business Machines Corporation Managing a plurality of processors as devices
US7478390B2 (en) * 2003-09-25 2009-01-13 International Business Machines Corporation Task queue management of virtual devices using a plurality of processors
US7480809B2 (en) * 2004-10-15 2009-01-20 Genesis Microchip Inc. Reducing power consumption of a microprocessor
US9152437B2 (en) * 2010-10-28 2015-10-06 Hewlett-Packard Development Company, L.P. Dynamically installing image processing
US9250937B1 (en) * 2013-11-06 2016-02-02 The Regents Of The University Of California Code randomization for just-in-time compilers

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4745605A (en) * 1986-08-19 1988-05-17 Amadahl Corporation Control word error detection and classification
US4802085A (en) * 1987-01-22 1989-01-31 National Semiconductor Corporation Apparatus and method for detecting and handling memory-mapped I/O by a pipelined microprocessor
US5367687A (en) * 1991-03-11 1994-11-22 Sun Microsystems, Inc. Method and apparatus for optimizing cost-based heuristic instruction scheduling
US5475843A (en) * 1992-11-02 1995-12-12 Borland International, Inc. System and methods for improved program testing
US5500947A (en) * 1988-06-27 1996-03-19 Digital Equipment Corporation Operand specifier processing by grouping similar specifier types together and providing a general routine for each
US5640503A (en) * 1993-06-24 1997-06-17 International Business Machines Corporation Method and apparatus for verifying a target instruction before execution of the target instruction using a test operation instruction which identifies the target instruction
US5650948A (en) * 1991-12-31 1997-07-22 Texas Instruments Incorporated Method and system for translating a software implementation with data-dependent conditions to a data flow graph with conditional expressions
US5905895A (en) * 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
US6021275A (en) * 1996-08-05 2000-02-01 General Magic, Inc. Object code structure and method for translation of architecture independent program implementations
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69031491T2 (en) 1990-04-10 1998-03-26 Ibm Hypertext data processing system and method
US5317740A (en) * 1991-03-07 1994-05-31 Digital Equipment Corporation Alternate and iterative analysis of computer programs for locating translatable code by resolving callbacks and other conflicting mutual dependencies
US5303362A (en) 1991-03-20 1994-04-12 Digital Equipment Corporation Coupled memory multiprocessor computer system including cache coherency management protocols
US5463746A (en) 1992-10-30 1995-10-31 International Business Machines Corp. Data processing system having prediction by using an embedded guess bit of remapped and compressed opcodes
JPH06175821A (en) 1992-12-10 1994-06-24 Fujitsu Ltd Arithmetic and logic unit
US5408670A (en) 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
JP3532975B2 (en) * 1993-09-27 2004-05-31 株式会社ルネサステクノロジ Microcomputer and method of executing instructions using the same
US5838965A (en) 1994-11-10 1998-11-17 Cadis, Inc. Object oriented database management system
US5636352A (en) 1994-12-16 1997-06-03 International Business Machines Corporation Method and apparatus for utilizing condensed instructions
US5696936A (en) 1995-04-25 1997-12-09 Unisys Corporation Low latency message processor interface using memory mapped Read/Write Windows
US5926642A (en) * 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5835712A (en) 1996-05-03 1998-11-10 Webmate Technologies, Inc. Client-server system using embedded hypertext tags for application and database development
US5778233A (en) 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
EP0932865B1 (en) * 1996-10-25 2002-08-14 SCHLUMBERGER Systèmes Using a high level programming language with a microcontroller
US5787431A (en) 1996-12-16 1998-07-28 Borland International, Inc. Database development system with methods for java-string reference lookups of column names
US5913064A (en) 1997-06-24 1999-06-15 Sun Microsystems, Inc. Method for generating instructions for an object-oriented processor

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4745605A (en) * 1986-08-19 1988-05-17 Amadahl Corporation Control word error detection and classification
US4802085A (en) * 1987-01-22 1989-01-31 National Semiconductor Corporation Apparatus and method for detecting and handling memory-mapped I/O by a pipelined microprocessor
US5500947A (en) * 1988-06-27 1996-03-19 Digital Equipment Corporation Operand specifier processing by grouping similar specifier types together and providing a general routine for each
US5367687A (en) * 1991-03-11 1994-11-22 Sun Microsystems, Inc. Method and apparatus for optimizing cost-based heuristic instruction scheduling
US5650948A (en) * 1991-12-31 1997-07-22 Texas Instruments Incorporated Method and system for translating a software implementation with data-dependent conditions to a data flow graph with conditional expressions
US5475843A (en) * 1992-11-02 1995-12-12 Borland International, Inc. System and methods for improved program testing
US5640503A (en) * 1993-06-24 1997-06-17 International Business Machines Corporation Method and apparatus for verifying a target instruction before execution of the target instruction using a test operation instruction which identifies the target instruction
US5905893A (en) * 1996-06-10 1999-05-18 Lsi Logic Corporation Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set
US6021275A (en) * 1996-08-05 2000-02-01 General Magic, Inc. Object code structure and method for translation of architecture independent program implementations
US5905895A (en) * 1997-03-07 1999-05-18 International Business Machines Corporation Method and system for optimizing non-native bytecodes before bytecode interpretation
US6463521B1 (en) * 1999-06-23 2002-10-08 Sun Microsystems, Inc. Opcode numbering for meta-data encoding

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060225045A1 (en) * 2005-03-31 2006-10-05 Gilad Bracha Supporting dynamically-typed languages in typed assembly languages
US7574700B2 (en) * 2005-03-31 2009-08-11 Sun Microsystems, Inc. Supporting dynamically-typed languages in typed assembly languages

Also Published As

Publication number Publication date
EP1063585A3 (en) 2003-08-20
JP2001034483A (en) 2001-02-09
EP1063585A2 (en) 2000-12-27
US6463521B1 (en) 2002-10-08

Similar Documents

Publication Publication Date Title
US6463521B1 (en) Opcode numbering for meta-data encoding
US6687898B2 (en) Optimization of n-base typed arithmetic expressions
CN1134731C (en) Technology of reducing cost of primary examination to dynamic kinds in compiled codes
US6412109B1 (en) Method for optimizing java bytecodes in the presence of try-catch blocks
EP0905617B1 (en) Method for generating a java bytecode data flow graph
KR100624248B1 (en) Method and system for performing static initialization
JPH11296380A (en) Method and system for giving dynamic optimizing information in code analyzing run-time environment
US6345384B1 (en) Optimized program code generator, a method for compiling a source text and a computer-readable medium for a processor capable of operating with a plurality of instruction sets
US6412108B1 (en) Method and apparatus for speeding up java methods prior to a first execution
US7823139B2 (en) Method and system for translating programming languages
US20110246973A1 (en) Compiler supporting programs as data objects
US7124407B1 (en) Method and apparatus for caching native code in a virtual machine interpreter
US20040019770A1 (en) Optimization apparatus, compiler program, optimization method and recording medium
US9038039B2 (en) Apparatus and method for accelerating java translation
Hummel et al. Annotating the Java bytecodes in support of optimization
CN106033370B (en) Method and device for realizing 64-bit Java virtual machine
US6691307B2 (en) Interpreter optimization for native endianness
KR20010040742A (en) Method of executing an interpreter program
US20040015917A1 (en) System and method for range check elimination via iteration splitting in a dynamic compiler
US6978448B1 (en) Method and apparatus for rewriting bytecodes to minimize runtime checks
US6983361B1 (en) Apparatus and method for implementing switch instructions in an IA64 architecture
US7774767B2 (en) System and method for compiler interprocedural optimization having support for object files in libraries
JP2005501331A (en) Framework for generating Java macro instructions for instantiating Java objects
Gregg et al. The case for virtual register machines
Guyer et al. Optimizing high performance software libraries

Legal Events

Date Code Title Description
STCB Information on status: application discontinuation

Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION