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.
 
 
 
 
 
 
Ilia Alshanetsky ea7b61dfe5 Fixed bug #31371 (highlight_file() trims new line after heredoc). 22 years ago
..
RFCs this one is declined 23 years ago
tests "Undefined variable: %s" noticies were fixed to use one space 22 years ago
ChangeLog ChangeLog update 22 years ago
FlexLexer.h Replace macros which begin with an underscore through an appropiately 26 years ago
LICENSE Bump year. 24 years ago
Makefile.am - Add entry for zend_strtod.c in belief that this is still active. 22 years ago
Makefile.frag - New architecture needs one more dependency 22 years ago
OBJECTS2_HOWTO - modifyable -> modifiable 23 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 MFB_4_3: Quote macro names in AC_DEFUN() 22 years ago
ZendCore.dep - Rename modules.h to zend_modules.h 26 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 MFB_4_3: Quote macro names in AC_DEFUN() 22 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 - MFZE1 24 years ago
flex.skl - added script encoding support to Zend Engine 2. 23 years ago
zend.c port fix for #30998: Crash when user error handler returns false on amd64 22 years ago
zend.h - Checks for Darwin'ish systems that uses Mach-O, which apparently doesn't 22 years ago
zend.ico Zend Library 28 years ago
zend_API.c Patch by Joe Orton <jorton@redhat.com>. 22 years ago
zend_API.h - Rename delete_global_variable() to zend_delete_global_variable() 22 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 Attempt at fixing the linkage problem in Win32 23 years ago
zend_builtin_functions.c MFB 22 years ago
zend_builtin_functions.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 23 years ago
zend_compile.c - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) 22 years ago
zend_compile.h - Improve comments, docs, code... 22 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 Bugfix #29116 Zend constant warning uses memory after free (jdolecek at NetBSD dot org) 22 years ago
zend_constants.h - Fixed a 64bit issue (for zend_builtin_functions.c, module_number is an int). 23 years ago
zend_default_classes.c Centralize exceptions code in zend_exceptions.[ch]. 23 years ago
zend_dynamic_array.c - Happy new year and PHP 5 for rest of the files too.. 23 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.. 23 years ago
zend_exceptions.c Fixed bug #30904 (segfault when recording soapclient into session). 22 years ago
zend_exceptions.h - Add new class ErrorException to encapsulate errors in exceptions 22 years ago
zend_execute.c "Undefined variable: %s" noticies were fixed to use one space 22 years ago
zend_execute.h - Commit new VM architecture. This one allows people (aka Derick) to 22 years ago
zend_execute_API.c fix crash 22 years ago
zend_extensions.c - Happy new year and PHP 5 for rest of the files too.. 23 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.. 23 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.. 23 years ago
zend_highlight.c Fixed bug #31371 (highlight_file() trims new line after heredoc). 22 years ago
zend_highlight.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_indent.c - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) 22 years ago
zend_indent.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 23 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 reverse dependency 22 years ago
zend_ini_scanner.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_ini_scanner.l - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) 22 years ago
zend_interfaces.c Fix warnign 22 years ago
zend_interfaces.h - no unneccessary retval initialization 23 years ago
zend_istdiostream.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_iterators.c Add count_elements handler for overloaded objects. 23 years ago
zend_iterators.h - no unneccessary retval initialization 23 years ago
zend_language_parser.y - Commit the variable fetch optimization. 22 years ago
zend_language_scanner.h Nuke compile warning by using the LANG_SCNG macro instead 23 years ago
zend_language_scanner.l - Fixed bug #28930 (PHP sources pick wrong header files generated by bison) 22 years ago
zend_list.c MFB: - Fix bug #26753 (zend_fetch_list_dtor_id() does not check NULL strings) 23 years ago
zend_list.h Change FETCH_RESOURCE to return false on error instead of null, for 23 years ago
zend_llist.c - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_llist.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_mm.c Handle out of memory/bad size situation gracefully, without getting into loop 23 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.. 23 years ago
zend_multibyte.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_multiply.h Readd x86 implementation 23 years ago
zend_object_handlers.c - Fixed Bug #30562 Segmentation fault with __call() 22 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 23 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. 22 years ago
zend_operators.h - Fixed bug #30630: Added a BSD based strtod function that is 22 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.. 23 years ago
zend_qsort.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_reflection_api.c - Need to unmangle the class name here 22 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.. 23 years ago
zend_stack.c - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_stack.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 23 years ago
zend_static_allocator.c - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_static_allocator.h - Happy new year and PHP 5 for rest of the files too.. 23 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 - Use correct header files (in c99 compliant way). uint32_t is preferred. 22 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.. 23 years ago
zend_ts_hash.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_types.h - Happy new year and PHP 5 for rest of the files too.. 23 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 "Undefined variable: %s" noticies were fixed to use one space 22 years ago
zend_vm_execute.h "Undefined variable: %s" noticies were fixed to use one space 22 years ago
zend_vm_execute.skl - Fix typo 22 years ago
zend_vm_gen.php --without-lines changed to --with-lines 22 years ago
zend_vm_opcodes.h - Oops missed this one 22 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().