Blob Blame History Raw
diff -up js-1.8.5/js/src/jsval.h.tag js-1.8.5/js/src/jsval.h
--- js-1.8.5/js/src/jsval.h.tag	2017-03-10 16:27:06.000000000 +0100
+++ js-1.8.5/js/src/jsval.h	2017-03-10 16:30:39.000000000 +0100
@@ -66,7 +66,7 @@ JS_BEGIN_EXTERN_C
 #endif
 
 #if JS_BITS_PER_WORD == 64
-# define JSVAL_TAG_SHIFT 47
+# define JSVAL_TAG_SHIFT 48
 #endif
 
 /*
@@ -135,7 +135,8 @@ JS_STATIC_ASSERT(sizeof(JSValueTag) == 4
 /* Remember to propagate changes to the C defines below. */
 JS_ENUM_HEADER(JSValueTag, uint32)
 {
-    JSVAL_TAG_MAX_DOUBLE           = 0x1FFF0,
+    JSVAL_TAG_DUMMY                = 0xFFFFFFFF,  /* Make sure the enums cannot fit 16-bits. */
+    JSVAL_TAG_MAX_DOUBLE           = 0xFFF8,
     JSVAL_TAG_INT32                = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32,
     JSVAL_TAG_UNDEFINED            = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED,
     JSVAL_TAG_STRING               = JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING,
@@ -196,7 +197,7 @@ typedef uint32 JSValueTag;
 #elif JS_BITS_PER_WORD == 64
 
 typedef uint32 JSValueTag;
-#define JSVAL_TAG_MAX_DOUBLE         ((uint32)(0x1FFF0))
+#define JSVAL_TAG_MAX_DOUBLE         ((uint32)(0xFFF8))
 #define JSVAL_TAG_INT32              (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_INT32)
 #define JSVAL_TAG_UNDEFINED          (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_UNDEFINED)
 #define JSVAL_TAG_STRING             (uint32)(JSVAL_TAG_MAX_DOUBLE | JSVAL_TYPE_STRING)
@@ -236,8 +237,8 @@ typedef uint64 JSValueShiftedTag;
 
 #elif JS_BITS_PER_WORD == 64
 
-#define JSVAL_PAYLOAD_MASK           0x00007FFFFFFFFFFFLL
-#define JSVAL_TAG_MASK               0xFFFF800000000000LL
+#define JSVAL_PAYLOAD_MASK           0x0000FFFFFFFFFFFFLL
+#define JSVAL_TAG_MASK               0xFFFF000000000000LL
 #define JSVAL_TYPE_TO_TAG(type)      ((JSValueTag)(JSVAL_TAG_MAX_DOUBLE | (type)))
 #define JSVAL_TYPE_TO_SHIFTED_TAG(type) (((uint64)JSVAL_TYPE_TO_TAG(type)) << JSVAL_TAG_SHIFT)
 
@@ -297,8 +298,8 @@ typedef union jsval_layout
 #if (!defined(_WIN64) && defined(__cplusplus))
     /* MSVC does not pack these correctly :-( */
     struct {
-        uint64             payload47 : 47;
-        JSValueTag         tag : 17;
+        uint64             payload48 : 48;
+        JSValueTag         tag : 16;
     } debugView;
 #endif
     struct {
@@ -339,8 +340,8 @@ typedef union jsval_layout
 {
     uint64 asBits;
     struct {
-        JSValueTag         tag : 17;
-        uint64             payload47 : 47;
+        JSValueTag         tag : 16;
+        uint64             payload48 : 48;
     } debugView;
     struct {
         uint32             padding;
diff -up js-1.8.5/js/src/jsvalue.h.tag js-1.8.5/js/src/jsvalue.h
--- js-1.8.5/js/src/jsvalue.h.tag	2017-03-10 16:27:06.000000000 +0100
+++ js-1.8.5/js/src/jsvalue.h	2017-03-10 16:27:06.000000000 +0100
@@ -255,7 +255,7 @@ JSVAL_SAME_TYPE_IMPL(jsval_layout lhs, j
 {
     uint64 lbits = lhs.asBits, rbits = rhs.asBits;
     return (lbits <= JSVAL_TAG_MAX_DOUBLE && rbits <= JSVAL_TAG_MAX_DOUBLE) ||
-           (((lbits ^ rbits) & 0xFFFF800000000000LL) == 0);
+           (((lbits ^ rbits) & 0xFFFF000000000000LL) == 0);
 }
 
 static JS_ALWAYS_INLINE jsval_layout
@@ -277,7 +277,7 @@ JSVAL_TO_PRIVATE_UINT32_IMPL(jsval_layou
 static JS_ALWAYS_INLINE JSValueType
 JSVAL_EXTRACT_NON_DOUBLE_TYPE_IMPL(jsval_layout l)
 {
-   uint64 type = (l.asBits >> JSVAL_TAG_SHIFT) & 0xF;
+   uint64 type = (l.asBits >> JSVAL_TAG_SHIFT) & 0x7;
    JS_ASSERT(type > JSVAL_TYPE_DOUBLE);
    return (JSValueType)type;
 }
diff -up js-1.8.5/js/src/methodjit/MethodJIT.cpp.tag js-1.8.5/js/src/methodjit/MethodJIT.cpp
--- js-1.8.5/js/src/methodjit/MethodJIT.cpp.tag	2011-03-31 21:08:36.000000000 +0200
+++ js-1.8.5/js/src/methodjit/MethodJIT.cpp	2017-03-10 16:27:06.000000000 +0100
@@ -186,8 +186,8 @@ JS_STATIC_ASSERT(sizeof(VMFrame) % 16 ==
 JS_STATIC_ASSERT(offsetof(VMFrame, savedRBX) == 0x58);
 JS_STATIC_ASSERT(offsetof(VMFrame, regs.fp) == 0x38);
 
-JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF800000000000LL);
-JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x00007FFFFFFFFFFFLL);
+JS_STATIC_ASSERT(JSVAL_TAG_MASK == 0xFFFF000000000000LL);
+JS_STATIC_ASSERT(JSVAL_PAYLOAD_MASK == 0x0000FFFFFFFFFFFFLL);
 
 asm volatile (
 ".text\n"