Bug 1073096 - Use MemoryBarrierBits type as container for bit sets. r=luke

This commit is contained in:
Lars T Hansen 2014-11-20 16:27:38 +01:00
Родитель 9753923d45
Коммит acb8760d78
5 изменённых файлов: 35 добавлений и 16 удалений

Просмотреть файл

@ -35,18 +35,37 @@ enum MemoryBarrierBits {
MembarSynchronizing = 16, MembarSynchronizing = 16,
// For validity testing // For validity testing
MembarNobits = 0,
MembarAllbits = 31, MembarAllbits = 31,
}; };
inline MemoryBarrierBits
operator|(MemoryBarrierBits a, MemoryBarrierBits b)
{
return MemoryBarrierBits(int(a) | int(b));
}
inline MemoryBarrierBits
operator&(MemoryBarrierBits a, MemoryBarrierBits b)
{
return MemoryBarrierBits(int(a) & int(b));
}
inline MemoryBarrierBits
operator~(MemoryBarrierBits a)
{
return MemoryBarrierBits(~int(a));
}
// Standard barrier bits for a full barrier. // Standard barrier bits for a full barrier.
static const int MembarFull = MembarLoadLoad|MembarLoadStore|MembarStoreLoad|MembarStoreStore; static const MemoryBarrierBits MembarFull = MembarLoadLoad|MembarLoadStore|MembarStoreLoad|MembarStoreStore;
// Standard sets of barrier bits for atomic loads and stores. // Standard sets of barrier bits for atomic loads and stores.
// See http://gee.cs.oswego.edu/dl/jmm/cookbook.html for more. // See http://gee.cs.oswego.edu/dl/jmm/cookbook.html for more.
static const int MembarBeforeLoad = 0; static const MemoryBarrierBits MembarBeforeLoad = MembarNobits;
static const int MembarAfterLoad = MembarLoadLoad|MembarLoadStore; static const MemoryBarrierBits MembarAfterLoad = MembarLoadLoad|MembarLoadStore;
static const int MembarBeforeStore = MembarStoreStore; static const MemoryBarrierBits MembarBeforeStore = MembarStoreStore;
static const int MembarAfterStore = MembarStoreLoad; static const MemoryBarrierBits MembarAfterStore = MembarStoreLoad;
} // namespace jit } // namespace jit
} // namespace js } // namespace js

Просмотреть файл

@ -6874,19 +6874,19 @@ class LThrowUninitializedLexical : public LCallInstructionHelper<0, 0, 0>
class LMemoryBarrier : public LInstructionHelper<0, 0, 0> class LMemoryBarrier : public LInstructionHelper<0, 0, 0>
{ {
private: private:
const int type_; const MemoryBarrierBits type_;
public: public:
LIR_HEADER(MemoryBarrier) LIR_HEADER(MemoryBarrier)
// The parameter 'type' is a bitwise 'or' of the barrier types needed, // The parameter 'type' is a bitwise 'or' of the barrier types needed,
// see AtomicOp.h. // see AtomicOp.h.
explicit LMemoryBarrier(int type) : type_(type) explicit LMemoryBarrier(MemoryBarrierBits type) : type_(type)
{ {
MOZ_ASSERT((type_ & ~MembarAllbits) == 0); MOZ_ASSERT((type_ & ~MembarAllbits) == MembarNobits);
} }
int type() const { MemoryBarrierBits type() const {
return type_; return type_;
} }

Просмотреть файл

@ -11930,22 +11930,22 @@ class MMemoryBarrier
: public MNullaryInstruction : public MNullaryInstruction
{ {
// The type is a combination of the memory barrier types in AtomicOp.h. // The type is a combination of the memory barrier types in AtomicOp.h.
const int type_; const MemoryBarrierBits type_;
explicit MMemoryBarrier(int type) explicit MMemoryBarrier(MemoryBarrierBits type)
: type_(type) : type_(type)
{ {
MOZ_ASSERT((type_ & ~MembarAllbits) == 0); MOZ_ASSERT((type_ & ~MembarAllbits) == MembarNobits);
setGuard(); // Not removable setGuard(); // Not removable
} }
public: public:
INSTRUCTION_HEADER(MemoryBarrier); INSTRUCTION_HEADER(MemoryBarrier);
static MMemoryBarrier *New(TempAllocator &alloc, int type=MembarFull) { static MMemoryBarrier *New(TempAllocator &alloc, MemoryBarrierBits type = MembarFull) {
return new(alloc) MMemoryBarrier(type); return new(alloc) MMemoryBarrier(type);
} }
int type() const { MemoryBarrierBits type() const {
return type_; return type_;
} }

Просмотреть файл

@ -2250,7 +2250,7 @@ JitRuntime::generateForkJoinGetSliceStub(JSContext *cx)
} }
void void
CodeGeneratorARM::memoryBarrier(int barrier) CodeGeneratorARM::memoryBarrier(MemoryBarrierBits barrier)
{ {
// On ARMv6 the optional argument (BarrierST, etc) is ignored. // On ARMv6 the optional argument (BarrierST, etc) is ignored.
if (barrier == (MembarStoreStore|MembarSynchronizing)) if (barrier == (MembarStoreStore|MembarSynchronizing))

Просмотреть файл

@ -181,7 +181,7 @@ class CodeGeneratorARM : public CodeGeneratorShared
bool modICommon(MMod *mir, Register lhs, Register rhs, Register output, LSnapshot *snapshot, bool modICommon(MMod *mir, Register lhs, Register rhs, Register output, LSnapshot *snapshot,
Label &done); Label &done);
void memoryBarrier(int barrier); void memoryBarrier(MemoryBarrierBits barrier);
public: public:
CodeGeneratorARM(MIRGenerator *gen, LIRGraph *graph, MacroAssembler *masm); CodeGeneratorARM(MIRGenerator *gen, LIRGraph *graph, MacroAssembler *masm);