77 lines · cpp
1//===--- loongarch.cpp - Generic JITLink loongarch edge kinds, utilities --===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Generic utilities for graphs representing loongarch objects.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/ExecutionEngine/JITLink/loongarch.h"14 15#define DEBUG_TYPE "jitlink"16 17namespace llvm {18namespace jitlink {19namespace loongarch {20 21const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00,22 0x00, 0x00, 0x00, 0x00};23 24const uint8_t LA64StubContent[StubEntrySize] = {25 0x14, 0x00, 0x00, 0x1a, // pcalau12i $t8, %page20(imm)26 0x94, 0x02, 0xc0, 0x28, // ld.d $t8, $t8, %pageoff12(imm)27 0x80, 0x02, 0x00, 0x4c // jr $t828};29 30const uint8_t LA32StubContent[StubEntrySize] = {31 0x14, 0x00, 0x00, 0x1a, // pcalau12i $t8, %page20(imm)32 0x94, 0x02, 0x80, 0x28, // ld.w $t8, $t8, %pageoff12(imm)33 0x80, 0x02, 0x00, 0x4c // jr $t834};35 36const char *getEdgeKindName(Edge::Kind K) {37#define KIND_NAME_CASE(K) \38 case K: \39 return #K;40 41 switch (K) {42 KIND_NAME_CASE(Pointer64)43 KIND_NAME_CASE(Pointer32)44 KIND_NAME_CASE(Delta32)45 KIND_NAME_CASE(NegDelta32)46 KIND_NAME_CASE(Delta64)47 KIND_NAME_CASE(Branch16PCRel)48 KIND_NAME_CASE(Branch21PCRel)49 KIND_NAME_CASE(Branch26PCRel)50 KIND_NAME_CASE(Page20)51 KIND_NAME_CASE(PageOffset12)52 KIND_NAME_CASE(RequestGOTAndTransformToPage20)53 KIND_NAME_CASE(RequestGOTAndTransformToPageOffset12)54 KIND_NAME_CASE(Call36PCRel)55 KIND_NAME_CASE(Add6)56 KIND_NAME_CASE(Add8)57 KIND_NAME_CASE(Add16)58 KIND_NAME_CASE(Add32)59 KIND_NAME_CASE(Add64)60 KIND_NAME_CASE(AddUleb128)61 KIND_NAME_CASE(Sub6)62 KIND_NAME_CASE(Sub8)63 KIND_NAME_CASE(Sub16)64 KIND_NAME_CASE(Sub32)65 KIND_NAME_CASE(Sub64)66 KIND_NAME_CASE(SubUleb128)67 KIND_NAME_CASE(AlignRelaxable)68 default:69 return getGenericEdgeKindName(K);70 }71#undef KIND_NAME_CASE72}73 74} // namespace loongarch75} // namespace jitlink76} // namespace llvm77