Path: blob/main/contrib/llvm-project/llvm/lib/ExecutionEngine/JITLink/ppc64.cpp
35271 views
//===----- ppc64.cpp - Generic JITLink ppc64 edge kinds, utilities ------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// Generic utilities for graphs representing 64-bit PowerPC objects.9//10//===----------------------------------------------------------------------===//1112#include "llvm/ExecutionEngine/JITLink/ppc64.h"1314#define DEBUG_TYPE "jitlink"1516namespace llvm::jitlink::ppc64 {1718const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00,190x00, 0x00, 0x00, 0x00};2021const char PointerJumpStubContent_little[20] = {220x18, 0x00, 0x41, (char)0xf8, // std r2, 24(r1)230x00, 0x00, (char)0x82, 0x3d, // addis r12, r2, OffHa240x00, 0x00, (char)0x8c, (char)0xe9, // ld r12, OffLo(r12)25(char)0xa6, 0x03, (char)0x89, 0x7d, // mtctr r12260x20, 0x04, (char)0x80, 0x4e, // bctr27};2829const char PointerJumpStubContent_big[20] = {30(char)0xf8, 0x41, 0x00, 0x18, // std r2, 24(r1)310x3d, (char)0x82, 0x00, 0x00, // addis r12, r2, OffHa32(char)0xe9, (char)0x8c, 0x00, 0x00, // ld r12, OffLo(r12)330x7d, (char)0x89, 0x03, (char)0xa6, // mtctr r12340x4e, (char)0x80, 0x04, 0x20, // bctr35};3637// TODO: We can use prefixed instructions if LLJIT is running on power10.38const char PointerJumpStubNoTOCContent_little[32] = {39(char)0xa6, 0x02, (char)0x88, 0x7d, // mflr 12400x05, (char)0x00, (char)0x9f, 0x42, // bcl 20,31,.+441(char)0xa6, 0x02, 0x68, 0x7d, // mflr 1142(char)0xa6, 0x03, (char)0x88, 0x7d, // mtlr 12430x00, 0x00, (char)0x8b, 0x3d, // addis 12,11,OffHa440x00, 0x00, (char)0x8c, (char)0xe9, // ld 12, OffLo(12)45(char)0xa6, 0x03, (char)0x89, 0x7d, // mtctr 12460x20, 0x04, (char)0x80, 0x4e, // bctr47};4849const char PointerJumpStubNoTOCContent_big[32] = {500x7d, (char)0x88, 0x02, (char)0xa6, // mflr 12510x42, (char)0x9f, 0x00, 0x05, // bcl 20,31,.+4520x7d, 0x68, 0x02, (char)0xa6, // mflr 11530x7d, (char)0x88, 0x03, (char)0xa6, // mtlr 12540x3d, (char)0x8b, 0x00, 0x00, // addis 12,11,OffHa55(char)0xe9, (char)0x8c, 0x00, 0x00, // ld 12, OffLo(12)560x7d, (char)0x89, 0x03, (char)0xa6, // mtctr 12570x4e, (char)0x80, 0x04, 0x20, // bctr58};5960const char *getEdgeKindName(Edge::Kind K) {61switch (K) {62case Pointer64:63return "Pointer64";64case Pointer32:65return "Pointer32";66case Pointer16:67return "Pointer16";68case Pointer16DS:69return "Pointer16DS";70case Pointer16HA:71return "Pointer16HA";72case Pointer16HI:73return "Pointer16HI";74case Pointer16HIGH:75return "Pointer16HIGH";76case Pointer16HIGHA:77return "Pointer16HIGHA";78case Pointer16HIGHER:79return "Pointer16HIGHER";80case Pointer16HIGHERA:81return "Pointer16HIGHERA";82case Pointer16HIGHEST:83return "Pointer16HIGHEST";84case Pointer16HIGHESTA:85return "Pointer16HIGHESTA";86case Pointer16LO:87return "Pointer16LO";88case Pointer16LODS:89return "Pointer16LODS";90case Pointer14:91return "Pointer14";92case Delta64:93return "Delta64";94case Delta34:95return "Delta34";96case Delta32:97return "Delta32";98case NegDelta32:99return "NegDelta32";100case Delta16:101return "Delta16";102case Delta16HA:103return "Delta16HA";104case Delta16HI:105return "Delta16HI";106case Delta16LO:107return "Delta16LO";108case TOC:109return "TOC";110case TOCDelta16:111return "TOCDelta16";112case TOCDelta16DS:113return "TOCDelta16DS";114case TOCDelta16HA:115return "TOCDelta16HA";116case TOCDelta16HI:117return "TOCDelta16HI";118case TOCDelta16LO:119return "TOCDelta16LO";120case TOCDelta16LODS:121return "TOCDelta16LODS";122case RequestGOTAndTransformToDelta34:123return "RequestGOTAndTransformToDelta34";124case CallBranchDelta:125return "CallBranchDelta";126case CallBranchDeltaRestoreTOC:127return "CallBranchDeltaRestoreTOC";128case RequestCall:129return "RequestCall";130case RequestCallNoTOC:131return "RequestCallNoTOC";132case RequestTLSDescInGOTAndTransformToTOCDelta16HA:133return "RequestTLSDescInGOTAndTransformToTOCDelta16HA";134case RequestTLSDescInGOTAndTransformToTOCDelta16LO:135return "RequestTLSDescInGOTAndTransformToTOCDelta16LO";136case RequestTLSDescInGOTAndTransformToDelta34:137return "RequestTLSDescInGOTAndTransformToDelta34";138default:139return getGenericEdgeKindName(static_cast<Edge::Kind>(K));140}141}142143} // end namespace llvm::jitlink::ppc64144145146