mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Fixes/hacks to get working on Linux x64
This commit is contained in:
parent
824169c8ae
commit
7b52bb9eca
@ -3311,27 +3311,24 @@ class Value
|
||||
}
|
||||
|
||||
void setPrivateVoidPtr(void *ptr) {
|
||||
data.s.mask32 = JSVAL_MASK32_INT32;
|
||||
data.s.payload.ptr = ptr;
|
||||
data = PRIVATE_TO_JSVAL_IMPL(ptr);
|
||||
}
|
||||
|
||||
void *asPrivateVoidPtr() const {
|
||||
JS_ASSERT(data.s.mask32 == JSVAL_MASK32_INT32);
|
||||
return data.s.payload.ptr;
|
||||
JS_ASSERT(isDouble());
|
||||
return JSVAL_TO_PRIVATE_IMPL(data);
|
||||
}
|
||||
|
||||
void setPrivateUint32(uint32 u) {
|
||||
data.s.mask32 = JSVAL_MASK32_INT32;
|
||||
data.s.payload.u32 = u;
|
||||
setInt32((int32)u);
|
||||
}
|
||||
|
||||
uint32 asPrivateUint32() const {
|
||||
JS_ASSERT(data.s.mask32 == JSVAL_MASK32_INT32);
|
||||
return data.s.payload.u32;
|
||||
return (uint32)asInt32();
|
||||
}
|
||||
|
||||
uint32 &asPrivateUint32Ref() {
|
||||
JS_ASSERT(data.s.mask32 == JSVAL_MASK32_INT32);
|
||||
JS_ASSERT(isInt32());
|
||||
return data.s.payload.u32;
|
||||
}
|
||||
} VALUE_ALIGNMENT;
|
||||
|
@ -2732,7 +2732,7 @@ array_indexOfHelper(JSContext *cx, JSBool isLast, uintN argc, Value *vp)
|
||||
return JS_FALSE;
|
||||
}
|
||||
if (!hole && StrictlyEqual(cx, *vp, tosearch)) {
|
||||
Uint32ToValue(i, vp);
|
||||
vp->setNumber(i);
|
||||
return JS_TRUE;
|
||||
}
|
||||
if (i == stop)
|
||||
|
@ -203,8 +203,9 @@ MapAlignedPages(size_t size, size_t alignment)
|
||||
* We don't use MAP_FIXED here, because it can cause the *replacement*
|
||||
* of existing mappings, and we only want to create new mappings.
|
||||
*/
|
||||
// TODO: this is totally a hack for now; need to replace
|
||||
void *p = mmap((caddr_t) alignment, size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0);
|
||||
MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON | MAP_32BIT, -1, 0);
|
||||
if (p == MAP_FAILED)
|
||||
return NULL;
|
||||
return p;
|
||||
@ -219,7 +220,8 @@ MapPages(void *addr, size_t size)
|
||||
* We don't use MAP_FIXED here, because it can cause the *replacement*
|
||||
* of existing mappings, and we only want to create new mappings.
|
||||
*/
|
||||
void *p = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON,
|
||||
// TODO: this is totally a hack for now; need to replace
|
||||
void *p = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_32BIT,
|
||||
-1, 0);
|
||||
if (p == MAP_FAILED)
|
||||
return NULL;
|
||||
|
@ -600,15 +600,6 @@ ValueFitsInInt32(const Value &v, int32_t *pi)
|
||||
return v.isDouble() && JSDOUBLE_IS_INT32(v.asDouble(), *pi);
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE void
|
||||
Uint32ToValue(uint32_t u, Value *vp)
|
||||
{
|
||||
if (JS_UNLIKELY(u > INT32_MAX))
|
||||
vp->setDouble(u);
|
||||
else
|
||||
vp->setInt32((int32_t)u);
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
Value::Value(NumberTag arg)
|
||||
{
|
||||
|
@ -643,35 +643,35 @@ NewObject(JSContext *cx, js::Class *clasp, JSObject *proto, JSObject *parent,
|
||||
JS_ALWAYS_INLINE
|
||||
Value::Value(ObjectTag arg)
|
||||
{
|
||||
data.s.mask32 = arg.obj.isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
JSValueMask32 mask = arg.obj.isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
: JSVAL_MASK32_NONFUNOBJ;
|
||||
data.s.payload.obj = &arg.obj;
|
||||
data = OBJECT_TO_JSVAL_IMPL(mask, &arg.obj);
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE
|
||||
Value::Value(ObjectOrNullTag arg)
|
||||
{
|
||||
data.s.mask32 = arg.obj ? arg.obj->isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
JSValueMask32 mask = arg.obj ? arg.obj->isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
: JSVAL_MASK32_NONFUNOBJ
|
||||
: JSVAL_MASK32_NULL;
|
||||
data.s.payload.obj = arg.obj;
|
||||
data = OBJECT_TO_JSVAL_IMPL(mask, arg.obj);
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
Value::setObject(JSObject &arg)
|
||||
{
|
||||
data.s.mask32 = arg.isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
JSValueMask32 mask = arg.isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
: JSVAL_MASK32_NONFUNOBJ;
|
||||
data.s.payload.obj = &arg;
|
||||
data = OBJECT_TO_JSVAL_IMPL(mask, &arg);
|
||||
}
|
||||
|
||||
JS_ALWAYS_INLINE void
|
||||
Value::setObjectOrNull(JSObject *arg)
|
||||
{
|
||||
data.s.mask32 = arg ? arg->isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
JSValueMask32 mask = arg ? arg->isFunction() ? JSVAL_MASK32_FUNOBJ
|
||||
: JSVAL_MASK32_NONFUNOBJ
|
||||
: JSVAL_MASK32_NULL;
|
||||
data.s.payload.obj = arg;
|
||||
data = OBJECT_TO_JSVAL_IMPL(mask, arg);
|
||||
}
|
||||
|
||||
} /* namespace js */
|
||||
|
@ -1028,7 +1028,7 @@ BEGIN_CASE(JSOP_URSH)
|
||||
u >>= (j & 31);
|
||||
|
||||
regs.sp--;
|
||||
Uint32ToValue(u, ®s.sp[-1]);
|
||||
regs.sp[-1].setNumber(u);
|
||||
}
|
||||
END_CASE(JSOP_URSH)
|
||||
|
||||
|
@ -384,7 +384,7 @@ JSVAL_IS_SPECIFIC_BOOLEAN(jsval_layout l, JSBool b)
|
||||
static JS_ALWAYS_INLINE jsval_layout
|
||||
PRIVATE_TO_JSVAL_IMPL(void *ptr)
|
||||
{
|
||||
JS_ASSERT(((uint32)ptr | 1) == 0);
|
||||
JS_ASSERT(((uint32)ptr & 1) == 0);
|
||||
jsval_layout l;
|
||||
l.s.tag.nanBits = 0;
|
||||
l.s.payload.ptr = ptr;
|
||||
@ -473,12 +473,12 @@ STRING_TO_JSVAL_IMPL(JSString *str)
|
||||
{
|
||||
JS_ASSERT((size_t)str < (size_t)0xFFFFFFFF);
|
||||
jsval_layout l;
|
||||
l.asBits = BUILD_JSVAL(JSVAL_MASK32_STRING, (uint32)str);
|
||||
l.asBits = BUILD_JSVAL(JSVAL_MASK32_STRING, (uint32)(size_t)str);
|
||||
return l;
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE JSString *
|
||||
JSVAL_TO_STRING_IMPL(jsval_layout v)
|
||||
JSVAL_TO_STRING_IMPL(jsval_layout l)
|
||||
{
|
||||
return (JSString *)(uint64)l.s.payload.ptr;
|
||||
}
|
||||
@ -494,7 +494,7 @@ OBJECT_TO_JSVAL_IMPL(JSValueMask32 mask32, JSObject *obj)
|
||||
{
|
||||
JS_ASSERT((size_t)obj < (size_t)0xFFFFFFFF);
|
||||
jsval_layout l;
|
||||
l.asBits = BUILD_JSVAL(mask32, (uint32)obj);
|
||||
l.asBits = BUILD_JSVAL(mask32, (uint32)(size_t)obj);
|
||||
return l;
|
||||
}
|
||||
|
||||
@ -521,16 +521,16 @@ JSVAL_IS_SPECIFIC_BOOLEAN(jsval_layout l, JSBool b)
|
||||
static JS_ALWAYS_INLINE jsval_layout
|
||||
PRIVATE_TO_JSVAL_IMPL(void *ptr)
|
||||
{
|
||||
JS_ASSERT(((uint32)ptr | 1) == 0);
|
||||
JS_ASSERT(((uint32)(size_t)ptr & 1) == 0);
|
||||
jsval_layout l;
|
||||
l.asBits = 0x8000000000000000LL | (ptr >> 1);
|
||||
l.asBits = 0x8000000000000000LL | ((size_t)ptr >> 1);
|
||||
return l;
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE void *
|
||||
JSVAL_TO_PRIVATE_IMPL(jsval_layout l)
|
||||
{
|
||||
return (void *)(l.s.payload.asBits << 1);
|
||||
return (void *)(l.asBits << 1);
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE jsval_layout
|
||||
|
Loading…
Reference in New Issue
Block a user