Index: working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.cpp =================================================================== --- working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.cpp (revision 647500) +++ working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.cpp (working copy) @@ -584,6 +584,33 @@ cfg.orderNodes(true); } +// public final native boolean getBoolean(Object o, long fieldID); +void +OAH_Misc_Accessors_ObjectAccessor_GET_Handler::run() { + IRManager* irm = builder->getIRManager(); + InstFactory& instFactory = builder->getInstFactory(); + ControlFlowGraph& cfg = builder->getControlFlowGraph(); + + Node* firstNode = callInst->getNode(); + callInst->unlink(); + + builder->setCurrentBCOffset(callInst->getBCOffset()); + builder->setCurrentNode(firstNode); + + // the fist two are tau operands + Opnd* dst = callInst->getDst(); + Opnd* trgtObj = callInst->getSrc(2); + Opnd* trgtFID = callInst->getSrc(3); + + FieldDesc* fid = irm->getCompilationInterface().getFieldDesc(trgtFID); + Opnd *tauThisInRange = builder->genTauHasType(thi, fid->getParentType()); + Opnd *tauThisNullChecked = builder->genTauCheckNull(trgtObj); + Opnd* trgtValue = builder->genLdField(fid, trgtObj, tauTrgtNullChecked, tauTrgtInRange); + + builder->appendInst(instFactory.makeCopy(dst, trgtValue)); +} + + Node* HLOAPIMagicIRBuilder::genNodeAfter(Node* srcNode, LabelInst* label, Node* dispatch) { currentNode = cfg.createBlockNode(label); Index: working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.h =================================================================== --- working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.h (revision 647500) +++ working_vm/vm/jitrino/src/optimizer/HLOAPIMagics.h (working copy) @@ -128,6 +128,7 @@ DECLARE_HLO_MAGIC_INLINER(String_compareTo_HLO_Handler); DECLARE_HLO_MAGIC_INLINER(String_regionMatches_HLO_Handler); DECLARE_HLO_MAGIC_INLINER(String_indexOf_HLO_Handler); +DECLARE_HLO_MAGIC_INLINER(OAH_Misc_Accessors_ObjectAccessor_GET_Handler); DEFINE_SESSION_ACTION(HLOAPIMagicSession, hlo_api_magic, "APIMagics HLO Pass") @@ -172,6 +173,11 @@ handlers.push_back(new (mm) String_indexOf_HLO_Handler(callInst)); } } + if (!strcmp(className, "org/apache/harmony/misc/accessors/ObjectAccessor")) { + if (!strcmp(methodName, "getBoolean")) { + handlers.push_back(new (mm) OAH_Misc_Accessors_ObjectAccessor_GET_Handler(callInst)); + } + } } } }