From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/util/Memory.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 js/src/util/Memory.h (limited to 'js/src/util/Memory.h') diff --git a/js/src/util/Memory.h b/js/src/util/Memory.h new file mode 100644 index 0000000000..e229adbf16 --- /dev/null +++ b/js/src/util/Memory.h @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef util_Memory_h +#define util_Memory_h + +#include "mozilla/Assertions.h" +#include "mozilla/Attributes.h" + +#include +#include +#include +#include + +static MOZ_ALWAYS_INLINE void* js_memcpy(void* dst_, const void* src_, + size_t len) { + char* dst = (char*)dst_; + const char* src = (const char*)src_; + MOZ_ASSERT_IF(dst >= src, (size_t)(dst - src) >= len); + MOZ_ASSERT_IF(src >= dst, (size_t)(src - dst) >= len); + + return memcpy(dst, src, len); +} + +namespace js { + +template +static constexpr U ComputeByteAlignment(T bytes, U alignment) { + static_assert(std::is_unsigned_v, "alignment amount must be unsigned"); + + return (alignment - (bytes % alignment)) % alignment; +} + +template +static constexpr T AlignBytes(T bytes, U alignment) { + static_assert(std::is_unsigned_v, "alignment amount must be unsigned"); + + return bytes + ComputeByteAlignment(bytes, alignment); +} + +} /* namespace js */ + +#endif /* util_Memory_h */ -- cgit v1.2.3