mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-23 01:24:30 +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:
@ -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>
|
template <typename T1, typename T2, typename T3>
|
||||||
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs,
|
void BatchReadOwnedPtrs(unsigned NumT1Ptrs, T1** Ptrs,
|
||||||
T2*& P2, T3*& P3,
|
T2*& P2, T3*& P3,
|
||||||
|
@ -94,6 +94,20 @@ public:
|
|||||||
if (Ptrs[i]) SerializeTrait<T>::Emit(*this,*Ptrs[i]);
|
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>
|
template <typename T1, typename T2, typename T3>
|
||||||
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs,
|
void BatchEmitOwnedPtrs(unsigned NumT1Ptrs, T1* const * Ptrs,
|
||||||
T2* p2, T3* p3) {
|
T2* p2, T3* p3) {
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include "llvm/Bitcode/Deserialize.h"
|
#include "llvm/Bitcode/Deserialize.h"
|
||||||
|
|
||||||
|
#define DEBUG_BACKPATCH
|
||||||
|
|
||||||
#ifdef DEBUG_BACKPATCH
|
#ifdef DEBUG_BACKPATCH
|
||||||
#include "llvm/Support/Streams.h"
|
#include "llvm/Support/Streams.h"
|
||||||
#endif
|
#endif
|
||||||
@ -346,18 +348,24 @@ void Deserializer::ReadUIntPtr(uintptr_t& PtrRef,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_BACKPATCH
|
|
||||||
llvm::cerr << "ReadUintPtr: " << PtrId << "\n";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
|
MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
|
||||||
|
|
||||||
if (HasFinalPtr(E))
|
if (HasFinalPtr(E)) {
|
||||||
PtrRef = GetFinalPtr(E);
|
PtrRef = GetFinalPtr(E);
|
||||||
|
|
||||||
|
#ifdef DEBUG_BACKPATCH
|
||||||
|
llvm::cerr << "ReadUintPtr: " << PtrId
|
||||||
|
<< " <-- " << (void*) GetFinalPtr(E) << '\n';
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
assert (AllowBackpatch &&
|
assert (AllowBackpatch &&
|
||||||
"Client forbids backpatching for this pointer.");
|
"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.
|
// Register backpatch. Check the freelist for a BPNode.
|
||||||
BPNode* N;
|
BPNode* N;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user