| //===--- 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 |