/*
* Copyright 2008, 2009 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#include "ci/ciMethod.hpp"
#include "code/debugInfoRec.hpp"
#include "shark/sharkBuilder.hpp"
#include "shark/sharkFunction.hpp"
#include "shark/sharkStateScanner.hpp"
// Class hierarchy:
// - SharkStateScanner
// - SharkCacherDecacher
// - SharkDecacher
// - SharkJavaCallDecacher
// - SharkVMCallDecacher
// - SharkTrapDecacher
// - SharkCacher
// - SharkJavaCallCacher
// - SharkVMCallCacher
// - SharkFunctionEntryCacher
// - SharkNormalEntryCacher
// - SharkOSREntryCacher
protected:
: SharkStateScanner(function) {}
// Helper
protected:
if (value->is_two_word())
offset--;
return offset;
}
};
protected:
private:
int _bci;
protected:
int bci() const {
return _bci;
}
private:
int _pc_offset;
private:
int pc_offset() const {
return _pc_offset;
}
return _oopmap;
}
return _exparray;
}
return _monarray;
}
return _locarray;
}
// Callbacks
protected:
void start_frame();
void start_stack(int stack_depth);
void start_monitors(int num_monitors);
void process_pc_slot(int offset);
void start_locals();
void end_frame();
// oopmap and debuginfo helpers
private:
}
}
}
}
// low addresses this end
// Type 32-bit 64-bit
// ----------------------------------------------------
// stack[0] local[3] jobject oop oop
// stack[1] local[2] NULL normal lng
// stack[2] local[1] jlong normal invalid
// stack[3] local[0] jint normal normal
//
// high addresses this end
if (value) {
if (value->is_jobject())
#ifdef _LP64
if (value->is_two_word())
#endif // _LP64
}
else {
if (maybe_two_word) {
#ifdef _LP64
if (value->is_jdouble())
#else
#endif // _LP64
}
}
}
}
// Stack slot helpers
protected:
}
// Local slot helpers
protected:
}
// Writer helper
protected:
int offset);
};
public:
private:
protected:
return _callee;
}
// Stack slot helpers
protected:
}
}
}
// Local slot helpers
protected:
}
}
return true;
}
};
public:
// Stack slot helpers
protected:
}
}
return true;
}
// Local slot helpers
protected:
}
}
return true;
}
};
public:
// Stack slot helpers
protected:
}
}
return true;
}
// Local slot helpers
protected:
}
}
return true;
}
};
protected:
: SharkCacherDecacher(function) {}
// Callbacks
protected:
// Stack slot helper
protected:
// Local slot helper
protected:
}
// Writer helper
protected:
};
public:
private:
protected:
return _callee;
}
// Stack slot helper
protected:
value->is_jobject());
}
};
public:
: SharkCacher(function) {}
// Stack slot helper
protected:
}
};
public:
private:
private:
return _method;
}
// Method slot callback
protected:
// Stack slot helper
protected:
ShouldNotReachHere(); // entry block shouldn't have stack
}
// Local slot helper
protected:
}
};
public:
};
public:
builder()->CreateBitCast(
SharkType::intptr_type(),
private:
private:
return _osr_buf;
}
// Callbacks
protected:
// Helper
private:
};
#endif // SHARE_VM_SHARK_SHARKCACHEDECACHE_HPP