//===--- loongarch.cpp - Generic JITLink loongarch edge kinds, utilities --===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Generic utilities for graphs representing loongarch objects. // //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/JITLink/loongarch.h" #define DEBUG_TYPE "jitlink" namespace llvm { namespace jitlink { namespace loongarch { const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; const uint8_t LA64StubContent[StubEntrySize] = { 0x14, 0x00, 0x00, 0x1a, // pcalau12i $t8, %page20(imm) 0x94, 0x02, 0xc0, 0x28, // ld.d $t8, $t8, %pageoff12(imm) 0x80, 0x02, 0x00, 0x4c // jr $t8 }; const uint8_t LA32StubContent[StubEntrySize] = { 0x14, 0x00, 0x00, 0x1a, // pcalau12i $t8, %page20(imm) 0x94, 0x02, 0x80, 0x28, // ld.w $t8, $t8, %pageoff12(imm) 0x80, 0x02, 0x00, 0x4c // jr $t8 }; const char *getEdgeKindName(Edge::Kind K) { #define KIND_NAME_CASE(K) \ case K: \ return #K; switch (K) { KIND_NAME_CASE(Pointer64) KIND_NAME_CASE(Pointer32) KIND_NAME_CASE(Delta32) KIND_NAME_CASE(NegDelta32) KIND_NAME_CASE(Delta64) KIND_NAME_CASE(Branch26PCRel) KIND_NAME_CASE(Page20) KIND_NAME_CASE(PageOffset12) KIND_NAME_CASE(RequestGOTAndTransformToPage20) KIND_NAME_CASE(RequestGOTAndTransformToPageOffset12) default: return getGenericEdgeKindName(K); } #undef KIND_NAME_CASE } } // namespace loongarch } // namespace jitlink } // namespace llvm