📄 main.h
字号:
* memory (e.g., ROM). This option does not work on the Palm, because * we want to save memory and store bytecodes in storage/static memory. */#ifndef ENABLEFASTBYTECODES#define ENABLEFASTBYTECODES 1#endif/* This option can be used for turning on/off constant pool integrity * checking. When turned on, the system checks that the given constant * pool references point to appropriate constant pool entries at * runtime, thus verifying the structural integrity of the class. * As obvious, the system runs slightly faster with the integrity * checking turned off. This check is not required by the JVM * spec, but provides some additional assurance that the VM is * behaving properly and that classfiles don't contain illegal code. */#ifndef VERIFYCONSTANTPOOLINTEGRITY#define VERIFYCONSTANTPOOLINTEGRITY 1#endif/* This macro makes the virtual machine sleep when it has * no better things to do. The default implementation is * a busy loop. Most ports usually require a more efficient * implementation that allow the VM to utilize the host- * specific battery power conservation features. * */#ifndef SLEEP_UNTIL# define SLEEP_UNTIL(wakeupTime) \ for (;;) { \ ulong64 now = CurrentTime_md(); \ if (ll_compare_ge(now, wakeupTime)) { \ break; \ } \ }#endif/*========================================================================= * KVM 1.0.2 interpreter execution options (redesigned interpreter) *=======================================================================*//* Enabling this option will cause the interpreter to permit * thread rescheduling only at branch and return statements. * Disabling the options allows thread rescheduling to occur * at the start of every bytecode (as in KVM 1.0). Turning * this option on will speed up the interpreter by about 5% * (simply because the time slice counter will be updated * less frequently.) */#ifndef RESCHEDULEATBRANCH#define RESCHEDULEATBRANCH 1 #endif/* The time slice factor is used to calculate the base time slice and to * set up a timeslice when a thread has its priority changed. This * value determines how much execution time each thread receives * before a thread switch occurs. Default value 1000 is used when * the RESCHEDULEATBRANCH option is on (meaning that the VM will * switch threads when 1000 branch instructions have been executed.) * If RESCHEDULEATBRANCH option is off, we use value 10000 (meaning * that thread switch occurs after this many bytecodes have been * executed.) */#ifndef TIMESLICEFACTOR#if RESCHEDULEATBRANCH#define TIMESLICEFACTOR 1000#else#define TIMESLICEFACTOR 10000#endif#endif/* The value of this macro determines the basic frequency (as a number * of bytecodes executed) by which the virtual machine performs thread * switching, event notification, and some other periodically needed * operations. A smaller number reduces event handling and thread * switching latency, but causes the interpreter to run slower. */#ifndef BASETIMESLICE#define BASETIMESLICE TIMESLICEFACTOR#endif/* This option will cause the infrequently called Java bytecodes to be * split into a separate interpreter loop. It has been found that * doing so gives a small space and performance benefit on many systems. * * IMPORTANT: This option works well only if ENABLEFASTBYTECODES * option is also turned on. For this reason, we currently * should not use this option on the Palm. */#ifndef SPLITINFREQUENTBYTECODES#define SPLITINFREQUENTBYTECODES 1#endif/* This option when enabled will cause the main switch() statement in the * interpreter loop to be padded with entries for unused bytecodes. It has * been found that doing so on some systems will cause the code for the * switch table to be larger, but the resulting code runs substantially * faster. Use this option only when space is not absolutely critical. */#ifndef PADTABLE#define PADTABLE 0#endif/* Turning this option on will allow the VM to allocate all the * virtual machine registers (ip, fp, sp, lp and cp) in native * registers inside the Interpret() routine. Enabling this feature * significantly speeds up the interpreter (actual performance * improvement depends on how good a job your C compiler does * when compiling the interpreter loop.) This option is specific * to KVM 1.0.2. When turned off, the interpreter speed is about * the same as in KVM 1.0. */#ifndef LOCALVMREGISTERS#define LOCALVMREGISTERS 1#endif/* The following definitions determine which virtual machine registers * should be made local to the main interpreter loop. These macros * allow you to more precisely control the allocation of these VM * registers to hardware registers, yet in a portable fashion. This * is valuable especially on those target platforms that have a * limited number of hardware registers. Note that these macros * have effect only if the LOCALVMREGISTERS option above is turned on. * * The macros below are defined in the order of "most-to-least * bang-for-the-buck". In order to improve Java interpreter * performance, IP and SP are most critical, then LP, FP and CP. *//* IP = Instruction Pointer */#ifndef IPISLOCAL#define IPISLOCAL 1#endif/* SP = Stack Pointer */#ifndef SPISLOCAL#define SPISLOCAL 1#endif/* LP = Locals Pointer */#ifndef LPISLOCAL#define LPISLOCAL 0#endif/* FP = Frame Pointer */#ifndef FPISLOCAL#define FPISLOCAL 0#endif/* CP = Constant Pool Pointer */#ifndef CPISLOCAL#define CPISLOCAL 0#endif/*========================================================================= * Java-level debugging options *=======================================================================*//* KVM includes an interface that allows the virtual machine * to be plugged into a third-party source-level Java debugger * such as Forte, CodeWarrior or JBuilder. * * The macros below are related to the use of the new * Java-level debugger. Actual debugger code is located * in directory VmExtra. *//* Include code that interacts with an external Java debugger. */#ifndef ENABLE_JAVA_DEBUGGER#define ENABLE_JAVA_DEBUGGER 0#endif/*========================================================================= * Debugging and tracing options *=======================================================================*//* The macros below enable/disable the debugging of the KVM itself * (at the C code level). These macros, inherited from KVM 1.0, * are independent of the Java-level debugging macros defined above. *//* Includes/eliminates a large amount of optional debugging code * (such as class and stack frame printing operations) in/from * the system. By eliminating debug code, the system will be smaller. * Inclusion of debugging code increases the size of the system but * does not introduce any performance overhead unless calls to the * debugging routines are added to the source code or various tracing * options are turned on. This option is normally turned off in * production builds. */#ifndef INCLUDEDEBUGCODE#define INCLUDEDEBUGCODE 0#endif/* Turns VM execution profiling and additional safety/sanity * checks on/off. VM will run slightly slower with this option on. * This option should normally be turned off in production builds. */#ifndef ENABLEPROFILING#define ENABLEPROFILING 0#endif/*========================================================================= * Compile-time flags for choosing different tracing/debugging options. * These options can make the system very verbose. Turn them all off * for normal VM operation. When turning them on, it is useful to * turn INCLUDEDEBUGCODE on, too, since many of the routines utilize * debugging code to provide more detailed information to the user. *=======================================================================*//* Prints out less verbose messages on small machines */#ifndef TERSE_MESSAGES#define TERSE_MESSAGES 0#endif/* Turns exception handling backtrace information on/off */#ifndef PRINT_BACKTRACE#define PRINT_BACKTRACE INCLUDEDEBUGCODE#endif/*========================================================================= * Miscellaneous macros and options *=======================================================================*//* Some functions in the reference implementation take arguments * that they do not use. Some compilers will issue warnings; others * do not. For those compilers that issue warnings, this macro * can be used to indicate that the corresponding variable, * though and argument to the function, isn't actually used. */#ifndef UNUSEDPARAMETER#define UNUSEDPARAMETER(x)#endif/* Some ROMized implementations may want to forbid any new classes * from being loaded into any system package. The following macro * defines whether a package name is one of these restricted packages. * By default, we prevent dynamic class loading to java.* and javax.*. */#ifndef IS_RESTRICTED_PACKAGE_NAME#define IS_RESTRICTED_PACKAGE_NAME(name) \ ((strncmp(name, "java/", 5) == 0) || (strncmp(name, "javax/", 6) == 0)) #endif/*========================================================================= * VM startup function prototypes *=======================================================================*/int main1 (int argc, char* argv[]);int StartJVM(int argc, char* argv[]);int KVM_Initialize(void);int KVM_Start(int argc, char* argv[]);void KVM_Cleanup(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -