mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Get rid of duplicate handlers (ZEND_ADD_SPEC_TMP_TMP and ZEND_ADD_SPEC_VAR_VAR are absolutely the same).
This commit is contained in:
parent
5dd427eac2
commit
e5716d1b5a
@ -25,7 +25,7 @@
|
||||
* php zend_vm_gen.php
|
||||
*/
|
||||
|
||||
ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -40,7 +40,7 @@ ZEND_VM_HANDLER(1, ZEND_ADD, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -55,7 +55,7 @@ ZEND_VM_HANDLER(2, ZEND_SUB, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -70,7 +70,7 @@ ZEND_VM_HANDLER(3, ZEND_MUL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -176,7 +176,7 @@ ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -192,7 +192,7 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -208,7 +208,7 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -224,7 +224,7 @@ ZEND_VM_HANDLER(19, ZEND_IS_SMALLER, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
ZEND_VM_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
{
|
||||
USE_OPLINE
|
||||
zend_free_op free_op1, free_op2;
|
||||
@ -1994,7 +1994,7 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMP|VAR|CV, ANY)
|
||||
ZEND_VM_JMP(opline);
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(70, ZEND_FREE, TMP|VAR, ANY)
|
||||
ZEND_VM_HANDLER(70, ZEND_FREE, TMPVAR, ANY)
|
||||
{
|
||||
USE_OPLINE
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -63,6 +63,16 @@ $op_types = array(
|
||||
"CV"
|
||||
);
|
||||
|
||||
$op_types_ex = array(
|
||||
"ANY",
|
||||
"CONST",
|
||||
"TMP",
|
||||
"VAR",
|
||||
"UNUSED",
|
||||
"CV",
|
||||
"TMPVAR",
|
||||
);
|
||||
|
||||
$prefix = array(
|
||||
"ANY" => "",
|
||||
"TMP" => "_TMP",
|
||||
@ -70,6 +80,7 @@ $prefix = array(
|
||||
"CONST" => "_CONST",
|
||||
"UNUSED" => "_UNUSED",
|
||||
"CV" => "_CV",
|
||||
"TMPVAR" => "_TMPVAR",
|
||||
);
|
||||
|
||||
$typecode = array(
|
||||
@ -79,6 +90,7 @@ $typecode = array(
|
||||
"CONST" => 0,
|
||||
"UNUSED" => 3,
|
||||
"CV" => 4,
|
||||
"TMPVAR" => 0,
|
||||
);
|
||||
|
||||
$op1_type = array(
|
||||
@ -88,6 +100,7 @@ $op1_type = array(
|
||||
"CONST" => "IS_CONST",
|
||||
"UNUSED" => "IS_UNUSED",
|
||||
"CV" => "IS_CV",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_type = array(
|
||||
@ -97,6 +110,7 @@ $op2_type = array(
|
||||
"CONST" => "IS_CONST",
|
||||
"UNUSED" => "IS_UNUSED",
|
||||
"CV" => "IS_CV",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_free = array(
|
||||
@ -106,6 +120,7 @@ $op1_free = array(
|
||||
"CONST" => "0",
|
||||
"UNUSED" => "0",
|
||||
"CV" => "0",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_free = array(
|
||||
@ -115,6 +130,7 @@ $op2_free = array(
|
||||
"CONST" => "0",
|
||||
"UNUSED" => "0",
|
||||
"CV" => "0",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_get_zval_ptr = array(
|
||||
@ -124,6 +140,7 @@ $op1_get_zval_ptr = array(
|
||||
"CONST" => "opline->op1.zv",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC)",
|
||||
);
|
||||
|
||||
$op2_get_zval_ptr = array(
|
||||
@ -133,6 +150,7 @@ $op2_get_zval_ptr = array(
|
||||
"CONST" => "opline->op2.zv",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC)",
|
||||
);
|
||||
|
||||
$op1_get_zval_ptr_ptr = array(
|
||||
@ -142,6 +160,7 @@ $op1_get_zval_ptr_ptr = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_get_zval_ptr_ptr = array(
|
||||
@ -151,6 +170,7 @@ $op2_get_zval_ptr_ptr = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_get_zval_ptr_deref = array(
|
||||
@ -160,6 +180,7 @@ $op1_get_zval_ptr_deref = array(
|
||||
"CONST" => "opline->op1.zv",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_get_zval_ptr_deref = array(
|
||||
@ -169,6 +190,7 @@ $op2_get_zval_ptr_deref = array(
|
||||
"CONST" => "opline->op2.zv",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_get_zval_ptr_ptr_undef = array(
|
||||
@ -178,6 +200,7 @@ $op1_get_zval_ptr_ptr_undef = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_get_zval_ptr_ptr_undef = array(
|
||||
@ -187,6 +210,7 @@ $op2_get_zval_ptr_ptr_undef = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "NULL",
|
||||
"CV" => "_get_zval_ptr_cv_undef_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_get_obj_zval_ptr = array(
|
||||
@ -196,6 +220,7 @@ $op1_get_obj_zval_ptr = array(
|
||||
"CONST" => "opline->op1.zv",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "_get_zval_ptr_var(opline->op1.var, execute_data, &free_op1)",
|
||||
);
|
||||
|
||||
$op2_get_obj_zval_ptr = array(
|
||||
@ -205,6 +230,7 @@ $op2_get_obj_zval_ptr = array(
|
||||
"CONST" => "opline->op2.zv",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "_get_zval_ptr_var(opline->op2.var, execute_data, &free_op2)",
|
||||
);
|
||||
|
||||
$op1_get_obj_zval_ptr_deref = array(
|
||||
@ -214,6 +240,7 @@ $op1_get_obj_zval_ptr_deref = array(
|
||||
"CONST" => "opline->op1.zv",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_get_obj_zval_ptr_deref = array(
|
||||
@ -223,6 +250,7 @@ $op2_get_obj_zval_ptr_deref = array(
|
||||
"CONST" => "opline->op2.zv",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_deref_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_get_obj_zval_ptr_ptr = array(
|
||||
@ -232,6 +260,7 @@ $op1_get_obj_zval_ptr_ptr = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op1.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_get_obj_zval_ptr_ptr = array(
|
||||
@ -241,6 +270,7 @@ $op2_get_obj_zval_ptr_ptr = array(
|
||||
"CONST" => "NULL",
|
||||
"UNUSED" => "_get_obj_zval_ptr_unused(execute_data)",
|
||||
"CV" => "_get_zval_ptr_cv_\\1(execute_data, opline->op2.var TSRMLS_CC)",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_free_op = array(
|
||||
@ -250,6 +280,7 @@ $op1_free_op = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "zval_ptr_dtor_nogc(free_op1)",
|
||||
);
|
||||
|
||||
$op2_free_op = array(
|
||||
@ -259,6 +290,7 @@ $op2_free_op = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "zval_ptr_dtor_nogc(free_op2)",
|
||||
);
|
||||
|
||||
$op1_free_op_if_var = array(
|
||||
@ -268,6 +300,7 @@ $op1_free_op_if_var = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_free_op_if_var = array(
|
||||
@ -277,6 +310,7 @@ $op2_free_op_if_var = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op1_free_op_var_ptr = array(
|
||||
@ -286,6 +320,7 @@ $op1_free_op_var_ptr = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$op2_free_op_var_ptr = array(
|
||||
@ -295,6 +330,7 @@ $op2_free_op_var_ptr = array(
|
||||
"CONST" => "",
|
||||
"UNUSED" => "",
|
||||
"CV" => "",
|
||||
"TMPVAR" => "???",
|
||||
);
|
||||
|
||||
$list = array(); // list of opcode handlers and helpers in original order
|
||||
@ -650,16 +686,24 @@ function gen_labels($f, $spec, $kind, $prolog) {
|
||||
foreach($op1t as $op1) {
|
||||
if ($op1 != "ANY") {
|
||||
if (!isset($dsc["op1"][$op1])) {
|
||||
// Try to use unspecialized handler
|
||||
$op1 = "ANY";
|
||||
if (($op1 == "TMP" || $op1 == "VAR") && isset($dsc["op1"]["TMPVAR"])) {
|
||||
$op1 = "TMPVAR";
|
||||
} else {
|
||||
// Try to use unspecialized handler
|
||||
$op1 = "ANY";
|
||||
}
|
||||
}
|
||||
$op2t = $op_types;
|
||||
// For each op2.op_type except ANY
|
||||
foreach($op2t as $op2) {
|
||||
if ($op2 != "ANY") {
|
||||
if (!isset($dsc["op2"][$op2])) {
|
||||
// Try to use unspecialized handler
|
||||
$op2 = "ANY";
|
||||
if (($op2 == "TMP" || $op2 == "VAR") && isset($dsc["op2"]["TMPVAR"])) {
|
||||
$op2 = "TMPVAR";
|
||||
} else {
|
||||
// Try to use unspecialized handler
|
||||
$op2 = "ANY";
|
||||
}
|
||||
}
|
||||
// Check if specialized handler is defined
|
||||
if (isset($dsc["op1"][$op1]) &&
|
||||
@ -764,14 +808,14 @@ function gen_null_handler($f) {
|
||||
|
||||
// Generates all opcode handlers and helpers (specialized or unspecilaized)
|
||||
function gen_executor_code($f, $spec, $kind, $prolog) {
|
||||
global $list, $opcodes, $helpers, $op_types;
|
||||
global $list, $opcodes, $helpers, $op_types_ex;
|
||||
|
||||
if ($spec) {
|
||||
// Produce specialized executor
|
||||
$op1t = $op_types;
|
||||
$op1t = $op_types_ex;
|
||||
// for each op1.op_type
|
||||
foreach($op1t as $op1) {
|
||||
$op2t = $op_types;
|
||||
$op2t = $op_types_ex;
|
||||
// for each op2.op_type
|
||||
foreach($op2t as $op2) {
|
||||
// for each handlers in helpers in original order
|
||||
|
Loading…
Reference in New Issue
Block a user