brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · 3280c5e Raw
145 lines · cpp
1//===----- ppc64.cpp - Generic JITLink ppc64 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 64-bit PowerPC objects.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/ExecutionEngine/JITLink/ppc64.h"14 15#define DEBUG_TYPE "jitlink"16 17namespace llvm::jitlink::ppc64 {18 19const char NullPointerContent[8] = {0x00, 0x00, 0x00, 0x00,20                                    0x00, 0x00, 0x00, 0x00};21 22const char PointerJumpStubContent_little[20] = {23    0x18,       0x00, 0x41,       (char)0xf8, // std r2, 24(r1)24    0x00,       0x00, (char)0x82, 0x3d,       // addis r12, r2, OffHa25    0x00,       0x00, (char)0x8c, (char)0xe9, // ld r12, OffLo(r12)26    (char)0xa6, 0x03, (char)0x89, 0x7d,       // mtctr r1227    0x20,       0x04, (char)0x80, 0x4e,       // bctr28};29 30const char PointerJumpStubContent_big[20] = {31    (char)0xf8, 0x41,       0x00, 0x18,       // std r2, 24(r1)32    0x3d,       (char)0x82, 0x00, 0x00,       // addis r12, r2, OffHa33    (char)0xe9, (char)0x8c, 0x00, 0x00,       // ld r12, OffLo(r12)34    0x7d,       (char)0x89, 0x03, (char)0xa6, // mtctr r1235    0x4e,       (char)0x80, 0x04, 0x20,       // bctr36};37 38// TODO: We can use prefixed instructions if LLJIT is running on power10.39const char PointerJumpStubNoTOCContent_little[32] = {40    (char)0xa6, 0x02,       (char)0x88, 0x7d,       // mflr 1241    0x05,       (char)0x00, (char)0x9f, 0x42,       // bcl 20,31,.+442    (char)0xa6, 0x02,       0x68,       0x7d,       // mflr 1143    (char)0xa6, 0x03,       (char)0x88, 0x7d,       // mtlr 1244    0x00,       0x00,       (char)0x8b, 0x3d,       // addis 12,11,OffHa45    0x00,       0x00,       (char)0x8c, (char)0xe9, // ld 12, OffLo(12)46    (char)0xa6, 0x03,       (char)0x89, 0x7d,       // mtctr 1247    0x20,       0x04,       (char)0x80, 0x4e,       // bctr48};49 50const char PointerJumpStubNoTOCContent_big[32] = {51    0x7d,       (char)0x88, 0x02, (char)0xa6, // mflr 1252    0x42,       (char)0x9f, 0x00, 0x05,       // bcl 20,31,.+453    0x7d,       0x68,       0x02, (char)0xa6, // mflr 1154    0x7d,       (char)0x88, 0x03, (char)0xa6, // mtlr 1255    0x3d,       (char)0x8b, 0x00, 0x00,       // addis 12,11,OffHa56    (char)0xe9, (char)0x8c, 0x00, 0x00,       // ld 12, OffLo(12)57    0x7d,       (char)0x89, 0x03, (char)0xa6, // mtctr 1258    0x4e,       (char)0x80, 0x04, 0x20,       // bctr59};60 61const char *getEdgeKindName(Edge::Kind K) {62  switch (K) {63  case Pointer64:64    return "Pointer64";65  case Pointer32:66    return "Pointer32";67  case Pointer16:68    return "Pointer16";69  case Pointer16DS:70    return "Pointer16DS";71  case Pointer16HA:72    return "Pointer16HA";73  case Pointer16HI:74    return "Pointer16HI";75  case Pointer16HIGH:76    return "Pointer16HIGH";77  case Pointer16HIGHA:78    return "Pointer16HIGHA";79  case Pointer16HIGHER:80    return "Pointer16HIGHER";81  case Pointer16HIGHERA:82    return "Pointer16HIGHERA";83  case Pointer16HIGHEST:84    return "Pointer16HIGHEST";85  case Pointer16HIGHESTA:86    return "Pointer16HIGHESTA";87  case Pointer16LO:88    return "Pointer16LO";89  case Pointer16LODS:90    return "Pointer16LODS";91  case Pointer14:92    return "Pointer14";93  case Delta64:94    return "Delta64";95  case Delta34:96    return "Delta34";97  case Delta32:98    return "Delta32";99  case NegDelta32:100    return "NegDelta32";101  case Delta16:102    return "Delta16";103  case Delta16HA:104    return "Delta16HA";105  case Delta16HI:106    return "Delta16HI";107  case Delta16LO:108    return "Delta16LO";109  case TOC:110    return "TOC";111  case TOCDelta16:112    return "TOCDelta16";113  case TOCDelta16DS:114    return "TOCDelta16DS";115  case TOCDelta16HA:116    return "TOCDelta16HA";117  case TOCDelta16HI:118    return "TOCDelta16HI";119  case TOCDelta16LO:120    return "TOCDelta16LO";121  case TOCDelta16LODS:122    return "TOCDelta16LODS";123  case RequestGOTAndTransformToDelta34:124    return "RequestGOTAndTransformToDelta34";125  case CallBranchDelta:126    return "CallBranchDelta";127  case CallBranchDeltaRestoreTOC:128    return "CallBranchDeltaRestoreTOC";129  case RequestCall:130    return "RequestCall";131  case RequestCallNoTOC:132    return "RequestCallNoTOC";133  case RequestTLSDescInGOTAndTransformToTOCDelta16HA:134    return "RequestTLSDescInGOTAndTransformToTOCDelta16HA";135  case RequestTLSDescInGOTAndTransformToTOCDelta16LO:136    return "RequestTLSDescInGOTAndTransformToTOCDelta16LO";137  case RequestTLSDescInGOTAndTransformToDelta34:138    return "RequestTLSDescInGOTAndTransformToDelta34";139  default:140    return getGenericEdgeKindName(K);141  }142}143 144} // end namespace llvm::jitlink::ppc64145