diff options
-rw-r--r-- | Zend/zend_vm_def.h | 14 | ||||
-rw-r--r-- | Zend/zend_vm_gen.php | 39 | ||||
-rw-r--r-- | Zend/zend_vm_opcodes.c | 2 | ||||
-rw-r--r-- | Zend/zend_vm_opcodes.h | 14 |
4 files changed, 40 insertions, 29 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 6089ab0524..41040596e0 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2591,7 +2591,7 @@ ZEND_VM_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, ADDR) ZEND_VM_JMP(opline); } -ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ADDR, REL_LINE) +ZEND_VM_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, ADDR, REL_OPLINE) { USE_OPLINE zend_free_op free_op1; @@ -4205,7 +4205,7 @@ ZEND_VM_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY) HANDLE_EXCEPTION(); } -ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, LINE) +ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV, OPLINE) { USE_OPLINE zend_class_entry *ce, *catch_ce; @@ -6097,7 +6097,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, ADDR) } } -ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, REL_LINE) +ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, REL_OPLINE) { USE_OPLINE zval *array; @@ -6274,7 +6274,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit): ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, REL_LINE) +ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, REL_OPLINE) { USE_OPLINE zval *array; @@ -6475,7 +6475,7 @@ ZEND_VM_C_LABEL(fe_fetch_w_exit): ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) +ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET) { USE_OPLINE zval *value; @@ -7671,7 +7671,7 @@ ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY) ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, LINE, FCALL) +ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, OPLINE, FAST_CALL) { USE_OPLINE zval *fast_call = EX_VAR(opline->result.var); @@ -7687,7 +7687,7 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ADDR, LINE, FCALL) ZEND_VM_CONTINUE(); } -ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, LINE, FRET) +ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, OPLINE, FAST_RET) { USE_OPLINE zval *fast_call = EX_VAR(opline->op1.var); diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 35b865731c..2f93acc1d6 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -60,19 +60,19 @@ $vm_op_flags = array( "ZEND_VM_OP1_TMPVAR" => 1<<2, "ZEND_VM_OP1_NUM" => 1<<3, "ZEND_VM_OP1_ADDR" => 1<<4, - "ZEND_VM_OP1_LINE" => 1<<5, + "ZEND_VM_OP1_OPLINE" => 1<<5, "ZEND_VM_OP2_SPEC" => 1<<8, "ZEND_VM_OP2_CONST" => 1<<9, "ZEND_VM_OP2_TMPVAR" => 1<<10, "ZEND_VM_OP2_NUM" => 1<<11, "ZEND_VM_OP2_ADDR" => 1<<12, - "ZEND_VM_OP2_LINE" => 1<<13, + "ZEND_VM_OP2_OPLINE" => 1<<13, "ZEND_VM_EXT_NUM" => 1<<16, "ZEND_VM_EXT_VAR" => 1<<17, - "ZEND_VM_EXT_LINE" => 1<<18, - "ZEND_VM_EXT_REL_LINE" => 1<<19, + "ZEND_VM_EXT_OPLINE" => 1<<18, + "ZEND_VM_EXT_REL_OPLINE" => 1<<19, "ZEND_VM_EXT_DIM_OBJ" => 1<<20, "ZEND_VM_EXT_CLASS_FETCH" => 1<<21, "ZEND_VM_EXT_CONST_FETCH" => 1<<22, @@ -80,8 +80,8 @@ $vm_op_flags = array( "ZEND_VM_EXT_ARRAY_INIT" => 1<<24, "ZEND_VM_EXT_TYPE" => 1<<25, "ZEND_VM_EXT_EVAL" => 1<<26, - "ZEND_VM_EXT_FCALL" => 1<<27, - "ZEND_VM_EXT_FRET" => 1<<28, + "ZEND_VM_EXT_FAST_CALL" => 1<<27, + "ZEND_VM_EXT_FAST_RET" => 1<<28, "ZEND_VM_EXT_ISSET" => 1<<29, ); @@ -99,14 +99,14 @@ $vm_op_decode = array( "TMPVAR" => ZEND_VM_OP1_SPEC | ZEND_VM_OP1_TMPVAR, "NUM" => ZEND_VM_OP1_NUM, "ADDR" => ZEND_VM_OP1_ADDR, - "LINE" => ZEND_VM_OP1_LINE, + "OPLINE" => ZEND_VM_OP1_OPLINE, ); $vm_ext_decode = array( "NUM" => ZEND_VM_EXT_NUM, "VAR" => ZEND_VM_EXT_VAR, - "LINE" => ZEND_VM_EXT_LINE, - "REL_LINE" => ZEND_VM_EXT_REL_LINE, + "OPLINE" => ZEND_VM_EXT_OPLINE, + "REL_OPLINE" => ZEND_VM_EXT_REL_OPLINE, "DIM_OBJ" => ZEND_VM_EXT_DIM_OBJ, "CLASS_FETCH" => ZEND_VM_EXT_CLASS_FETCH, "CONST_FETCH" => ZEND_VM_EXT_CONST_FETCH, @@ -114,8 +114,8 @@ $vm_ext_decode = array( "ARRAY_INIT" => ZEND_VM_EXT_ARRAY_INIT, "TYPE" => ZEND_VM_EXT_TYPE, "EVAL" => ZEND_VM_EXT_EVAL, - "FCALL" => ZEND_VM_EXT_FCALL, - "FRET" => ZEND_VM_EXT_FRET, + "FAST_CALL" => ZEND_VM_EXT_FAST_CALL, + "FAST_RET" => ZEND_VM_EXT_FAST_RET, "ISSET" => ZEND_VM_EXT_ISSET, ); @@ -1399,11 +1399,16 @@ function parse_operand_spec($def, $lineno, $str, &$flags) { function parse_ext_spec($def, $lineno, $str) { global $vm_ext_decode; - if (isset($vm_ext_decode[$str])) { - return $vm_ext_decode[$str]; - } else { - die("ERROR ($def:$lineno): Wrong extended_value type '$str'\n"); + $flags = 0; + $a = explode("|",$str); + foreach($a as $val) { + if (isset($vm_ext_decode[$val])) { + $flags |= $vm_ext_decode[$val]; + } else { + die("ERROR ($def:$lineno): Wrong extended_value type '$str'\n"); + } } + return $flags; } function gen_vm($def, $skel) { @@ -1609,6 +1614,10 @@ function gen_vm($def, $skel) { fputs($f,"#define $op $code\n"); } + $code = str_pad((string)$max_opcode,$code_len," ",STR_PAD_LEFT); + $op = str_pad("ZEND_VM_LAST_OPCODE",$max_opcode_len); + fputs($f,"\n#define $op $code\n"); + fputs($f, "\n#endif\n"); fclose($f); echo "zend_vm_opcodes.h generated successfully.\n"; diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c index 4b2913b5e1..d575e04a28 100644 --- a/Zend/zend_vm_opcodes.c +++ b/Zend/zend_vm_opcodes.c @@ -321,7 +321,7 @@ static uint32_t zend_vm_opcodes_flags[182] = { 0x00000003, 0x00010707, 0x00010703, - 0x00800107, + 0x20800107, 0x20000707, 0x00000803, 0x00000801, diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 72a04699e0..2eab6e7585 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -33,17 +33,17 @@ #define ZEND_VM_OP1_TMPVAR 0x00000004 #define ZEND_VM_OP1_NUM 0x00000008 #define ZEND_VM_OP1_ADDR 0x00000010 -#define ZEND_VM_OP1_LINE 0x00000020 +#define ZEND_VM_OP1_OPLINE 0x00000020 #define ZEND_VM_OP2_SPEC 0x00000100 #define ZEND_VM_OP2_CONST 0x00000200 #define ZEND_VM_OP2_TMPVAR 0x00000400 #define ZEND_VM_OP2_NUM 0x00000800 #define ZEND_VM_OP2_ADDR 0x00001000 -#define ZEND_VM_OP2_LINE 0x00002000 +#define ZEND_VM_OP2_OPLINE 0x00002000 #define ZEND_VM_EXT_NUM 0x00010000 #define ZEND_VM_EXT_VAR 0x00020000 -#define ZEND_VM_EXT_LINE 0x00040000 -#define ZEND_VM_EXT_REL_LINE 0x00080000 +#define ZEND_VM_EXT_OPLINE 0x00040000 +#define ZEND_VM_EXT_REL_OPLINE 0x00080000 #define ZEND_VM_EXT_DIM_OBJ 0x00100000 #define ZEND_VM_EXT_CLASS_FETCH 0x00200000 #define ZEND_VM_EXT_CONST_FETCH 0x00400000 @@ -51,8 +51,8 @@ #define ZEND_VM_EXT_ARRAY_INIT 0x01000000 #define ZEND_VM_EXT_TYPE 0x02000000 #define ZEND_VM_EXT_EVAL 0x04000000 -#define ZEND_VM_EXT_FCALL 0x08000000 -#define ZEND_VM_EXT_FRET 0x10000000 +#define ZEND_VM_EXT_FAST_CALL 0x08000000 +#define ZEND_VM_EXT_FAST_RET 0x10000000 #define ZEND_VM_EXT_ISSET 0x20000000 BEGIN_EXTERN_C() @@ -240,4 +240,6 @@ END_EXTERN_C() #define ZEND_ISSET_ISEMPTY_STATIC_PROP 180 #define ZEND_FETCH_CLASS_CONSTANT 181 +#define ZEND_VM_LAST_OPCODE 181 + #endif |