summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-01-31 18:15:25 +0300
committerDmitry Stogov <dmitry@zend.com>2018-01-31 18:15:25 +0300
commit9c7fb529ce724afcdfcd10705cdb0515b33bf84b (patch)
tree91112660b26d2d70912f35b6b8139e13b1a77232
parentf67f455ef70c2cffcf8c14c0172ba57126221eff (diff)
downloadphp-git-9c7fb529ce724afcdfcd10705cdb0515b33bf84b.tar.gz
Changed FETCH_CONSTANT instruction format (extended_value moved into op1)
-rw-r--r--Zend/zend_compile.c4
-rw-r--r--Zend/zend_vm_def.h6
-rw-r--r--Zend/zend_vm_execute.h4
-rw-r--r--Zend/zend_vm_gen.php5
-rw-r--r--Zend/zend_vm_opcodes.c2
-rw-r--r--Zend/zend_vm_opcodes.h2
-rw-r--r--ext/opcache/Optimizer/compact_literals.c2
-rw-r--r--ext/opcache/Optimizer/zend_dump.c14
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c1
9 files changed, 20 insertions, 20 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index fe2874e511..e8a16c4ef0 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -7724,9 +7724,9 @@ void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */
opline->op2.constant = zend_add_const_name_literal(
CG(active_op_array), resolved_name, 0);
} else {
- opline->extended_value = IS_CONSTANT_UNQUALIFIED;
+ opline->op1.num = IS_CONSTANT_UNQUALIFIED;
if (FC(current_namespace)) {
- opline->extended_value |= IS_CONSTANT_IN_NAMESPACE;
+ opline->op1.num |= IS_CONSTANT_IN_NAMESPACE;
opline->op2.constant = zend_add_const_name_literal(
CG(active_op_array), resolved_name, 1);
} else {
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index a093f5dcf4..a7fa49c433 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -4987,17 +4987,17 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED, CONST, CONST_FETCH)
+ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED|CONST_FETCH, CONST)
{
USE_OPLINE
zend_constant *c;
if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(opline, opline->op2))))) {
c = CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(opline, opline->op2)));
- } else if ((c = zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->extended_value)) == NULL) {
+ } else if ((c = zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num)) == NULL) {
SAVE_OPLINE();
- if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
+ if ((opline->op1.num & IS_CONSTANT_UNQUALIFIED) != 0) {
char *actual = (char *)zend_memrchr(Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)), '\\', Z_STRLEN_P(RT_CONSTANT(opline, opline->op2)));
if (!actual) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 5c694e4fea..1277156fdf 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -33271,10 +33271,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CON
if (EXPECTED(CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(opline, opline->op2))))) {
c = CACHED_PTR(Z_CACHE_SLOT_P(RT_CONSTANT(opline, opline->op2)));
- } else if ((c = zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->extended_value)) == NULL) {
+ } else if ((c = zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num)) == NULL) {
SAVE_OPLINE();
- if ((opline->extended_value & IS_CONSTANT_UNQUALIFIED) != 0) {
+ if ((opline->op1.num & IS_CONSTANT_UNQUALIFIED) != 0) {
char *actual = (char *)zend_memrchr(Z_STRVAL_P(RT_CONSTANT(opline, opline->op2)), '\\', Z_STRLEN_P(RT_CONSTANT(opline, opline->op2)));
if (!actual) {
ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_STR_P(RT_CONSTANT(opline, opline->op2)));
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index 33e6318041..75afa99624 100644
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -69,6 +69,7 @@ $vm_op_flags = array(
"ZEND_VM_OP_NEXT" => 0x60,
"ZEND_VM_OP_CLASS_FETCH" => 0x70,
"ZEND_VM_OP_CONSTRUCTOR" => 0x80,
+ "ZEND_VM_OP_CONST_FETCH" => 0x90,
"ZEND_VM_EXT_VAR_FETCH" => 1<<16,
"ZEND_VM_EXT_ISSET" => 1<<17,
@@ -81,7 +82,7 @@ $vm_op_flags = array(
"ZEND_VM_EXT_JMP_ADDR" => 0x03000000,
"ZEND_VM_EXT_DIM_OBJ" => 0x04000000,
// unused 0x5000000
- "ZEND_VM_EXT_CONST_FETCH" => 0x06000000,
+ // unused 0x6000000
"ZEND_VM_EXT_TYPE" => 0x07000000,
"ZEND_VM_EXT_EVAL" => 0x08000000,
"ZEND_VM_EXT_TYPE_MASK" => 0x09000000,
@@ -113,13 +114,13 @@ $vm_op_decode = array(
"NEXT" => ZEND_VM_OP_NEXT,
"CLASS_FETCH" => ZEND_VM_OP_CLASS_FETCH,
"CONSTRUCTOR" => ZEND_VM_OP_CONSTRUCTOR,
+ "CONST_FETCH" => ZEND_VM_OP_CONST_FETCH,
);
$vm_ext_decode = array(
"NUM" => ZEND_VM_EXT_NUM,
"JMP_ADDR" => ZEND_VM_EXT_JMP_ADDR,
"DIM_OBJ" => ZEND_VM_EXT_DIM_OBJ,
- "CONST_FETCH" => ZEND_VM_EXT_CONST_FETCH,
"VAR_FETCH" => ZEND_VM_EXT_VAR_FETCH,
"ARRAY_INIT" => ZEND_VM_EXT_ARRAY_INIT,
"TYPE" => ZEND_VM_EXT_TYPE,
diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c
index e0ddd8ab7c..876dfef315 100644
--- a/Zend/zend_vm_opcodes.c
+++ b/Zend/zend_vm_opcodes.c
@@ -323,7 +323,7 @@ static uint32_t zend_vm_opcodes_flags[199] = {
0x00000701,
0x00000751,
0x0000070b,
- 0x06000301,
+ 0x00000391,
0x00000000,
0x00000000,
0x00000000,
diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h
index 05de3a4a9e..a1191cac29 100644
--- a/Zend/zend_vm_opcodes.h
+++ b/Zend/zend_vm_opcodes.h
@@ -47,6 +47,7 @@
#define ZEND_VM_OP_NEXT 0x00000060
#define ZEND_VM_OP_CLASS_FETCH 0x00000070
#define ZEND_VM_OP_CONSTRUCTOR 0x00000080
+#define ZEND_VM_OP_CONST_FETCH 0x00000090
#define ZEND_VM_EXT_VAR_FETCH 0x00010000
#define ZEND_VM_EXT_ISSET 0x00020000
#define ZEND_VM_EXT_ARG_NUM 0x00040000
@@ -56,7 +57,6 @@
#define ZEND_VM_EXT_NUM 0x01000000
#define ZEND_VM_EXT_JMP_ADDR 0x03000000
#define ZEND_VM_EXT_DIM_OBJ 0x04000000
-#define ZEND_VM_EXT_CONST_FETCH 0x06000000
#define ZEND_VM_EXT_TYPE 0x07000000
#define ZEND_VM_EXT_EVAL 0x08000000
#define ZEND_VM_EXT_TYPE_MASK 0x09000000
diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c
index 7dfc2fadbf..63102beaac 100644
--- a/ext/opcache/Optimizer/compact_literals.c
+++ b/ext/opcache/Optimizer/compact_literals.c
@@ -181,7 +181,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx
LITERAL_INFO(opline->op1.constant, LITERAL_CONST, 1, 1, 2);
break;
case ZEND_FETCH_CONSTANT:
- if ((opline->extended_value & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) {
+ if ((opline->op1.num & (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) == (IS_CONSTANT_IN_NAMESPACE|IS_CONSTANT_UNQUALIFIED)) {
LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 1, 1, 5);
} else {
LITERAL_INFO(opline->op2.constant, LITERAL_CONST, 1, 1, 3);
diff --git a/ext/opcache/Optimizer/zend_dump.c b/ext/opcache/Optimizer/zend_dump.c
index 07e5dfe9f7..8f874d8bdb 100644
--- a/ext/opcache/Optimizer/zend_dump.c
+++ b/ext/opcache/Optimizer/zend_dump.c
@@ -130,6 +130,13 @@ static void zend_dump_unused_op(const zend_op *opline, znode_op op, uint32_t fla
zend_dump_class_fetch_type(op.num);
} else if (ZEND_VM_OP_CONSTRUCTOR == (flags & ZEND_VM_OP_MASK)) {
fprintf(stderr, " CONSTRUCTOR");
+ } else if (ZEND_VM_OP_CONST_FETCH == (flags & ZEND_VM_EXT_MASK)) {
+ if (op.num & IS_CONSTANT_UNQUALIFIED) {
+ fprintf(stderr, " (unqualified)");
+ }
+ if (op.num & IS_CONSTANT_IN_NAMESPACE) {
+ fprintf(stderr, " (in-namespace)");
+ }
}
}
@@ -449,13 +456,6 @@ static void zend_dump_op(const zend_op_array *op_array, const zend_basic_block *
} else if (opline->extended_value == ZEND_ASSIGN_OBJ) {
fprintf(stderr, " (obj)");
}
- } else if (ZEND_VM_EXT_CONST_FETCH == (flags & ZEND_VM_EXT_MASK)) {
- if (opline->extended_value & IS_CONSTANT_UNQUALIFIED) {
- fprintf(stderr, " (unqualified)");
- }
- if (opline->extended_value & IS_CONSTANT_IN_NAMESPACE) {
- fprintf(stderr, " (in-namespace)");
- }
} else if (ZEND_VM_EXT_TYPE == (flags & ZEND_VM_EXT_MASK)) {
switch (opline->extended_value) {
case IS_NULL:
diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c
index 70f45882be..1bf05a50a9 100644
--- a/ext/opcache/Optimizer/zend_optimizer.c
+++ b/ext/opcache/Optimizer/zend_optimizer.c
@@ -276,7 +276,6 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array,
return 0;
case ZEND_INIT_STATIC_METHOD_CALL:
case ZEND_CATCH:
- case ZEND_FETCH_CONSTANT:
case ZEND_FETCH_CLASS_CONSTANT:
case ZEND_DEFINED:
case ZEND_NEW: