Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1030)

Unified Diff: src/runtime/runtime-atomics.cc

Issue 1552683003: Simplify runtime-atomics.cc (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/runtime/runtime-atomics.cc
diff --git a/src/runtime/runtime-atomics.cc b/src/runtime/runtime-atomics.cc
index ba869148b8fbfd11e16b05de452b34bbcae638ea..94d98d4ffaf77a46e4aec1cb088bd55b36e406e4 100644
--- a/src/runtime/runtime-atomics.cc
+++ b/src/runtime/runtime-atomics.cc
@@ -153,126 +153,80 @@ template <typename T>
T FromObject(Handle<Object> number);
template <>
-inline uint32_t FromObject<uint32_t>(Handle<Object> number) {
+inline uint8_t FromObject<uint8_t>(Handle<Object> number) {
return NumberToUint32(*number);
}
template <>
-inline int32_t FromObject<int32_t>(Handle<Object> number) {
+inline int8_t FromObject<int8_t>(Handle<Object> number) {
return NumberToInt32(*number);
}
-template <typename T, typename F>
-inline T ToAtomic(F from) {
- return static_cast<T>(from);
-}
-
-template <typename T, typename F>
-inline T FromAtomic(F from) {
- return static_cast<T>(from);
-}
-
-template <typename T>
-inline Object* ToObject(Isolate* isolate, T t);
-
template <>
-inline Object* ToObject<int8_t>(Isolate* isolate, int8_t t) {
- return Smi::FromInt(t);
+inline uint16_t FromObject<uint16_t>(Handle<Object> number) {
+ return NumberToUint32(*number);
}
template <>
-inline Object* ToObject<uint8_t>(Isolate* isolate, uint8_t t) {
- return Smi::FromInt(t);
+inline int16_t FromObject<int16_t>(Handle<Object> number) {
+ return NumberToInt32(*number);
}
template <>
-inline Object* ToObject<int16_t>(Isolate* isolate, int16_t t) {
- return Smi::FromInt(t);
+inline uint32_t FromObject<uint32_t>(Handle<Object> number) {
+ return NumberToUint32(*number);
}
template <>
-inline Object* ToObject<uint16_t>(Isolate* isolate, uint16_t t) {
- return Smi::FromInt(t);
+inline int32_t FromObject<int32_t>(Handle<Object> number) {
+ return NumberToInt32(*number);
}
-template <>
-inline Object* ToObject<int32_t>(Isolate* isolate, int32_t t) {
- return *isolate->factory()->NewNumber(t);
-}
-template <>
-inline Object* ToObject<uint32_t>(Isolate* isolate, uint32_t t) {
- return *isolate->factory()->NewNumber(t);
-}
+inline Object* ToObject(Isolate* isolate, int8_t t) { return Smi::FromInt(t); }
-template <typename T>
-struct FromObjectTraits {};
+inline Object* ToObject(Isolate* isolate, uint8_t t) { return Smi::FromInt(t); }
-template <>
-struct FromObjectTraits<int8_t> {
- typedef int32_t convert_type;
- typedef int8_t atomic_type;
-};
+inline Object* ToObject(Isolate* isolate, int16_t t) { return Smi::FromInt(t); }
-template <>
-struct FromObjectTraits<uint8_t> {
- typedef uint32_t convert_type;
- typedef uint8_t atomic_type;
-};
+inline Object* ToObject(Isolate* isolate, uint16_t t) {
+ return Smi::FromInt(t);
+}
-template <>
-struct FromObjectTraits<int16_t> {
- typedef int32_t convert_type;
- typedef int16_t atomic_type;
-};
-template <>
-struct FromObjectTraits<uint16_t> {
- typedef uint32_t convert_type;
- typedef uint16_t atomic_type;
-};
+inline Object* ToObject(Isolate* isolate, int32_t t) {
+ return *isolate->factory()->NewNumber(t);
+}
-template <>
-struct FromObjectTraits<int32_t> {
- typedef int32_t convert_type;
- typedef int32_t atomic_type;
-};
-template <>
-struct FromObjectTraits<uint32_t> {
- typedef uint32_t convert_type;
- typedef uint32_t atomic_type;
-};
+inline Object* ToObject(Isolate* isolate, uint32_t t) {
+ return *isolate->factory()->NewNumber(t);
+}
template <typename T>
inline Object* DoCompareExchange(Isolate* isolate, void* buffer, size_t index,
Handle<Object> oldobj, Handle<Object> newobj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type oldval = ToAtomic<atomic_type>(FromObject<convert_type>(oldobj));
- atomic_type newval = ToAtomic<atomic_type>(FromObject<convert_type>(newobj));
- atomic_type result = CompareExchangeSeqCst(
- static_cast<atomic_type*>(buffer) + index, oldval, newval);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T oldval = FromObject<T>(oldobj);
+ T newval = FromObject<T>(newobj);
+ T result =
+ CompareExchangeSeqCst(static_cast<T*>(buffer) + index, oldval, newval);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoLoad(Isolate* isolate, void* buffer, size_t index) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- atomic_type result = LoadSeqCst(static_cast<atomic_type*>(buffer) + index);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T result = LoadSeqCst(static_cast<T*>(buffer) + index);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoStore(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- StoreSeqCst(static_cast<atomic_type*>(buffer) + index, value);
+ T value = FromObject<T>(obj);
+ StoreSeqCst(static_cast<T*>(buffer) + index, value);
return *obj;
}
@@ -280,72 +234,54 @@ inline Object* DoStore(Isolate* isolate, void* buffer, size_t index,
template <typename T>
inline Object* DoAdd(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- AddSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = AddSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoSub(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- SubSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = SubSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoAnd(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- AndSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = AndSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoOr(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- OrSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = OrSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoXor(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- XorSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = XorSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
template <typename T>
inline Object* DoExchange(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
- typedef typename FromObjectTraits<T>::atomic_type atomic_type;
- typedef typename FromObjectTraits<T>::convert_type convert_type;
- atomic_type value = ToAtomic<atomic_type>(FromObject<convert_type>(obj));
- atomic_type result =
- ExchangeSeqCst(static_cast<atomic_type*>(buffer) + index, value);
- return ToObject<T>(isolate, FromAtomic<T>(result));
+ T value = FromObject<T>(obj);
+ T result = ExchangeSeqCst(static_cast<T*>(buffer) + index, value);
+ return ToObject(isolate, result);
}
@@ -363,21 +299,19 @@ inline Object* DoCompareExchangeUint8Clamped(Isolate* isolate, void* buffer,
Handle<Object> oldobj,
Handle<Object> newobj) {
typedef int32_t convert_type;
- typedef uint8_t atomic_type;
- atomic_type oldval = ClampToUint8(FromObject<convert_type>(oldobj));
- atomic_type newval = ClampToUint8(FromObject<convert_type>(newobj));
- atomic_type result = CompareExchangeSeqCst(
- static_cast<atomic_type*>(buffer) + index, oldval, newval);
- return ToObject<uint8_t>(isolate, FromAtomic<uint8_t>(result));
+ uint8_t oldval = ClampToUint8(FromObject<convert_type>(oldobj));
+ uint8_t newval = ClampToUint8(FromObject<convert_type>(newobj));
+ uint8_t result = CompareExchangeSeqCst(static_cast<uint8_t*>(buffer) + index,
+ oldval, newval);
+ return ToObject(isolate, result);
}
inline Object* DoStoreUint8Clamped(Isolate* isolate, void* buffer, size_t index,
Handle<Object> obj) {
typedef int32_t convert_type;
- typedef uint8_t atomic_type;
- atomic_type value = ClampToUint8(FromObject<convert_type>(obj));
- StoreSeqCst(static_cast<atomic_type*>(buffer) + index, value);
+ uint8_t value = ClampToUint8(FromObject<convert_type>(obj));
+ StoreSeqCst(static_cast<uint8_t*>(buffer) + index, value);
return *obj;
}
@@ -386,16 +320,15 @@ inline Object* DoStoreUint8Clamped(Isolate* isolate, void* buffer, size_t index,
inline Object* Do##name##Uint8Clamped(Isolate* isolate, void* buffer, \
size_t index, Handle<Object> obj) { \
typedef int32_t convert_type; \
- typedef uint8_t atomic_type; \
- atomic_type* p = static_cast<atomic_type*>(buffer) + index; \
+ uint8_t* p = static_cast<uint8_t*>(buffer) + index; \
convert_type operand = FromObject<convert_type>(obj); \
- atomic_type expected; \
- atomic_type result; \
+ uint8_t expected; \
+ uint8_t result; \
do { \
expected = *p; \
result = ClampToUint8(static_cast<convert_type>(expected) op operand); \
} while (CompareExchangeSeqCst(p, expected, result) != expected); \
- return ToObject<uint8_t>(isolate, expected); \
+ return ToObject(isolate, expected); \
}
DO_UINT8_CLAMPED_OP(Add, +)
@@ -410,14 +343,13 @@ DO_UINT8_CLAMPED_OP(Xor, ^)
inline Object* DoExchangeUint8Clamped(Isolate* isolate, void* buffer,
size_t index, Handle<Object> obj) {
typedef int32_t convert_type;
- typedef uint8_t atomic_type;
- atomic_type* p = static_cast<atomic_type*>(buffer) + index;
- atomic_type result = ClampToUint8(FromObject<convert_type>(obj));
- atomic_type expected;
+ uint8_t* p = static_cast<uint8_t*>(buffer) + index;
+ uint8_t result = ClampToUint8(FromObject<convert_type>(obj));
+ uint8_t expected;
do {
expected = *p;
} while (CompareExchangeSeqCst(p, expected, result) != expected);
- return ToObject<uint8_t>(isolate, expected);
+ return ToObject(isolate, expected);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698