📄 icode.h
字号:
/* * icode.h * Define the instruction codes macros. * * Copyright (c) 1996, 1997 * Transvirtual Technologies, Inc. All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. */#ifndef __icode_h#define __icode_h#define move_long_const(t, c) (t)[0].v.tlong = (c)#define add_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong + (f2)[0].v.tlong#define sub_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong - (f2)[0].v.tlong#define mul_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong * (f2)[0].v.tlong#define div_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong / (f2)[0].v.tlong#if LONG_LONG_MODULO_BROKEN/* egcs 1.1.* on IRIX 6.3/mips produces an arithmetic exception for LONG_LONG_MIN % -1ll. Since anything % -1ll is 0, special-case it. */# define rem_long(t, f1, f2) (t)[0].v.tlong = (((f2)[0].v.tlong != -1) ? ((f1)[0].v.tlong % (f2)[0].v.tlong) : 0)#else# define rem_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong % (f2)[0].v.tlong#endif#define neg_long(t, f) (t)[0].v.tlong = -(f)[0].v.tlong#define and_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong & (f2)[0].v.tlong#define or_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong | (f2)[0].v.tlong#define xor_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong ^ (f2)[0].v.tlong#define lshl_long(t, f1, f2) (t)[0].v.tlong = ((f1)[0].v.tlong) << ((f2)[0].v.tint & 63)#define ashr_long(t, f1, f2) (t)[0].v.tlong = ((int64)(f1)[0].v.tlong) >> ((f2)[0].v.tint & 63)#define lshr_long(t, f1, f2) (t)[0].v.tlong = ((uint64)(f1)[0].v.tlong) >> ((f2)[0].v.tint & 63)#define lcmp(t, f1, f2) lcc = ((f2)[0].v.tlong) - ((f1)[0].v.tlong); \ (t)[0].v.tint = (lcc < 0 ? -1 : lcc > 0 ? 1 : 0)#define cvt_int_long(t, f) (t)[0].v.tlong = (f)[0].v.tint#define cvt_long_int(t, f) (t)[0].v.tint = (f)[0].v.tlong#define cvt_long_float(t, f) (t)[0].v.tfloat = (f)[0].v.tlong#define cvt_long_double(t, f) (t)[0].v.tdouble = (f)[0].v.tlong#define cvt_float_long(t, f) (t)[0].v.tlong = soft_cvtfl((f)[0].v.tfloat)#define cvt_double_long(t, f) (t)[0].v.tlong = soft_cvtdl((f)[0].v.tdouble)#define move_int_const(t, c) (t)[0].v.tint = (c)#define move_ref_const(t, c) (t)[0].v.taddr = (void*)(c)#define move_label_const(t, c) move_ref_const(t, c)#define move_string_const(t, c) move_ref_const(t, c)#define move_int(t, f) (t)[0].v.tint = (f)[0].v.tint#define move_ref(t, f) (t)[0].v.taddr = (f)[0].v.taddr#define move_any(t, f) move_long(t, f)#define swap_any(t1, t2) { \ tmp[0] = (t1)[0]; \ (t1)[0] = (t2)[0]; \ (t2)[0] = tmp[0]; \ }#define load_int(t, f) (t)[0].v.tint = *(jint*)((f)[0].v.taddr)#define load_ref(t, f) (t)[0].v.taddr = *(void**)((f)[0].v.taddr)#define load_byte(t, f) (t)[0].v.tint = *(jbyte*)((f)[0].v.taddr)#define load_char(t, f) (t)[0].v.tint = *(jchar*)((f)[0].v.taddr)#define store_int(t, f) *(jint*)((t)[0].v.taddr) = ((f)[0].v.tint)#define store_ref(t, f) *(void**)((t)[0].v.taddr) = ((f)[0].v.taddr)#define store_byte(t, f) *(jbyte*)((t)[0].v.taddr) = ((f)[0].v.tint)#define store_char(t, f) *(jchar*)((t)[0].v.taddr) = ((f)[0].v.tint)#define load_any(t, f) load_int(t, f)#define load_offset_any(t, f, o) load_offset_int(t, f, o)#define store_any(t, f) store_int(t, f)#define store_offset_any(t, f, o) store_offset_int(t, f, o)#define add_int_const(t, f, c) (t)[0].v.tint = ((f)[0].v.tint) + (c)#define add_ref_const(t, f, c) (t)[0].v.taddr = (void*)((uint8*)((f)[0].v.taddr) + (c))#define sub_int_const(t, f, c) (t)[0].v.tint = ((f)[0].v.tint) - (c)#define mul_int_const(t, f, c) (t)[0].v.tint = ((f)[0].v.tint) * (c)#define add_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) + ((f2)[0].v.tint)#define add_ref(t, f1, f2) (t)[0].v.taddr = (void*)((uint8*)((f1)[0].v.taddr) + ((f2)[0].v.tint))#define sub_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) - ((f2)[0].v.tint)#define mul_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) * ((f2)[0].v.tint)#if LONG_DIVISION_BROKEN/* LONG_MIN / -1l on i386 produces an arithmetic exception. Since anything / -1l is -anything, special-case it. */# define div_int(t, f1, f2) (t)[0].v.tint = ((((f2)[0].v.tint) != -1) ? (((f1)[0].v.tint) / ((f2)[0].v.tint)) : -((f1)[0].v.tint))#else# define div_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) / ((f2)[0].v.tint)#endif#if LONG_MODULO_BROKEN/* LONG_MIN % -1l on i386 produces an arithmetic exception. Since anything % -1l is 0, special-case it. */# define rem_int(t, f1, f2) (t)[0].v.tint = ((((f2)[0].v.tint) != -1) ? (((f1)[0].v.tint) % ((f2)[0].v.tint)) : 0)#else# define rem_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) % ((f2)[0].v.tint)#endif#define neg_int(t, f) (t)[0].v.tint = -((f)[0].v.tint)#define lshl_int_const(t, f, c) (t)[0].v.tint = ((f)[0].v.tint) << (c & 31)#define lshl_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) << ((f2)[0].v.tint & 31)#define ashr_int(t, f1, f2) (t)[0].v.tint = ((int32)(f1)[0].v.tint) >> ((f2)[0].v.tint & 31)#define lshr_int(t, f1, f2) (t)[0].v.tint = ((uint32)(f1)[0].v.tint) >> ((f2)[0].v.tint & 31)#define and_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) & ((f2)[0].v.tint)#define or_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) | ((f2)[0].v.tint)#define xor_int(t, f1, f2) (t)[0].v.tint = ((f1)[0].v.tint) ^ ((f2)[0].v.tint)#define cvt_int_byte(t, f) (t)[0].v.tint = (((f)[0].v.tint) << 24) >> 24#define cvt_int_char(t, f) (t)[0].v.tint = ((f)[0].v.tint) & 0xFFFF#define cvt_int_short(t, f) (t)[0].v.tint = (((f)[0].v.tint) << 16) >> 16#define branch_indirect(w) w#define branch_a(w) w#define cbranch_int_eq(s1, s2, w) if ((s1)[0].v.tint == (s2)[0].v.tint) w#define cbranch_int_ne(s1, s2, w) if ((s1)[0].v.tint != (s2)[0].v.tint) w#define cbranch_int_lt(s1, s2, w) if ((s1)[0].v.tint < (s2)[0].v.tint) w#define cbranch_int_le(s1, s2, w) if ((s1)[0].v.tint <= (s2)[0].v.tint) w#define cbranch_int_gt(s1, s2, w) if ((s1)[0].v.tint > (s2)[0].v.tint) w#define cbranch_int_ge(s1, s2, w) if ((s1)[0].v.tint >= (s2)[0].v.tint) w#define cbranch_int_ult(s1, s2, w) if ((unsigned int)(s1)[0].v.tint < (unsigned int)(s2)[0].v.tint) w#define cbranch_int_const_eq(s1, s2, w) if ((s1)[0].v.tint == (s2)) w#define cbranch_int_const_ne(s1, s2, w) if ((s1)[0].v.tint != (s2)) w#define cbranch_int_const_lt(s1, s2, w) if ((s1)[0].v.tint < (s2)) w#define cbranch_int_const_le(s1, s2, w) if ((s1)[0].v.tint <= (s2)) w#define cbranch_int_const_gt(s1, s2, w) if ((s1)[0].v.tint > (s2)) w#define cbranch_int_const_ge(s1, s2, w) if ((s1)[0].v.tint >= (s2)) w#define cbranch_int_const_ult(s1, s2, w) if ((unsigned int)(s1)[0].v.tint < (unsigned int)(s2)) w#define cbranch_ref_eq(s1, s2, w) if ((s1)[0].v.taddr == (s2)[0].v.taddr) w#define cbranch_ref_ne(s1, s2, w) if ((s1)[0].v.taddr != (s2)[0].v.taddr) w#define cbranch_ref_const_eq(s1, s2, w) if ((s1)[0].v.taddr == (void*)(s2)) w#define cbranch_ref_const_ne(s1, s2, w) if ((s1)[0].v.taddr != (void*)(s2)) w#define call(m) softcall_initialise_class(method_class()); \ virtualMachine((methods*)(m)[0].v.taddr, sp+1, retval, tid)#define call_indirect_method(m) softcall_initialise_class(method_class()); \ virtualMachine(m, sp+1, retval, tid)#define ret() goto end#define returnarg_int(s) retval[0].v.tint = (s)[0].v.tint#define returnarg_ref(s) retval[0].v.taddr = (s)[0].v.taddr#define returnarg_long(s) retval[0].v.tlong = (s)[0].v.tlong#define returnarg_float(s) retval[0].v.tfloat = (s)[0].v.tfloat#define returnarg_double(s) retval[0].v.tdouble = (s)[0].v.tdouble#define pusharg_int_const(c, i) /* Not needed for interpreter */#define pusharg_int(f, i) /* Not needed for interpreter */#define pusharg_ref(f, i) /* Not needed for interpreter */#define pusharg_ref_const(f, i) /* Not needed for interpreter */#define pusharg_any(f, i) /* Not needed for interpreter */#define pusharg_anylong(f, i) /* Not needed for interpreter */#define popargs() /* Not needed for interpreter */#define return_int(s) (s)[0].v.tint = retval[0].v.tint#define return_long(s) (s)[0].v.tlong = retval[0].v.tlong#define return_float(s) (s)[0].v.tfloat = retval[0].v.tfloat#define return_double(s) (s)[0].v.tdouble = retval[0].v.tdouble#define return_ref(s) (s)[0].v.taddr = retval[0].v.taddr#define monitor_enter() /* Not needed for interpreter */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -