From: Dmitry Stogov Date: Tue, 27 Feb 2018 21:53:30 +0000 (+0300) Subject: Change CG_TYPE_INFO() layout to provide more room for GC_INFO() X-Git-Tag: php-7.3.0alpha1~289 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c9e1419fd22ac395a3f4e388098265e1687ae13b;p=php Change CG_TYPE_INFO() layout to provide more room for GC_INFO() --- diff --git a/Zend/zend_types.h b/Zend/zend_types.h index 6119083376..af185ad276 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -206,12 +206,6 @@ struct _zval_struct { typedef struct _zend_refcounted_h { uint32_t refcount; /* reference counter 32-bit */ union { - struct { - ZEND_ENDIAN_LOHI_3( - zend_uchar type, - zend_uchar flags, /* used for strings & objects */ - uint16_t gc_info) /* keeps GC information, must be initialized by 0 */ - } v; uint32_t type_info; } u; } zend_refcounted_h; @@ -446,11 +440,11 @@ static zend_always_inline zend_uchar zval_get_type(const zval* pz) { #define GC_ADDREF_EX(p, rc) zend_gc_addref_ex(&(p)->gc, rc) #define GC_DELREF_EX(p, rc) zend_gc_delref_ex(&(p)->gc, rc) -#define GC_TYPE_MASK 0x000000ff -#define GC_FLAGS_MASK 0x0000ff00 -#define GC_INFO_MASK 0xffff0000 -#define GC_FLAGS_SHIFT 8 -#define GC_INFO_SHIFT 16 +#define GC_TYPE_MASK 0x0000000f +#define GC_FLAGS_MASK 0x000003f0 +#define GC_INFO_MASK 0xfffffc00 +#define GC_FLAGS_SHIFT 4 +#define GC_INFO_SHIFT 10 static zend_always_inline zend_uchar zval_gc_type(uint32_t gc_type_info) { return (gc_type_info & GC_TYPE_MASK);