Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ravem.h
00001 /* 00002 * RAVEM.h 00003 * 00004 * Created on: 2013/07/18 00005 * Author: lynxeyed 00006 */ 00007 00008 #ifndef RAVEM_H_ 00009 #define RAVEM_H_ 00010 00011 //#include "type.h" 00012 #include "pool.h" 00013 #include "device_depend.h" 00014 #include <stdlib.h> 00015 00016 // constant_pool 00017 //#define Constant_Type Value length (in bytes) 00018 #define CONSTANT_Class 7 // 3 00019 #define CONSTANT_Fieldref 9 // 5 00020 #define CONSTANT_Methodref 10 // 5 00021 #define CONSTANT_InterfaceMethodref 11 // 5 00022 #define CONSTANT_String 8 // 3 00023 #define CONSTANT_Integer 3 // 5 00024 #define CONSTANT_Float 4 // 5 00025 #define CONSTANT_Long 5 // 9 00026 #define CONSTANT_Double 6 // 9 00027 #define CONSTANT_NameAndType 12 // 5 00028 #define CONSTANT_Utf8 1 // 4 or more (see 'length') 00029 #define CONSTANT_MethodHandle 15 // 5 00030 #define CONSTANT_MethodType 16 // 3 00031 #define CONSTANT_InvokeDynamic 18 // 3 00032 00033 //stack type 00034 #define Stack_Nothing 0 00035 #define Stack_CharType 1 00036 #define Stack_IntType 2 00037 #define Stack_DoubleType 3 00038 #define Stack_ConstantPool 4 00039 00040 //Thread State and Command 00041 #define Thread_returned 0 00042 #define Thread_Active 1 00043 #define Thread_getStartMethod 2 00044 #define Thread_getInitMethod 3 00045 #define Thread_getInitMethodWithStack 4 00046 #define Thread_init 5 00047 #define Thread_initIsDone 6 00048 #define Thread_inSleep 7 00049 00050 // instruction code mnemonic code number of arguments(in bytes) 00051 #define JAVA_nop 0x00 // 0 00052 #define JAVA_iconst_0 0x03 // 0 00053 #define JAVA_iconst_1 0x04 // 0 00054 #define JAVA_iconst_2 0x05 // 0 00055 #define JAVA_iconst_3 0x06 // 0 00056 #define JAVA_iconst_4 0x07 // 0 00057 #define JAVA_iconst_5 0x08 // 0 00058 #define JAVA_bipush 0x10 // 1 00059 #define JAVA_sipush 0x11 // 2 00060 #define JAVA_ldc 0x12 // 1 00061 //#define JAVA_ldc_w 0x13 // xxx 00062 #define JAVA_ldc2_w 0x14 // 2 00063 //#define JAVA_iload 0x15 00064 00065 #define JAVA_aload 0x19 // 1 00066 00067 #define JAVA_iload_0 0x1A // 0 00068 #define JAVA_iload_1 0x1B // 0 00069 #define JAVA_iload_2 0x1C // 0 00070 #define JAVA_iload_3 0x1D // 0 00071 00072 #define JAVA_aload_0 0x2a // 0 00073 #define JAVA_aload_1 0x2b // 0 00074 #define JAVA_aload_2 0x2c // 0 00075 #define JAVA_aload_3 0x2d // 0 00076 00077 #define JAVA_astore 0x3A // 1 00078 00079 #define JAVA_istore_0 0x3B // 0 00080 #define JAVA_istore_1 0x3C // 0 00081 #define JAVA_istore_2 0x3D // 0 00082 #define JAVA_istore_3 0x3E // 0 00083 00084 #define JAVA_astore_0 0x4b // 0 00085 #define JAVA_astore_1 0x4c // 0 00086 #define JAVA_astore_2 0x4d // 0 00087 #define JAVA_astore_3 0x4e // 0 00088 00089 #define JAVA_dup 0x59 // 0 00090 00091 #define JAVA_iadd 0x60 // 0 00092 00093 #define JAVA_iinc 0x84 // 2 00094 #define JAVA_i2l 0x85 // 0 00095 #define JAVA_i2c 0x92 // 0 00096 00097 #define JAVA_if_icmplt 0xa1 // 2 00098 #define JAVA_if_icmpge 0xa2 // 2 00099 #define JAVA_if_icmpgt 0xa3 // 2 00100 #define JAVA_if_icmple 0xa4 // 2 00101 00102 #define JAVA_goto 0xa7 // 2 00103 #define JAVA_return 0xb1 // 0 00104 #define JAVA_getstatic 0xb2 // 2 00105 #define JAVA_getfield 0xb4 // 2 00106 #define JAVA_putfield 0xb5 // 2 00107 #define JAVA_invokevirtual 0xb6 // 2 00108 #define JAVA_invokespecial 0xb7 // 2 00109 #define JAVA_invokestatic 0xb8 // 2 00110 00111 #define JAVA_new 0xbb // 2 00112 00113 typedef struct { 00114 int tag; 00115 int index; 00116 int index2; 00117 int bc_num; //pointer of bytecode 00118 void* stack_pt; // stack pointer (int,long,float,double,string) 00119 } const_pool_t; 00120 00121 00122 typedef struct { 00123 int bc_offset; // offset of bytecode (this class starts here = bc_array[bc_offset]) 00124 int code_offset; // offset of code (Now we translate here from bc_offset = bc_array[bc_offset+code_offset] ) 00125 int code_length; // length of code 00126 int stack_num; // number of stacks 00127 int local_num; // number of local registers 00128 int field_num; // number of field length 00129 int myThreadNum; // Number of this thread(you must put #0 "main" method, and do not put #0 any other methods) 00130 int threadCommand; // 00131 int threadArg; 00132 00133 int *local_reg; // local registers(malloc here) 00134 int *op_stack; // operand stack(malloc here) numerics or CP num 00135 int *op_stack_type; // type of each stack,0:nothing 1:int,byte 2:long,float,double 3:See CP 00136 00137 int *field_mem_reg; // Field (getfield and putfield) 00138 int *field_mem_type; // Member variable type (Int or String) 00139 00140 } class_st; 00141 00142 extern int32_t methods_count; 00143 00144 void bc_init(void); 00145 char *bc_seek(int bc_num, int length); 00146 const_pool_t getConstantPoolInfo(int constant_num); 00147 const_pool_t seekConstClassNumString(int const_num); 00148 const_pool_t seekClassIndex(int const_num); 00149 const_pool_t seekNameAndType_name(int const_num); 00150 const_pool_t seekNameAndType_desc(int const_num); 00151 // 00152 int getIntegerFromOperandStack(class_st cl); 00153 char* getStringFromOperandStack(class_st cl); 00154 // 00155 class_st seekCodeArrtibute(class_st cl, char* method_name, int strlen); 00156 class_st setStackFromConstantPool(class_st cl, int cp_num); 00157 class_st setIntegerToStack(class_st cl, int num); 00158 // 00159 class_st getField(class_st cl, int cp_num); 00160 class_st putField(class_st cl, int cp_num); 00161 // 00162 class_st invokevirtual_callFunction(class_st cl, int cp_num); 00163 class_st invokestatic_callFunction(class_st cl, int cp_num); 00164 class_st invokespecial_callFunction(class_st cl, int cp_num); 00165 00166 class_st decodeVM(class_st cl); 00167 00168 #endif /* RAVEM_H_ */ 00169
Generated on Tue Jul 12 2022 21:16:03 by
1.7.2