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.
 
 
 
 
 
 
foobar c17e7e896e fix test when session.save_handler is "user" 21 years ago
..
RFCs this one is declined 22 years ago
tests fix test when session.save_handler is "user" 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 missing entry. 21 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 reordered + added msg to configure output for PHP_ZEND_VM 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 Fix build (it was #ifNdef NETWARE..) 21 years ago
acinclude.m4 fix standalone build 21 years ago
bench.php typo 21 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 - Fixed bug #31358 (Older GCC versions do not provide portable va_copy()). 21 years ago
zend.h Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend.ico Zend Library 27 years ago
zend_API.c Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend_API.h Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend_alloc.c - Nuke the code duplication 21 years ago
zend_alloc.h - Added the --disable-zend-memory-manager switch to disable the Zend memory 21 years ago
zend_arg_defs.c - Added missing header sections. 21 years ago
zend_builtin_functions.c fix various "Class entry requested for an object without PHP class" messages 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 bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend_compile.h Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 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 Hopefully fixes win32 builds 21 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 fix various "Class entry requested for an object without PHP class" messages 21 years ago
zend_exceptions.h - Add new class ErrorException to encapsulate errors in exceptions 22 years ago
zend_execute.c Fixed SIGSEGV on 'global ${"{$blah}_ID"};' 21 years ago
zend_execute.h Export zend_do_fcall() helper from executor 21 years ago
zend_execute_API.c Fixed bug #28072 (static array with some constant keys will be incorrectly ordered). 21 years ago
zend_extensions.c - Happy new year and PHP 5 for rest of the files too.. 22 years ago
zend_extensions.h Improved PHP extension loading mechanism with support for module dependencies and conflicts. 21 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 Fixed bug #28072 (static array with some constant keys will be incorrectly ordered). 21 years ago
zend_hash.h Fixed bug #28072 (static array with some constant keys will be incorrectly ordered). 21 years ago
zend_highlight.c Fixed bug #29338 (unencoded spaces get ignored after certain tags). 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 - allow to use "yes" and "true" with ini_set() and in commandline (through -d flag) 21 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 - Just return FAILURE & allow NULL without emmidiate error 21 years ago
zend_interfaces.h - Fix typos 21 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 Fixed SIGSEGV on 'global ${"{$blah}_ID"};' 21 years ago
zend_language_scanner.h Nuke compile warning by using the LANG_SCNG macro instead 22 years ago
zend_language_scanner.l Fixlet 21 years ago
zend_list.c improve error messages when error raised from an internal class (do not hide class name) 21 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 Fix compile warning (bug #32047) 21 years ago
zend_mm.h - Disable zend_mm for 5.0.0 22 years ago
zend_modules.h Improved PHP extension loading mechanism with support for module dependencies and conflicts. 21 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 bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend_object_handlers.h typofix :) 21 years ago
zend_objects.c Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 21 years ago
zend_objects.h wrap ZEND_API prototypes into BEGIN_EXTERN_C/END_EXTERN_C 22 years ago
zend_objects_API.c Fixed bug #32799 (crash: calling the corresponding global var during the destruct) 21 years ago
zend_objects_API.h - This part of the patch was right 21 years ago
zend_opcode.c - Commit the variable fetch optimization. 22 years ago
zend_operators.c Reverted wrong fix for bug #30572. 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 Fixed bug #33512 (Add missing support for isset()/unset() overloading to complement the property get/set methods) 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 zend_stream_getc uses fread internally. NetWare LibC fread reads 4(Which I believe EOT) for EOF(^D) character. This happens when fread is asked to read one and only character as is the case with cl interactive mode. 21 years ago
zend_stream.h Thought I committed it ages ago... Anyway, without further delays, the final 21 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 export zend_vm_set_opcode_handler 21 years ago
zend_vm_def.h Fixed SIGSEGV on 'global ${"{$blah}_ID"};' 21 years ago
zend_vm_execute.h Fixed SIGSEGV on 'global ${"{$blah}_ID"};' 21 years ago
zend_vm_execute.skl - Fix typo 22 years ago
zend_vm_gen.php Export zend_do_fcall() helper from executor 21 years ago
zend_vm_opcodes.h ZEND_UNSET_DIM_OBJ is splitted to ZEND_UNSET_DIM and ZEND_UNSET_OBJ. 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().