Skip to content

Commit

Permalink
Merge pull request #4856 from knn-k/aarch64codegen1
Browse files Browse the repository at this point in the history
AArch64: Add JIT header files
  • Loading branch information
0xdaryl committed Mar 6, 2019
2 parents 0f1c499 + f4bb32b commit a940e56
Show file tree
Hide file tree
Showing 4 changed files with 750 additions and 0 deletions.
95 changes: 95 additions & 0 deletions runtime/compiler/aarch64/codegen/ARM64AOTRelocation.hpp
@@ -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
107 changes: 107 additions & 0 deletions runtime/compiler/aarch64/codegen/Instruction.hpp
@@ -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
77 changes: 77 additions & 0 deletions runtime/compiler/aarch64/codegen/J9AheadOfTimeCompile.hpp
@@ -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

0 comments on commit a940e56

Please sign in to comment.