diff --git a/Utilities/BEType.h b/Utilities/BEType.h index 148b5a4e25..ee5989f100 100644 --- a/Utilities/BEType.h +++ b/Utilities/BEType.h @@ -306,17 +306,12 @@ public: m_data = se_t::func(value); } - static be_t MakeFromLE(const T value) + static be_t make(const T value) { T data = se_t::func(value); return (be_t&)data; } - static be_t MakeFromBE(const T value) - { - return (be_t&)value; - } - //template operator const T() const { @@ -335,7 +330,8 @@ public: template operator const be_t() const { - return _convert sizeof(T)) ? 1 : (sizeof(T1) < sizeof(T) ? 2 : 0))>::func(m_data); + return be_t::make(ToLE()); + //return _convert sizeof(T)) ? 1 : (sizeof(T1) < sizeof(T) ? 2 : 0))>::func(m_data); } template be_t& operator += (T1 right) { return *this = T(*this) + right; } @@ -401,17 +397,12 @@ public: return se_t::func(m_data); } - static be_t MakeFromLE(const T value) + static be_t make(const T value) { const T data = se_t::func(value); return (be_t&)data; } - static be_t MakeFromBE(const T value) - { - return (be_t&)value; - } - //template operator const T() const { @@ -421,21 +412,7 @@ public: template operator const be_t() const { - if (sizeof(T1) > sizeof(T) || std::is_floating_point::value || std::is_floating_point::value) - { - T1 res = se_t::func(ToLE()); - return (be_t&)res; - } - else if (sizeof(T1) < sizeof(T)) - { - T1 res = ToBE() >> ((sizeof(T) - sizeof(T1)) * 8); - return (be_t&)res; - } - else - { - T1 res = ToBE(); - return (be_t&)res; - } + return be_t::make(ToLE()); } template be_t operator & (const be_t& right) const { const T res = ToBE() & right.ToBE(); return (be_t&)res; } @@ -540,12 +517,6 @@ template struct _se, T1, value> : pub #define se32(x) _se::value #define se64(x) _se::value -template -__forceinline static const be_t to_be(const T value) -{ - return be_t::MakeFromLE(value); -} - template __forceinline static u8 Read8(T& f) { u8 ret; diff --git a/Utilities/GNU.h b/Utilities/GNU.h index 9b5d40ec6b..d4eb6cb103 100644 --- a/Utilities/GNU.h +++ b/Utilities/GNU.h @@ -45,7 +45,7 @@ void strcpy_trunc(char(&dst)[size], const char(&src)[rsize]) #define INFINITE 0xFFFFFFFF #define _CRT_ALIGN(x) __attribute__((aligned(x))) #define InterlockedCompareExchange(ptr,new_val,old_val) __sync_val_compare_and_swap(ptr,old_val,new_val) -#define InterlockedCompareExchange64(ptr,new_val,old_val) __sync_val_compare_and_swap(ptr,old_val,new_val) +#define InterlockedExchange(ptr, value) __sync_lock_test_and_set(ptr, value) inline int64_t InterlockedOr64(volatile int64_t *dest, int64_t val) { @@ -54,7 +54,7 @@ inline int64_t InterlockedOr64(volatile int64_t *dest, int64_t val) do { olderval = oldval; - oldval = InterlockedCompareExchange64(dest, olderval | val, olderval); + oldval = __sync_val_compare_and_swap(dest, olderval | val, olderval); } while (olderval != oldval); return oldval; } @@ -100,4 +100,15 @@ static __forceinline uint64_t InterlockedCompareExchange(volatile uint64_t* dest { return _InterlockedCompareExchange64((volatile long long*)dest, exch, comp); } -#endif \ No newline at end of file +#endif + +#ifndef InterlockedExchange +static __forceinline uint32_t InterlockedExchange(volatile uint32_t* dest, uint32_t value) +{ + return _InterlockedExchange((volatile long*)dest, value); +} +static __forceinline uint64_t InterlockedExchange(volatile uint64_t* dest, uint64_t value) +{ + return _InterlockedExchange64((volatile long long*)dest, value); +} +#endif diff --git a/rpcs3/Crypto/unpkg.cpp b/rpcs3/Crypto/unpkg.cpp index caae7fb9f7..39f4bf99a8 100644 --- a/rpcs3/Crypto/unpkg.cpp +++ b/rpcs3/Crypto/unpkg.cpp @@ -120,8 +120,8 @@ int Decrypt(rFile& pkg_f, rFile& dec_pkg_f, PKGHeader* m_header) { aes_crypt_ecb(&c, AES_ENCRYPT, iv, ctr+j*HASH_LEN); - be_t hi = be_t::MakeFromBE(*(u64*)&iv[0]); - be_t lo = be_t::MakeFromBE(*(u64*)&iv[8]); + be_t hi = *(be_t*)&iv[0]; + be_t lo = *(be_t*)&iv[8]; lo++; if (lo == 0) diff --git a/rpcs3/Emu/CPU/CPUThread.h b/rpcs3/Emu/CPU/CPUThread.h index 65b5c7afdc..e70007773c 100644 --- a/rpcs3/Emu/CPU/CPUThread.h +++ b/rpcs3/Emu/CPU/CPUThread.h @@ -109,7 +109,7 @@ public: virtual std::string GetThreadName() const { - std::string temp = (GetFName() + fmt::Format("[0x%08llx]", PC)); + std::string temp = (GetFName() + fmt::Format("[0x%08x]", PC)); return temp; } diff --git a/rpcs3/Emu/Memory/vm_atomic.h b/rpcs3/Emu/Memory/vm_atomic.h index c292f1a7ed..9019f0407f 100644 --- a/rpcs3/Emu/Memory/vm_atomic.h +++ b/rpcs3/Emu/Memory/vm_atomic.h @@ -25,16 +25,27 @@ namespace vm template class _atomic_base { - T data; + volatile T data; typedef typename _to_atomic::type atomic_type; public: - T compare_and_swap(T cmp, T exch) + __forceinline const T compare_and_swap(const T cmp, const T exch) volatile { const atomic_type res = InterlockedCompareExchange((volatile atomic_type*)&data, (atomic_type&)exch, (atomic_type&)cmp); return (T&)res; } + __forceinline const T exchange(const T value) volatile + { + const atomic_type res = InterlockedExchange((volatile atomic_type*)&data, (atomic_type&)value); + return (T&)res; + } + + __forceinline const T read_relaxed() const volatile + { + return (T&)data; + } + }; template struct atomic_le : public _atomic_base diff --git a/rpcs3/Emu/RSX/sysutil_video.h b/rpcs3/Emu/RSX/sysutil_video.h index 36bda57b4e..c5bf9426cd 100644 --- a/rpcs3/Emu/RSX/sysutil_video.h +++ b/rpcs3/Emu/RSX/sysutil_video.h @@ -228,15 +228,15 @@ enum CellVideoOutRGBOutputRange static const CellVideoOutResolution ResolutionTable[] = { - { be_t::MakeFromBE(se16(0xffff)), be_t::MakeFromBE(se16(0xffff)) }, //0 - 0 - { be_t::MakeFromBE(se16(1920)), be_t::MakeFromBE(se16(1080)) }, //1 - 1 - { be_t::MakeFromBE(se16(1280)), be_t::MakeFromBE(se16(720)) }, //2 - 2 - { be_t::MakeFromBE(se16(720)), be_t::MakeFromBE(se16(480)) }, //4 - 3 - { be_t::MakeFromBE(se16(720)), be_t::MakeFromBE(se16(576)) }, //5 - 4 - { be_t::MakeFromBE(se16(1600)), be_t::MakeFromBE(se16(1080)) }, //10 - 5 - { be_t::MakeFromBE(se16(1440)), be_t::MakeFromBE(se16(1080)) }, //11 - 6 - { be_t::MakeFromBE(se16(1280)), be_t::MakeFromBE(se16(1080)) }, //12 - 7 - { be_t::MakeFromBE(se16(960)), be_t::MakeFromBE(se16(1080)) }, //13 - 8 + { be_t::make(0xffff), be_t::make(0xffff) }, //0 - 0 + { be_t::make(1920), be_t::make(1080) }, //1 - 1 + { be_t::make(1280), be_t::make(720) }, //2 - 2 + { be_t::make(720), be_t::make(480) }, //4 - 3 + { be_t::make(720), be_t::make(576) }, //5 - 4 + { be_t::make(1600), be_t::make(1080) }, //10 - 5 + { be_t::make(1440), be_t::make(1080) }, //11 - 6 + { be_t::make(1280), be_t::make(1080) }, //12 - 7 + { be_t::make(960), be_t::make(1080) }, //13 - 8 }; inline static u32 ResolutionIdToNum(u32 id) diff --git a/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp b/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp index 61dad6c763..ecc5bf8625 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSaveData.cpp @@ -210,7 +210,7 @@ void getSaveDataStat(SaveDataEntry entry, vm::ptr statGet) } } - statGet->fileList = vm::bptr::make(be_t::MakeFromLE((u32)Memory.Alloc(sizeof(CellSaveDataFileStat) * (u32)fileEntries.size(), sizeof(CellSaveDataFileStat)))); + statGet->fileList = vm::bptr::make(be_t::make((u32)Memory.Alloc(sizeof(CellSaveDataFileStat) * (u32)fileEntries.size(), sizeof(CellSaveDataFileStat)))); for (u32 i=0; ifileList[i], &fileEntries[i], sizeof(CellSaveDataFileStat)); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 4a2e215efa..c43826648a 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -208,7 +208,7 @@ s64 spursInit( spurs->m.ppu1 = ppu1->GetId(); // enable exception event handler - if (spurs->m.enableEH.compare_and_swap(be_t::MakeFromBE(0), be_t::MakeFromBE(se32(1))).ToBE() != 0) + if (spurs->m.enableEH.compare_and_swap(be_t::make(0), be_t::make(1)).ToBE() == 0) { assert(sys_spu_thread_group_connect_event(spurs->m.spuTG, spurs->m.queue, SYS_SPU_THREAD_GROUP_EVENT_EXCEPTION) == CELL_OK); } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp index 43df317feb..112ea57f5e 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.cpp @@ -16,7 +16,7 @@ u32 libsre; u32 libsre_rtoc; #endif -s32 syncMutexInitialize(vm::ptr mutex) +s32 syncMutexInitialize(vm::ptr> mutex) { if (!mutex) { @@ -28,12 +28,11 @@ s32 syncMutexInitialize(vm::ptr mutex) } // prx: set zero and sync - mutex->m_data() = 0; - InterlockedCompareExchange(&mutex->m_data(), 0, 0); + mutex->exchange({}); return CELL_OK; } -s32 cellSyncMutexInitialize(vm::ptr mutex) +s32 cellSyncMutexInitialize(vm::ptr> mutex) { cellSync->Log("cellSyncMutexInitialize(mutex_addr=0x%x)", mutex.addr()); diff --git a/rpcs3/Emu/SysCalls/Modules/cellSync.h b/rpcs3/Emu/SysCalls/Modules/cellSync.h index 5e282cec50..dbcdc00586 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSync.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSync.h @@ -155,7 +155,7 @@ struct CellSyncLFQueue static_assert(sizeof(CellSyncLFQueue) == 128, "CellSyncLFQueue: wrong size"); -s32 syncMutexInitialize(vm::ptr mutex); +s32 syncMutexInitialize(vm::ptr> mutex); s32 syncBarrierInitialize(vm::ptr barrier, u16 total_count); diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp index f819a76818..1f71d0fb30 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwcond.cpp @@ -13,7 +13,7 @@ s32 lwcond_create(sys_lwcond_t& lwcond, sys_lwmutex_t& lwmutex, u64 name_u64) { u32 id = sys_lwcond.GetNewId(new Lwcond(name_u64), TYPE_LWCOND); u32 addr = Memory.RealToVirtualAddr(&lwmutex); - lwcond.lwmutex.set(be_t::MakeFromLE(addr)); + lwcond.lwmutex.set(be_t::make(addr)); lwcond.lwcond_queue = id; std::string name((const char*)&name_u64, 8); @@ -154,7 +154,7 @@ s32 sys_lwcond_wait(vm::ptr lwcond, u64 timeout) auto mutex = vm::ptr::make(lwcond->lwmutex.addr()); u32 tid_le = GetCurrentPPUThread().GetId(); - be_t tid = be_t::MakeFromLE(tid_le); + be_t tid = be_t::make(tid_le); SleepQueue* sq = nullptr; Emu.GetIdManager().GetIDData((u32)mutex->sleep_queue, sq); @@ -176,7 +176,7 @@ s32 sys_lwcond_wait(vm::ptr lwcond, u64 timeout) if (sq) { - mutex->mutex.unlock(tid, be_t::MakeFromLE(mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop())); + mutex->mutex.unlock(tid, be_t::make(mutex->attribute.ToBE() == se32(SYS_SYNC_PRIORITY) ? sq->pop_prio() : sq->pop())); } else if (mutex->attribute.ToBE() == se32(SYS_SYNC_RETRY)) { diff --git a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp index 4a0702623f..d4fb074429 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_lwmutex.cpp @@ -79,14 +79,14 @@ s32 sys_lwmutex_lock(vm::ptr lwmutex, u64 timeout) //ConLog.Write("*** lock mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.addr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); - return lwmutex->lock(be_t::MakeFromLE(GetCurrentPPUThread().GetId()), timeout ? ((timeout < 1000) ? 1 : (timeout / 1000)) : 0); + return lwmutex->lock(be_t::make(GetCurrentPPUThread().GetId()), timeout ? ((timeout < 1000) ? 1 : (timeout / 1000)) : 0); } s32 sys_lwmutex_trylock(vm::ptr lwmutex) { sys_lwmutex.Log("sys_lwmutex_trylock(lwmutex_addr=0x%x)", lwmutex.addr()); - return lwmutex->trylock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); + return lwmutex->trylock(be_t::make(GetCurrentPPUThread().GetId())); } s32 sys_lwmutex_unlock(vm::ptr lwmutex) @@ -96,7 +96,7 @@ s32 sys_lwmutex_unlock(vm::ptr lwmutex) //ConLog.Write("*** unlocking mutex (addr=0x%x, attr=0x%x, Nrec=%d, owner=%d, waiter=%d)", //lwmutex.addr(), (u32)lwmutex->attribute, (u32)lwmutex->recursive_count, (u32)lwmutex->vars.parts.owner.GetOwner(), (u32)lwmutex->waiter); - return lwmutex->unlock(be_t::MakeFromLE(GetCurrentPPUThread().GetId())); + return lwmutex->unlock(be_t::make(GetCurrentPPUThread().GetId())); } void SleepQueue::push(u32 tid) @@ -292,7 +292,7 @@ int sys_lwmutex_t::unlock(be_t tid) recursive_count -= 1; if (!recursive_count.ToBE()) { - be_t target = be_t::MakeFromBE(se32(0)); + be_t target = be_t::make(0); switch (attribute.ToBE() & se32(SYS_SYNC_ATTR_PROTOCOL_MASK)) { case se32(SYS_SYNC_FIFO): diff --git a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp index 385115d47f..3e504cffc9 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_ppu_thread.cpp @@ -214,8 +214,8 @@ void sys_ppu_thread_once(PPUThread& CPU, vm::ptr> once_ctrl, vm: { sys_ppu_thread.Warning("sys_ppu_thread_once(once_ctrl_addr=0x%x, init_addr=0x%x)", once_ctrl.addr(), init.addr()); - auto cmp = to_be(SYS_PPU_THREAD_ONCE_INIT); - if (once_ctrl->compare_and_swap(cmp, to_be(SYS_PPU_THREAD_DONE_INIT)) == cmp) + be_t cmp = be_t::make(SYS_PPU_THREAD_ONCE_INIT); + if (once_ctrl->compare_and_swap(cmp, be_t::make(SYS_PPU_THREAD_DONE_INIT)) == cmp) { init.call(CPU); } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp index 5c6c3d9f27..0598dcc654 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.cpp @@ -7,22 +7,22 @@ SysCallBase sys_spinlock("sys_spinlock"); -void sys_spinlock_initialize(vm::ptr>> lock) +void sys_spinlock_initialize(vm::ptr> lock) { sys_spinlock.Log("sys_spinlock_initialize(lock_addr=0x%x)", lock.addr()); // prx: set 0 and sync - *lock = be_t::MakeFromBE(0); + lock->exchange(be_t::make(0)); } -void sys_spinlock_lock(vm::ptr>> lock) +void sys_spinlock_lock(vm::ptr> lock) { sys_spinlock.Log("sys_spinlock_lock(lock_addr=0x%x)", lock.addr()); // prx: exchange with 0xabadcafe, repeat until exchanged with 0 - while (lock->exchange(be_t::MakeFromBE(se32(0xabadcafe))).ToBE()) + while (lock->exchange(be_t::make(0xabadcafe)).ToBE()) { - while (lock->load(std::memory_order_relaxed).ToBE()) + while (lock->read_relaxed().ToBE()) { std::this_thread::sleep_for(std::chrono::milliseconds(1)); // hack if (Emu.IsStopped()) @@ -39,12 +39,12 @@ void sys_spinlock_lock(vm::ptr>> lock) } } -s32 sys_spinlock_trylock(vm::ptr>> lock) +s32 sys_spinlock_trylock(vm::ptr> lock) { sys_spinlock.Log("sys_spinlock_trylock(lock_addr=0x%x)", lock.addr()); // prx: exchange with 0xabadcafe, translate exchanged value - if (lock->exchange(be_t::MakeFromBE(se32(0xabadcafe))).ToBE()) + if (lock->exchange(be_t::make(0xabadcafe)).ToBE()) { return CELL_EBUSY; } @@ -52,10 +52,10 @@ s32 sys_spinlock_trylock(vm::ptr>> lock) return CELL_OK; } -void sys_spinlock_unlock(vm::ptr>> lock) +void sys_spinlock_unlock(vm::ptr> lock) { sys_spinlock.Log("sys_spinlock_unlock(lock_addr=0x%x)", lock.addr()); // prx: sync and set 0 - *lock = be_t::MakeFromBE(0); + lock->exchange(be_t::make(0)); } \ No newline at end of file diff --git a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h index 9bab9011a1..5102d7d588 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_spinlock.h @@ -1,7 +1,7 @@ #pragma once // SysCalls -void sys_spinlock_initialize(vm::ptr>> lock); -void sys_spinlock_lock(vm::ptr>> lock); -s32 sys_spinlock_trylock(vm::ptr>> lock); -void sys_spinlock_unlock(vm::ptr>> lock); +void sys_spinlock_initialize(vm::ptr> lock); +void sys_spinlock_lock(vm::ptr> lock); +s32 sys_spinlock_trylock(vm::ptr> lock); +void sys_spinlock_unlock(vm::ptr> lock); diff --git a/rpcs3/Loader/TROPUSR.cpp b/rpcs3/Loader/TROPUSR.cpp index e6a15fb59f..6569ae3fd3 100644 --- a/rpcs3/Loader/TROPUSR.cpp +++ b/rpcs3/Loader/TROPUSR.cpp @@ -144,11 +144,20 @@ bool TROPUSRLoader::Generate(const std::string& filepath, const std::string& con default: trophy_grade = 0; } - TROPUSREntry4 entry4 = { be_t::MakeFromBE(se32(4)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry4) - 0x10)), - be_t::MakeFromLE((u32)m_table4.size()), be_t::MakeFromBE(se32(0)), be_t::MakeFromLE(trophy_id), - be_t::MakeFromLE(trophy_grade), be_t::MakeFromBE(se32(0xFFFFFFFF)) }; - TROPUSREntry6 entry6 = { be_t::MakeFromBE(se32(6)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry6) - 0x10)), - be_t::MakeFromLE((u32)m_table6.size()), be_t::MakeFromBE(0), be_t::MakeFromLE(trophy_id) }; + TROPUSREntry4 entry4 = { + be_t::make(4), + be_t::make(sizeof(TROPUSREntry4) - 0x10), + be_t::make((u32)m_table4.size()), + be_t::make(0), + be_t::make(trophy_id), + be_t::make(trophy_grade), + be_t::make(0xFFFFFFFF) }; + TROPUSREntry6 entry6 = { + be_t::make(6), + be_t::make(sizeof(TROPUSREntry6) - 0x10), + be_t::make((u32)m_table6.size()), + be_t::make(0), + be_t::make(trophy_id) }; m_table4.push_back(entry4); m_table6.push_back(entry6); @@ -156,11 +165,19 @@ bool TROPUSRLoader::Generate(const std::string& filepath, const std::string& con } u64 offset = sizeof(TROPUSRHeader) + 2 * sizeof(TROPUSRTableHeader); - TROPUSRTableHeader table4header = { be_t::MakeFromBE(se32(4)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry4)-0x10)), - be_t::MakeFromBE(se32(1)), be_t::MakeFromLE((u32)m_table4.size()), be_t::MakeFromLE(offset) }; + TROPUSRTableHeader table4header = { + be_t::make(4), + be_t::make(sizeof(TROPUSREntry4) - 0x10), + be_t::make(1), + be_t::make((u32)m_table4.size()), + be_t::make(offset) }; offset += m_table4.size() * sizeof(TROPUSREntry4); - TROPUSRTableHeader table6header = { be_t::MakeFromBE(se32(6)), be_t::MakeFromBE(se32(sizeof(TROPUSREntry6)-0x10)), - be_t::MakeFromBE(se32(1)), be_t::MakeFromLE((u32)m_table6.size()), be_t::MakeFromLE(offset) }; + TROPUSRTableHeader table6header = { + be_t::make(6), + be_t::make(sizeof(TROPUSREntry6) - 0x10), + be_t::make(1), + be_t::make((u32)m_table6.size()), + be_t::make(offset) }; offset += m_table6.size() * sizeof(TROPUSREntry6); m_tableHeaders.clear();