mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
Added two new overloaded versions of BatchEmitOwnedPtrs and
BatchReadOwnedPtrs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44105 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c498b0281f
commit
38afd9e3ac
@ -230,6 +230,32 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs, T2*& P2,
|
||||
bool A1=true, bool A2=true) {
|
||||
|
||||
BatchIDVec.clear();
|
||||
|
||||
for (unsigned i = 0; i < NumT1Ptrs; ++i)
|
||||
BatchIDVec.push_back(ReadPtrID());
|
||||
|
||||
SerializedPtrID ID2 = ReadPtrID();
|
||||
|
||||
for (unsigned i = 0; i < NumT1Ptrs; ++i) {
|
||||
SerializedPtrID& PtrID = BatchIDVec[i];
|
||||
|
||||
T1* p = PtrID ? SerializeTrait<T1>::Create(*this) : NULL;
|
||||
|
||||
if (PtrID && A1)
|
||||
RegisterPtr(PtrID,p);
|
||||
|
||||
Ptrs[i] = p;
|
||||
}
|
||||
|
||||
P2 = (ID2) ? SerializeTrait<T2>::Create(*this) : NULL;
|
||||
if (ID2 && A2) RegisterPtr(ID2,P2);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs,
|
||||
T2*& P2, T3*& P3,
|
||||
|
@ -94,6 +94,20 @@ public:
|
||||
if (Ptrs[i]) SerializeTrait<T>::Emit(*this,*Ptrs[i]);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2>
|
||||
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs, T2* p2) {
|
||||
|
||||
for (unsigned i = 0; i < NumT1Ptrs; ++i)
|
||||
EmitPtr(Ptrs[i]);
|
||||
|
||||
EmitPtr(p2);
|
||||
|
||||
for (unsigned i = 0; i < NumT1Ptrs; ++i)
|
||||
if (Ptrs[i]) SerializeTrait<T1>::Emit(*this,*Ptrs[i]);
|
||||
|
||||
if (p2) SerializeTrait<T2>::Emit(*this,*p2);
|
||||
}
|
||||
|
||||
template <typename T1, typename T2, typename T3>
|
||||
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs,
|
||||
T2* p2, T3* p3) {
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
#include "llvm/Bitcode/Deserialize.h"
|
||||
|
||||
#define DEBUG_BACKPATCH
|
||||
|
||||
#ifdef DEBUG_BACKPATCH
|
||||
#include "llvm/Support/Streams.h"
|
||||
#endif
|
||||
@ -346,18 +348,24 @@ void Deserializer::ReadUIntPtr(uintptr_t& PtrRef,
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_BACKPATCH
|
||||
llvm::cerr << "ReadUintPtr: " << PtrId << "\n";
|
||||
#endif
|
||||
|
||||
MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
|
||||
|
||||
if (HasFinalPtr(E))
|
||||
if (HasFinalPtr(E)) {
|
||||
PtrRef = GetFinalPtr(E);
|
||||
|
||||
#ifdef DEBUG_BACKPATCH
|
||||
llvm::cerr << "ReadUintPtr: " << PtrId
|
||||
<< " <-- " << (void*) GetFinalPtr(E) << '\n';
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
assert (AllowBackpatch &&
|
||||
"Client forbids backpatching for this pointer.");
|
||||
|
||||
#ifdef DEBUG_BACKPATCH
|
||||
llvm::cerr << "ReadUintPtr: " << PtrId << " (NO PTR YET)\n";
|
||||
#endif
|
||||
|
||||
// Register backpatch. Check the freelist for a BPNode.
|
||||
BPNode* N;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user