mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-09-25 17:55:23 +00:00
74 lines
2.1 KiB
C++
74 lines
2.1 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
|
* 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 jit_AtomicOp_h
|
|
#define jit_AtomicOp_h
|
|
|
|
namespace js {
|
|
namespace jit {
|
|
|
|
// Types of atomic operation, shared by MIR and LIR.
|
|
|
|
enum AtomicOp {
|
|
AtomicFetchAddOp,
|
|
AtomicFetchSubOp,
|
|
AtomicFetchAndOp,
|
|
AtomicFetchOrOp,
|
|
AtomicFetchXorOp
|
|
};
|
|
|
|
// Memory barrier types, shared by MIR and LIR.
|
|
//
|
|
// MembarSynchronizing is here because some platforms can make the
|
|
// distinction (DSB vs DMB on ARM, SYNC vs parameterized SYNC on MIPS)
|
|
// but there's been no reason to use it yet.
|
|
|
|
enum MemoryBarrierBits {
|
|
MembarLoadLoad = 1,
|
|
MembarLoadStore = 2,
|
|
MembarStoreStore = 4,
|
|
MembarStoreLoad = 8,
|
|
|
|
MembarSynchronizing = 16,
|
|
|
|
// For validity testing
|
|
MembarNobits = 0,
|
|
MembarAllbits = 31,
|
|
};
|
|
|
|
static inline MOZ_CONSTEXPR MemoryBarrierBits
|
|
operator|(MemoryBarrierBits a, MemoryBarrierBits b)
|
|
{
|
|
return MemoryBarrierBits(int(a) | int(b));
|
|
}
|
|
|
|
static inline MOZ_CONSTEXPR MemoryBarrierBits
|
|
operator&(MemoryBarrierBits a, MemoryBarrierBits b)
|
|
{
|
|
return MemoryBarrierBits(int(a) & int(b));
|
|
}
|
|
|
|
static inline MOZ_CONSTEXPR MemoryBarrierBits
|
|
operator~(MemoryBarrierBits a)
|
|
{
|
|
return MemoryBarrierBits(~int(a));
|
|
}
|
|
|
|
// Standard barrier bits for a full barrier.
|
|
static MOZ_CONSTEXPR_VAR MemoryBarrierBits MembarFull = MembarLoadLoad|MembarLoadStore|MembarStoreLoad|MembarStoreStore;
|
|
|
|
// Standard sets of barrier bits for atomic loads and stores.
|
|
// See http://gee.cs.oswego.edu/dl/jmm/cookbook.html for more.
|
|
static MOZ_CONSTEXPR_VAR MemoryBarrierBits MembarBeforeLoad = MembarNobits;
|
|
static MOZ_CONSTEXPR_VAR MemoryBarrierBits MembarAfterLoad = MembarLoadLoad|MembarLoadStore;
|
|
static MOZ_CONSTEXPR_VAR MemoryBarrierBits MembarBeforeStore = MembarStoreStore;
|
|
static MOZ_CONSTEXPR_VAR MemoryBarrierBits MembarAfterStore = MembarStoreLoad;
|
|
|
|
} // namespace jit
|
|
} // namespace js
|
|
|
|
#endif /* jit_AtomicOp_h */
|