You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
5a9e110bf9 ChangeLog update 21 years ago
..
RFCs this one is declined 22 years ago
tests Fixed bug #30407 (Strange behaviour of default arguments) 21 years ago
ChangeLog ChangeLog update 21 years ago
FlexLexer.h Replace macros which begin with an underscore through an appropiately 26 years ago
LICENSE Bump year. 23 years ago
Makefile.am - Add entry for zend_strtod.c in belief that this is still active. 22 years ago
Makefile.frag - Fix dependency 21 years ago
OBJECTS2_HOWTO - modifyable -> modifiable 22 years ago
README.ZEND_VM --without-lines changed to --with-lines 22 years ago
ZEND_CHANGES Add some information about array overloading 22 years ago
Zend.dsp Added zend_strtod.* to the build 22 years ago
Zend.m4 - Compile fix for systems without int32_t typedef 21 years ago
ZendCore.dep - Rename modules.h to zend_modules.h 25 years ago
ZendTS.dsp Added zend_strtod.* to the build 22 years ago
acconfig.h explicitly including sys/select.h as NetWare LibC sys/types.h does not include sys/select.h implicitly as other LibC 22 years ago
acinclude.m4 - Added AC_ZEND_C_BIGENDIAN macro (as requested by Andi) 21 years ago
bench.php - Move bench.php to Zend/ 22 years ago
build.mk Add clean target which removes standard targets 27 years ago
buildconf Use libtool to build. 27 years ago
configure.in - Compile fix for systems without uint32_t typedef 21 years ago
flex.skl - added script encoding support to Zend Engine 2. 23 years ago
header - Added missing header sections. 21 years ago
zend.c MFB: - Rationalize code a bit 21 years ago
zend.h Fixed bugs #29767 and #31683 (__get and __set methods must not modify property name). 21 years ago
zend.ico Zend Library 27 years ago
zend_API.c - A little optimization to prevent problems when trying to reimplement an 21 years ago
zend_API.h added some missing zend_[declare|update]_property_...() convenience 21 years ago
zend_alloc.c - Fix leak report for 0 byte allocations (Dmitry) 22 years ago
zend_alloc.h - Added missing defines. 22 years ago
zend_arg_defs.c - Added missing header sections. 21 years ago
zend_builtin_functions.c Fix debug_trace with eval (patch from Antony Dovgal) 21 years ago
zend_builtin_functions.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 22 years ago
zend_compile.c Fixed possible memory corruption 21 years ago
zend_compile.h - Cleanup foreach handling 21 years ago
zend_config.nw.h explicitly including sys/select.h as NetWare LibC sys/types.h does not include sys/select.h implicitly as other LibC 22 years ago
zend_config.w32.h - Windows support strcoll too. 22 years ago
zend_constants.c - Revert the weird change of ZEND_STRS() macro and use the correct 21 years ago
zend_constants.h - Fixed a 64bit issue (for zend_builtin_functions.c, module_number is an int). 22 years ago
zend_default_classes.c Centralize exceptions code in zend_exceptions.[ch]. 22 years ago
zend_dynamic_array.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_dynamic_array.h - Fix prototype 22 years ago
zend_errors.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_exceptions.c Fixed bug #30904 (segfault when recording soapclient into session). 21 years ago
zend_exceptions.h - Add new class ErrorException to encapsulate errors in exceptions 22 years ago
zend_execute.c - Two new API calls for Derick (retreive CV name and value) by Dmitry 21 years ago
zend_execute.h - Two new API calls for Derick (retreive CV name and value) by Dmitry 21 years ago
zend_execute_API.c - Be more gracious in reflection API 21 years ago
zend_extensions.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_extensions.h - Bump API version 22 years ago
zend_fast_cache.h - Improve performance by inlining zend_ptr_stack_n_push(). var_args can 22 years ago
zend_globals.h - Fixed bug #30630: Added a BSD based strtod function that is 22 years ago
zend_globals_macros.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_hash.c - Increase performance of *sort() and some internal sort operations. 22 years ago
zend_hash.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_highlight.c Fixed bug #31371 (highlight_file() trims new line after heredoc). 21 years ago
zend_highlight.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_indent.c - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) 21 years ago
zend_indent.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 22 years ago
zend_ini.c - Fixed bug #30630: Added a BSD based strtod function that is 22 years ago
zend_ini.h export INI parser 22 years ago
zend_ini_parser.y - Fix memleak 21 years ago
zend_ini_scanner.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_ini_scanner.l Correct fix for #28804 21 years ago
zend_interfaces.c - Bugfix #26229 (getIterator() segfaults when it returns arrays or scalars) 21 years ago
zend_interfaces.h - no unneccessary retval initialization 22 years ago
zend_istdiostream.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_iterators.c Add count_elements handler for overloaded objects. 22 years ago
zend_iterators.h - no unneccessary retval initialization 22 years ago
zend_language_parser.y - Cleanup foreach handling 21 years ago
zend_language_scanner.h Nuke compile warning by using the LANG_SCNG macro instead 22 years ago
zend_language_scanner.l fixed #31987 zend-multibyte in ZTS. 21 years ago
zend_list.c MFB: - Fix bug #26753 (zend_fetch_list_dtor_id() does not check NULL strings) 22 years ago
zend_list.h Change FETCH_RESOURCE to return false on error instead of null, for 22 years ago
zend_llist.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_llist.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_mm.c Handle out of memory/bad size situation gracefully, without getting into loop 22 years ago
zend_mm.h - Disable zend_mm for 5.0.0 22 years ago
zend_modules.h - Bump API version 22 years ago
zend_multibyte.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_multibyte.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_multiply.h Readd x86 implementation 22 years ago
zend_object_handlers.c Fixed bugs #29767 and #31683 (__get and __set methods must not modify property name). 21 years ago
zend_object_handlers.h - Change zend_object_handlers->get_method() to allow aggregation for internal classes 22 years ago
zend_objects.c Simplify/Optmize magic method calls (__get/__set/__call/__clone/__destruct) 22 years ago
zend_objects.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 22 years ago
zend_objects_API.c fix crash when dtor is fialing on shutdown 22 years ago
zend_objects_API.h fix crash when dtor is fialing on shutdown 22 years ago
zend_opcode.c - Commit the variable fetch optimization. 22 years ago
zend_operators.c - Added "G" modifier to ini setting number format. 21 years ago
zend_operators.h Fixed bug #30726 (-.1 like numbers are not being handled correctly). 21 years ago
zend_ptr_stack.c - More ptr_stack optimizations and cleanups 22 years ago
zend_ptr_stack.h - More ptr_stack optimizations and cleanups 22 years ago
zend_qsort.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_qsort.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_reflection_api.c - Be more gracious in reflection API 21 years ago
zend_reflection_api.h - publish reflection_class_factory() as zend_reflection_class_factory() 22 years ago
zend_sprintf.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_stack.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_stack.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 22 years ago
zend_static_allocator.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_static_allocator.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_stream.c - Fix warning 22 years ago
zend_stream.h export zend stream functions for zend extensions under windows 22 years ago
zend_strtod.c - Compile fix for systems without int32_t typedef 21 years ago
zend_strtod.h Make zend_strtod compile on windows 22 years ago
zend_ts_hash.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_ts_hash.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_types.h - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_variables.c - Use zval_ctor_func() for wrapper and update the prototype to void 22 years ago
zend_variables.h - Use zval_ctor_func() for wrapper and update the prototype to void 22 years ago
zend_vm.h - Commit new VM 22 years ago
zend_vm_def.h Fixed bug #30407 (Strange behaviour of default arguments) 21 years ago
zend_vm_execute.h Fixed bug #30407 (Strange behaviour of default arguments) 21 years ago
zend_vm_execute.skl - Fix typo 22 years ago
zend_vm_gen.php - Added missing header sections. 21 years ago
zend_vm_opcodes.h - Added missing header sections. 21 years ago

README.ZEND_VM

ZEND_VM
=======

ZEND_VM architecture allows specializing opcode handlers according to op_type
fields and using different execution methods (call threading, switch threading
and direct threading). As a result ZE2 got more than 20% speedup on raw PHP
code execution (with specialized executor and direct threading execution
method). As in most PHP applications raw execution speed isn't the limiting
factor but system calls and database callls are, your mileage with this patch
will vary.

Most parts of the old zend_execute.c go into zend_vm_def.h. Here you can
find opcode handlers and helpers. The typical opcode handler template looks
like this:

ZEND_VM_HANDLER(<OPCODE-NUMBER>, <OPCODE>, <OP1_TYPES>, <OP2_TYPES>)
{
<HANDLER'S CODE>
}

<OPCODE-NUMBER> is a opcode number (0, 1, ...)
<OPCODE> is an opcode name (ZEN_NOP, ZEND_ADD, :)
<OP1_TYPES> & <OP2_TYPES> are masks for allowed operand op_types. Specializer
will generate code only for defined combination of types. You can use any
combination of the following op_types UNUSED, CONST, VAR, TMP and CV also
you can use ANY mask to disable specialization according operand's op_type.
<HANDLER'S CODE> is a handler's code itself. For most handlers it stills the
same as in old zend_execute.c, but now it uses macros to access opcode operands
and some internal executor data.

You can see the conformity of new macros to old code in the following list:

EXECUTE_DATA
execute_data
ZEND_VM_DISPATCH_TO_HANDLER(<OP>)
return <OP>_helper(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)
ZEND_VM_DISPATCH_TO_HELPER(<NAME>)
return <NAME>(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)
ZEND_VM_DISPATCH_TO_HELPER_EX(<NAME>,<PARAM>,<VAL>)
return <NAME>(<VAL>, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)
ZEND_VM_CONTINUE()
return 0
ZEND_VM_NEXT_OPCODE()
NEXT_OPCODE()
ZEND_VM_SET_OPCODE(<TARGET>
SET_OPCODE(<TARGET>
ZEND_VM_INC_OPCODE()
INC_OPCOD()
ZEND_VM_RETURN_FROM_EXECUTE_LOOP()
RETURN_FROM_EXECUTE_LOOP()
ZEND_VM_C_LABEL(<LABEL>):
<LABEL>:
ZEND_VM_C_GOTO(<LABEL>)
goto <LABEL>
OP<X>_TYPE
opline->op<X>.op_type
GET_OP<X>_ZVAL_PTR(<TYPE>)
get_zval_ptr(&opline->op<X>, EX(Ts), &free_op<X>, <TYPE>)
GET_OP<X>_ZVAL_PTR_PTR(<TYPE>)
get_zval_ptr_ptr(&opline->op<X>, EX(Ts), &free_op<X>, <TYPE>)
GET_OP<X>_OBJ_ZVAL_PTR(<TYPE>)
get_obj_zval_ptr(&opline->op<X>, EX(Ts), &free_op<X>, <TYPE>)
GET_OP<X>_OBJ_ZVAL_PTR_PTR(<TYPE>)
get_obj_zval_ptr_ptr(&opline->op<X>, EX(Ts), &free_op<X>, <TYPE>)
IS_OP<X>_TMP_FREE()
IS_TMP_FREE(free_op<X>)
FREE_OP<X>()
FREE_OP(free_op<X>)
FREE_OP<X>_IF_VAR()
FREE_VAR(free_op<X>)
FREE_OP<X>_VAR_PTR()
FREE_VAR_PTR(free_op<X>)


Executor's helpers can be defined without parameters or with one parameter.
This is done with the following constructs:

ZEND_VM_HELPER(<HELPER-NAME>, <OP1_TYPES>, <OP2_TYPES>)
{
<HELPER'S CODE>
}

ZEND_VM_HELPER_EX(<HELPER-NAME>, <OP1_TYPES>, <OP2_TYPES>, <PARAM_SPEC>)
{
<HELPER'S CODE>
}

Executor's code is generated by PHP script zend_vm_gen.php it uses zend_vm_def.h
and zend_vm_execute.skl as input and produces zend_vm_opcodes.h and
zend_vm_execute.h. The first file is a list of opcode definitions. It is
included from zend_compile.h. The second one is an executor code itself. It is
included from zend_execute.c.

zend_vm_gen.php can produce different kind of executors. You can select
different opcode threading model using --with-vm-kind=CALL|SWITCH|GOTO. You can
disable opcode specialization using --without-specializer. You can include or
exclude old executor together with specialized one using --without-old-executor.
At last you can debug executor using original zend_vm_def.h or generated file
zend_vm_execute.h. Debugging with original file requires --with-lines
option. By default ZE2 uses the following command to generate executor:

$ php zend_vm_gen.php --with-vm-kind=CALL

Zend Engine II currently includes two executors during the build process, one
is the specialized version and the other is the old one non-specialized with
function handlers. By default Zend Engine II uses the specialized one but you
can switch to the old executor at runtime by calling zend_vm_use_old_executor().