Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4856 from knn-k/aarch64codegen1
AArch64: Add JIT header files
- Loading branch information
Showing
4 changed files
with
750 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2019, 2019 IBM Corp. and others | ||
* | ||
* This program and the accompanying materials are made available under | ||
* the terms of the Eclipse Public License 2.0 which accompanies this | ||
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* or the Apache License, Version 2.0 which accompanies this distribution and | ||
* is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
* | ||
* This Source Code may also be made available under the following | ||
* Secondary Licenses when the conditions for such availability set | ||
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU | ||
* General Public License, version 2 with the GNU Classpath | ||
* Exception [1] and GNU General Public License, version 2 with the | ||
* OpenJDK Assembly Exception [2]. | ||
* | ||
* [1] https://www.gnu.org/software/classpath/license.html | ||
* [2] http://openjdk.java.net/legal/assembly-exception.html | ||
* | ||
* 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-exception | ||
*******************************************************************************/ | ||
|
||
#ifndef ARM64AOTRELOCATION_INCL | ||
#define ARM64AOTRELOCATION_INCL | ||
|
||
#include <stdint.h> | ||
#include "codegen/Relocation.hpp" | ||
|
||
namespace TR { class CodeGenerator; } | ||
namespace TR { class Instruction; } | ||
|
||
namespace TR { | ||
|
||
class ARM64Relocation | ||
{ | ||
public: | ||
//TR_ALLOC(TR_Memory::ARM64Relocation) | ||
|
||
/** | ||
* @brief Constructor | ||
*/ | ||
ARM64Relocation(TR::Instruction *src, | ||
uint8_t *trg, | ||
TR_ExternalRelocationTargetKind k): | ||
_srcInstruction(src), _relTarget(trg), _kind(k) | ||
{} | ||
|
||
/** | ||
* @brief Answers source instruction | ||
* @return source instruction | ||
*/ | ||
TR::Instruction *getSourceInstruction() { return _srcInstruction; } | ||
/** | ||
* @brief Sets source instruction | ||
* @param[in] i : source instruction | ||
*/ | ||
void setSourceInstruction(TR::Instruction *i) { _srcInstruction = i; } | ||
|
||
/** | ||
* @brief Answers relocation target | ||
* @return relocation target | ||
*/ | ||
uint8_t *getRelocationTarget() { return _relTarget; } | ||
/** | ||
* @brief Sets relocation target | ||
* @param[in] t : relocation target | ||
*/ | ||
void setRelocationTarget(uint8_t *t) { _relTarget = t; } | ||
|
||
/** | ||
* @brief Answers relocation target kind | ||
* @return relocation target kind | ||
*/ | ||
TR_ExternalRelocationTargetKind getKind() { return _kind; } | ||
/** | ||
* @brief Sets relocation target kind | ||
* @param[in] k : relocation target kind | ||
*/ | ||
void setKind(TR_ExternalRelocationTargetKind k) { _kind = k; } | ||
|
||
/** | ||
* @brief Maps relocation | ||
* @param[in] cg : CodeGenerator | ||
*/ | ||
virtual void mapRelocation(TR::CodeGenerator *cg) = 0; | ||
|
||
private: | ||
TR::Instruction *_srcInstruction; | ||
uint8_t *_relTarget; | ||
TR_ExternalRelocationTargetKind _kind; | ||
}; | ||
|
||
} // TR | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2019, 2019 IBM Corp. and others | ||
* | ||
* This program and the accompanying materials are made available under | ||
* the terms of the Eclipse Public License 2.0 which accompanies this | ||
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* or the Apache License, Version 2.0 which accompanies this distribution and | ||
* is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
* | ||
* This Source Code may also be made available under the following | ||
* Secondary Licenses when the conditions for such availability set | ||
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU | ||
* General Public License, version 2 with the GNU Classpath | ||
* Exception [1] and GNU General Public License, version 2 with the | ||
* OpenJDK Assembly Exception [2]. | ||
* | ||
* [1] https://www.gnu.org/software/classpath/license.html | ||
* [2] http://openjdk.java.net/legal/assembly-exception.html | ||
* | ||
* 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-exception | ||
*******************************************************************************/ | ||
|
||
#ifndef TRJ9_INSTRUCTION_INCL | ||
#define TRJ9_INSTRUCTION_INCL | ||
|
||
#include "codegen/J9Instruction.hpp" | ||
#include "codegen/RegisterDependency.hpp" | ||
|
||
namespace TR | ||
{ | ||
class Instruction; | ||
|
||
class OMR_EXTENSIBLE Instruction : public J9::InstructionConnector | ||
{ | ||
public: | ||
|
||
/** | ||
* @brief Constructor | ||
* @param[in] op : opcode | ||
* @param[in] node : node | ||
* @param[in] precedingInstruction : preceding instruction | ||
* @param[in] cg : CodeGenerator | ||
*/ | ||
Instruction(TR::InstOpCode::Mnemonic op, TR::Node *node, TR::Instruction *precedingInstruction, | ||
TR::CodeGenerator *cg) | ||
: J9::InstructionConnector(cg, precedingInstruction, op, node) | ||
{ | ||
} | ||
|
||
/** | ||
* @brief Constructor | ||
* @param[in] op : opcode | ||
* @param[in] node : node | ||
* @param[in] cg : CodeGenerator | ||
*/ | ||
Instruction(TR::InstOpCode::Mnemonic op, TR::Node *node, TR::CodeGenerator *cg) | ||
: J9::InstructionConnector(cg, op, node) | ||
{ | ||
} | ||
|
||
/** | ||
* @brief Constructor | ||
* @param[in] op : opcode | ||
* @param[in] node : node | ||
* @param[in] cond : register dependency conditions | ||
* @param[in] precedingInstruction : preceding instruction | ||
* @param[in] cg : CodeGenerator | ||
*/ | ||
Instruction(TR::InstOpCode::Mnemonic op, TR::Node *node, TR::RegisterDependencyConditions *cond, | ||
TR::Instruction *precedingInstruction, TR::CodeGenerator *cg) | ||
: J9::InstructionConnector(cg, precedingInstruction, op, node) | ||
{ | ||
self()->setDependencyConditions(cond); | ||
if (cond) | ||
cond->incRegisterTotalUseCounts(cg); | ||
} | ||
|
||
/** | ||
* @brief Constructor | ||
* @param[in] op : opcode | ||
* @param[in] node : node | ||
* @param[in] cond : register dependency conditions | ||
* @param[in] cg : CodeGenerator | ||
*/ | ||
Instruction(TR::InstOpCode::Mnemonic op, TR::Node *node, TR::RegisterDependencyConditions *cond, | ||
TR::CodeGenerator *cg) | ||
: J9::InstructionConnector(cg, op, node) | ||
{ | ||
self()->setDependencyConditions(cond); | ||
if (cond) | ||
cond->incRegisterTotalUseCounts(cg); | ||
} | ||
|
||
}; | ||
|
||
} // TR | ||
|
||
#include "codegen/J9Instruction_inlines.hpp" | ||
|
||
/** | ||
* @brief Type cast for instruction cursor | ||
* @param[in] i : instruction cursor | ||
* @return instruction cursor | ||
*/ | ||
inline uint32_t *toARM64Cursor(uint8_t *i) { return (uint32_t *)i; } | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2019, 2019 IBM Corp. and others | ||
* | ||
* This program and the accompanying materials are made available under | ||
* the terms of the Eclipse Public License 2.0 which accompanies this | ||
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* or the Apache License, Version 2.0 which accompanies this distribution and | ||
* is available at https://www.apache.org/licenses/LICENSE-2.0. | ||
* | ||
* This Source Code may also be made available under the following | ||
* Secondary Licenses when the conditions for such availability set | ||
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU | ||
* General Public License, version 2 with the GNU Classpath | ||
* Exception [1] and GNU General Public License, version 2 with the | ||
* OpenJDK Assembly Exception [2]. | ||
* | ||
* [1] https://www.gnu.org/software/classpath/license.html | ||
* [2] http://openjdk.java.net/legal/assembly-exception.html | ||
* | ||
* 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-exception | ||
*******************************************************************************/ | ||
|
||
#ifndef J9_ARM64_AHEADOFTIMECOMPILE_INCL | ||
#define J9_ARM64_AHEADOFTIMECOMPILE_INCL | ||
|
||
#ifndef J9_AHEADOFTIMECOMPILE_CONNECTOR | ||
#define J9_AHEADOFTIMECOMPILE_CONNECTOR | ||
namespace J9 { namespace ARM64 { class AheadOfTimeCompile; } } | ||
namespace J9 { typedef J9::ARM64::AheadOfTimeCompile AheadOfTimeCompileConnector; } | ||
#endif // J9_AHEADOFTIMECOMPILE_CONNECTOR | ||
|
||
#include "compiler/codegen/J9AheadOfTimeCompile.hpp" | ||
|
||
#include "codegen/ARM64AOTRelocation.hpp" | ||
#include "il/SymbolReference.hpp" // @@ | ||
|
||
namespace TR { class CodeGenerator; } | ||
|
||
namespace J9 | ||
{ | ||
|
||
namespace ARM64 | ||
{ | ||
|
||
class OMR_EXTENSIBLE AheadOfTimeCompile : public J9::AheadOfTimeCompile | ||
{ | ||
public: | ||
|
||
/** | ||
* @brief Constructor | ||
*/ | ||
AheadOfTimeCompile(TR::CodeGenerator *cg); | ||
|
||
/** | ||
* @brief Processes relocations | ||
*/ | ||
virtual void processRelocations(); | ||
|
||
/** | ||
* @brief Initializes AOT relocation header | ||
* @param[in] relocation : relocation | ||
* @return instruction cursor | ||
*/ | ||
virtual uint8_t *initializeAOTRelocationHeader(TR::IteratedExternalRelocation *relocation); | ||
|
||
static bool classAddressUsesReloRecordInfo() { return true; } | ||
|
||
private: | ||
TR::CodeGenerator *_cg; | ||
static uint32_t _relocationTargetTypeToHeaderSizeMap[TR_NumExternalRelocationKinds]; | ||
}; | ||
|
||
} // ARM64 | ||
|
||
} // J9 | ||
|
||
#endif |
Oops, something went wrong.