// This file specializes the assembler with interpreter-specific macros
typedef ByteSize (*OffsetFunction)(uint);
class InterpreterMacroAssembler: public MacroAssembler { protected: // Interpreter specific version of call_VM_base using MacroAssembler::call_VM_leaf_base;
virtualvoid call_VM_leaf_base(address entry_point,
int number_of_arguments);
void pop_ptr(Register r = x10); void pop_i(Register r = x10); void pop_l(Register r = x10); void pop_f(FloatRegister r = f10); void pop_d(FloatRegister r = f10); void push_ptr(Register r = x10); void push_i(Register r = x10); void push_l(Register r = x10); void push_f(FloatRegister r = f10); void push_d(FloatRegister r = f10);
void pop(TosState state); // transition vtos -> state void push(TosState state); // transition state -> vtos
// Helpers for swap and dup void load_ptr(int n, Register val); void store_ptr(int n, Register val);
// Load float value from 'address'. The value is loaded onto the FPU register v0. void load_float(Address src); void load_double(Address src);
// Generate a subtype check: branch to ok_is_subtype if sub_klass is // a subtype of super_klass. void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
// Dispatching void dispatch_prolog(TosState state, int step = 0); void dispatch_epilog(TosState state, int step = 0); // dispatch via t0 void dispatch_only(TosState state, bool generate_poll = false, Register Rs = t0); // dispatch normal table via t0 (assume t0 is loaded already) void dispatch_only_normal(TosState state, Register Rs = t0); void dispatch_only_noverify(TosState state, Register Rs = t0); // load t0 from [xbcp + step] and dispatch via t0 void dispatch_next(TosState state, int step = 0, bool generate_poll = false); // load t0 from [xbcp] and dispatch via t0 and table void dispatch_via (TosState state, address* table);
// jump to an invoked target void prepare_to_jump_from_interpreted(); void jump_from_interpreted(Register method);
// Returning from interpreted functions // // Removes the current activation (incl. unlocking of monitors) // and sets up the return address. This code is also used for // exception unwindwing. In that case, we do not want to throw // IllegalMonitorStateExceptions, since that might get us into an // infinite rethrow exception loop. // Additionally this code is used for popFrame and earlyReturn. // In popFrame case we want to skip throwing an exception, // installing an exception, and notifying jvmdi. // In earlyReturn case we only want to skip throwing an exception // and installing an exception. void remove_activation(TosState state, bool throw_monitor_exception = true, bool install_monitor_exception = true, bool notify_jvmdi = true);
// FIXME: Give us a valid frame at a null check. virtualvoid null_check(Register reg, int offset = -1) {
MacroAssembler::null_check(reg, offset);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.