Fixes/hacks to get working on Linux x64

This commit is contained in:
lw@mozilla.com 2010-05-26 22:35:39 -07:00
parent 824169c8ae
commit 7b52bb9eca
7 changed files with 34 additions and 44 deletions

View File

@ -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;

View File

@ -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)

View File

@ -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;

View File

@ -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)
{

View File

@ -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 */

View File

@ -1028,7 +1028,7 @@ BEGIN_CASE(JSOP_URSH)
u >>= (j & 31);
regs.sp--;
Uint32ToValue(u, &regs.sp[-1]);
regs.sp[-1].setNumber(u);
}
END_CASE(JSOP_URSH)

View File

@ -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