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.
 
 
 
 
 
 
Andi Gutmans 3e382a7d06 - Don't allow access modifiers in interfaces. Explicitly stating public 22 years ago
..
RFCs this one is declined 23 years ago
tests Test files are fixed. 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 zend_exceptions.c 23 years ago
Makefile.frag - Add makefile fragment which simplifies working on the executer 22 years ago
OBJECTS2_HOWTO - modifyable -> modifiable 23 years ago
README.ZEND_VM - Document zend_vm_use_old_executor() for Derick. 22 years ago
ZEND_CHANGES Add some information about array overloading 22 years ago
Zend.dsp Add zend_interfaces.{c|h}. 23 years ago
Zend.m4 - Commit the variable fetch optimization. 22 years ago
ZendCore.dep - Rename modules.h to zend_modules.h 26 years ago
ZendTS.dsp Centralize exceptions code in zend_exceptions.[ch]. 23 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 fp_except check for FreeBSD 1.0-2.2.5 26 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 - Drop namespace relict 22 years ago
zend.h - Fix build 22 years ago
zend.ico Zend Library 28 years ago
zend_API.c - MFB (synch correctly not only for one problem) 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 Bug #30381 Strange results with get_class_vars() 22 years ago
zend_builtin_functions.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 23 years ago
zend_compile.c - Don't allow access modifiers in interfaces. Explicitly stating public 22 years ago
zend_compile.h - Commit the variable fetch optimization. 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 - Fix memeleak 22 years ago
zend_exceptions.h - Add new class ErrorException to encapsulate errors in exceptions 22 years ago
zend_execute.c Fixed unset() bug that was introduced with CV optimization patch 22 years ago
zend_execute.h - Commit new VM architecture. This one allows people (aka Derick) to 22 years ago
zend_execute_API.c Added test cases for CV optimization patch 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 number due to empty_string change 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 - Boost up __autoload() calls by caching the lookup 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 MFH: Fixed bug #29607 (highlighting code with HEREDOC produces invalid 22 years ago
zend_highlight.h - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_indent.c - Happy new year and PHP 5 for rest of the files too.. 23 years ago
zend_indent.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 23 years ago
zend_ini.c Fix: ini entries for dl()'d modules now work under ZTS 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 Adding ability to refer to existing .ini variables from within .ini 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 - Remove all for now 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 number due to empty_string change 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 Simplify/Optmize magic method calls (__get/__set/__call/__clone/__destruct) 22 years ago
zend_object_handlers.h Add count_elements handler for overloaded objects. 23 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 - Small improvement to DVAL_TO_ZVAL macro 22 years ago
zend_operators.h MFH: Fixed a bug causing ".123" * "90" and alike to return a 0. 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 - Fix Bug #30344 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_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 the variable fetch optimization. 22 years ago
zend_vm_handlers.h Fixed unset() bug that was introduced with CV optimization patch 22 years ago
zend_vm_spec.h - Commit the variable fetch optimization. 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 then 20% speedup on raw PHP
code execution (with specialized executor and direct threading execution
method). As most 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_handlers.h. Here you can
find opcode handlers and helpers. The typical opcode handler template looks
like this:

#define <OPCODE>_SPEC() OPDEF(<OPCODE>, <OP1_TYPES>, <OP2_TYPES>)
#if HAVE_OP(<OPCODE>)
ZEND_VM_HANDLER(<OPCODE>)
{
<HANDLER'S CODE>
}
#endif

<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 also use
M_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_OPCOD()
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>)

If handler can receive control form some other handler it should be defined
with macro ZEND_VM_HANDLER_EX() instead of ZEND_VM_HANDLER().

The additional parameters of helpers (see ZEND_VM_DISPATCH_TO_HELPER_EX) mast
be defined in the start of execute() function inside ZEND_VM_HELPER_VAR() macro.

zend_vm.h and zend_vm_spec.h are used for abstraction of execution method and
operands specialization. They mainly contain macros that are used for
compile-time specialization.

You can switch specialization on/off with define/undefined of the ZEND_VM_SPEC
in the start of zend.vm.h and select execution method by defining ZEND_VM_KIND
in the same place.

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().