Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 712938 Details for
Bug 775791
net-libs/webkit-gtk-2.32.3 - ~ppc keywording request
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
be-typedarray.patch
be-typedarray.patch (text/plain), 7.32 KB, created by
ernsteiswuerfel
on 2021-05-31 23:35:45 UTC
(
hide
)
Description:
be-typedarray.patch
Filename:
MIME Type:
Creator:
ernsteiswuerfel
Created:
2021-05-31 23:35:45 UTC
Size:
7.32 KB
patch
obsolete
>Source: Jacek Piszczek <jacek.piszczek@runbox.com> > >https://tenfourfox.tenderapp.com/discussions/problems/7505-problems-uploading-to-facebook > >Updated by @q66. > >diff --git Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h >index dbe211d..4da5fbd 100644 >--- a/Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h >+++ b/Source/JavaScriptCore/runtime/JSGenericTypedArrayView.h >@@ -28,6 +28,7 @@ > #include "JSArrayBufferView.h" > #include "ThrowScope.h" > #include "ToNativeFromValue.h" >+#include <wtf/FlipBytes.h> > > namespace JSC { > >@@ -146,7 +147,18 @@ public: > > JSValue getIndexQuickly(unsigned i) const > { >+#if CPU(BIG_ENDIAN) >+ switch (Adaptor::typeValue) { >+ case TypeFloat32: >+ case TypeFloat64: >+ return Adaptor::toJSValue(nullptr, getIndexQuicklyAsNativeValue(i)); >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ return Adaptor::toJSValue(nullptr, flipBytes(getIndexQuicklyAsNativeValue(i))); >+ } >+#else > return Adaptor::toJSValue(nullptr, getIndexQuicklyAsNativeValue(i)); >+#endif > } > > void setIndexQuicklyToNativeValue(unsigned i, typename Adaptor::Type value) >@@ -158,7 +170,20 @@ public: > void setIndexQuickly(unsigned i, JSValue value) > { > ASSERT(!value.isObject()); >+#if CPU(BIG_ENDIAN) >+ switch (Adaptor::typeValue) { >+ case TypeFloat32: >+ case TypeFloat64: >+ setIndexQuicklyToNativeValue(i, toNativeFromValue<Adaptor>(value)); >+ break; >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ setIndexQuicklyToNativeValue(i, flipBytes(toNativeFromValue<Adaptor>(value))); >+ break; >+ } >+#else > setIndexQuicklyToNativeValue(i, toNativeFromValue<Adaptor>(value)); >+#endif > } > > bool setIndex(JSGlobalObject* globalObject, unsigned i, JSValue jsValue) >@@ -172,13 +197,54 @@ public: > if (isDetached() || i >= m_length) > return false; > >+#if CPU(BIG_ENDIAN) >+ switch (Adaptor::typeValue) { >+ case TypeFloat32: >+ case TypeFloat64: >+ setIndexQuicklyToNativeValue(i, value); >+ break; >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ setIndexQuicklyToNativeValue(i, flipBytes(value)); >+ break; >+ } >+#else > setIndexQuicklyToNativeValue(i, value); >+#endif > return true; > } > >- static ElementType toAdaptorNativeFromValue(JSGlobalObject* globalObject, JSValue jsValue) { return toNativeFromValue<Adaptor>(globalObject, jsValue); } >+ static ElementType toAdaptorNativeFromValue(JSGlobalObject* globalObject, JSValue jsValue) >+ { >+#if CPU(BIG_ENDIAN) >+ switch (Adaptor::typeValue) { >+ case TypeFloat32: >+ case TypeFloat64: >+ return toNativeFromValue<Adaptor>(globalObject, jsValue); >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ return flipBytes(toNativeFromValue<Adaptor>(globalObject, jsValue)); >+ } >+#else >+ return toNativeFromValue<Adaptor>(globalObject, jsValue); >+#endif >+ } > >- static Optional<ElementType> toAdaptorNativeFromValueWithoutCoercion(JSValue jsValue) { return toNativeFromValueWithoutCoercion<Adaptor>(jsValue); } >+ static Optional<ElementType> toAdaptorNativeFromValueWithoutCoercion(JSValue jsValue) >+ { >+#if CPU(BIG_ENDIAN) >+ switch (Adaptor::typeValue) { >+ case TypeFloat32: >+ case TypeFloat64: >+ return toNativeFromValueWithoutCoercion<Adaptor>(jsValue); >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ return flipBytes(toNativeFromValueWithoutCoercion<Adaptor>(jsValue)); >+ } >+#else >+ return toNativeFromValueWithoutCoercion<Adaptor>(jsValue); >+#endif >+ } > > void sort() > { >diff --git Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeFunctions.h Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeFunctions.h >index 126f33c..0913af5 100644 >--- a/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeFunctions.h >+++ b/Source/JavaScriptCore/runtime/JSGenericTypedArrayViewPrototypeFunctions.h >@@ -208,9 +208,36 @@ ALWAYS_INLINE EncodedJSValue genericTypedArrayViewProtoFuncIncludes(VM& vm, JSGl > scope.assertNoException(); > RELEASE_ASSERT(!thisObject->isDetached()); > >- if (std::isnan(static_cast<double>(*targetOption))) { >+ double targetOptionLittleEndianAsDouble; >+#if CPU(BIG_ENDIAN) >+ switch (ViewClass::TypedArrayStorageType) { >+ case TypeFloat32: >+ case TypeFloat64: >+ targetOptionLittleEndianAsDouble = static_cast<double>(*targetOption); >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ targetOptionLittleEndianAsDouble = static_cast<double>(flipBytes(*targetOption)); >+ } >+#else >+ targetOptionLittleEndianAsDouble = static_cast<double>(*targetOption); >+#endif >+ >+ if (std::isnan(targetOptionLittleEndianAsDouble)) { > for (; index < length; ++index) { >- if (std::isnan(static_cast<double>(array[index]))) >+ double arrayElementLittleEndianAsDouble; >+#if CPU(BIG_ENDIAN) >+ switch (ViewClass::TypedArrayStorageType) { >+ case TypeFloat32: >+ case TypeFloat64: >+ arrayElementLittleEndianAsDouble = static_cast<double>(array[index]); >+ default: >+ // typed array views are commonly expected to be little endian views of the underlying data >+ arrayElementLittleEndianAsDouble = static_cast<double>(flipBytes(array[index])); >+ } >+#else >+ arrayElementLittleEndianAsDouble = static_cast<double>(array[index]); >+#endif >+ if (std::isnan(arrayElementLittleEndianAsDouble)) > return JSValue::encode(jsBoolean(true)); > } > } else { >diff --git Source/WTF/wtf/FlipBytes.h Source/WTF/wtf/FlipBytes.h >index 6cd7126..24708f7 100644 >--- a/Source/WTF/wtf/FlipBytes.h >+++ b/Source/WTF/wtf/FlipBytes.h >@@ -24,6 +24,7 @@ > */ > > #pragma once >+#include "Optional.h" > > namespace WTF { > >@@ -98,6 +99,42 @@ inline T flipBytes(T value) > return T(); > } > >+template<typename T> >+inline T flipBytes(WTF::Optional<T> value) >+{ >+ if (sizeof(*value) == 1) >+ return *value; >+ if (sizeof(*value) == 2) { >+ union { >+ T original; >+ uint16_t word; >+ } u; >+ u.original = *value; >+ u.word = flipBytes(u.word); >+ return u.original; >+ } >+ if (sizeof(*value) == 4) { >+ union { >+ T original; >+ uint32_t word; >+ } u; >+ u.original = *value; >+ u.word = flipBytes(u.word); >+ return u.original; >+ } >+ if (sizeof(*value) == 8) { >+ union { >+ T original; >+ uint64_t word; >+ } u; >+ u.original = *value; >+ u.word = flipBytes(u.word); >+ return u.original; >+ } >+ RELEASE_ASSERT_NOT_REACHED(); >+ return T(); >+} >+ > template<typename T> > inline T flipBytesIfLittleEndian(T value, bool littleEndian) > {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 775791
:
691155
|
691158
|
691161
|
691164
|
691167
|
691170
|
691173
|
703200
|
703203
|
703206
|
703209
| 712938 |
712941
|
712944
|
712947
|
712950
|
712953
|
712956
|
712959
|
728484