Path: blob/master/runtime/compiler/arm/codegen/ARMRecompilationSnippet.cpp
6004 views
/*******************************************************************************1* Copyright (c) 2000, 2020 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "arm/codegen/ARMRecompilationSnippet.hpp"2324#include <stdint.h>25#include "arm/codegen/ARMRecompilation.hpp"26#include "codegen/CodeGenerator.hpp"27#include "env/CompilerEnv.hpp"28#include "env/jittypes.h"29#include "il/LabelSymbol.hpp"30#include "il/MethodSymbol.hpp"31#include "il/RegisterMappedSymbol.hpp"32#include "il/ResolvedMethodSymbol.hpp"33#include "il/StaticSymbol.hpp"34#include "il/Symbol.hpp"3536uint8_t *TR::ARMRecompilationSnippet::emitSnippetBody()37{38/*39Snippet will look like:40bl TR_ARMcountingRecompileMethod41dd jittedBodyInfo42dd code start location43*/4445uint8_t *buffer = cg()->getBinaryBufferCursor();46TR::SymbolReference *countingRecompMethodSymRef = cg()->symRefTab()->findOrCreateRuntimeHelper(TR_ARMcountingRecompileMethod);4748getSnippetLabel()->setCodeLocation(buffer);4950*(int32_t *)buffer = encodeHelperBranchAndLink(countingRecompMethodSymRef, buffer, getNode(), cg()); // BL resolve51buffer += 4;5253*(int32_t *)buffer = (int32_t)(intptr_t)cg()->comp()->getRecompilationInfo()->getJittedBodyInfo();54buffer += 4;5556*(int32_t *)buffer = ((int32_t)(intptr_t)cg()->getCodeStart());57buffer += 4;5859return buffer;60}6162uint32_t TR::ARMRecompilationSnippet::getLength(int32_t estimatedSnippetStart)63{64return 12;65}666768