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-exception 6 // 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 17 namespace llvm { 18 namespace jitlink { 19 namespace loongarch { 20 21 const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00, 22 0x00, 0x00, 0x00, 0x00}; 23 24 const 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 $t8 28 }; 29 30 const 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 $t8 34 }; 35 36 const 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(Branch26PCRel) 48 KIND_NAME_CASE(Page20) 49 KIND_NAME_CASE(PageOffset12) 50 KIND_NAME_CASE(RequestGOTAndTransformToPage20) 51 KIND_NAME_CASE(RequestGOTAndTransformToPageOffset12) 52 default: 53 return getGenericEdgeKindName(K); 54 } 55 #undef KIND_NAME_CASE 56 } 57 58 } // namespace loongarch 59 } // namespace jitlink 60 } // namespace llvm 61