Use "fastcall" calling convention

This commit is contained in:
Dmitry Stogov 2018-04-04 01:12:59 +03:00
parent 005f2a4676
commit cb464a53c8
4 changed files with 23 additions and 22 deletions

View file

@ -25,13 +25,13 @@
# include "valgrind/callgrind.h" # include "valgrind/callgrind.h"
#endif #endif
ZEND_API zend_string *(*zend_new_interned_string)(zend_string *str); ZEND_API zend_new_interned_string_func_t zend_new_interned_string;
ZEND_API zend_string *(*zend_string_init_interned)(const char *str, size_t size, int permanent); ZEND_API zend_string_init_interned_func_t zend_string_init_interned;
static zend_string *zend_new_interned_string_permanent(zend_string *str); static zend_string* ZEND_FASTCALL zend_new_interned_string_permanent(zend_string *str);
static zend_string *zend_new_interned_string_request(zend_string *str); static zend_string* ZEND_FASTCALL zend_new_interned_string_request(zend_string *str);
static zend_string *zend_string_init_interned_permanent(const char *str, size_t size, int permanent); static zend_string* ZEND_FASTCALL zend_string_init_interned_permanent(const char *str, size_t size, int permanent);
static zend_string *zend_string_init_interned_request(const char *str, size_t size, int permanent); static zend_string* ZEND_FASTCALL zend_string_init_interned_request(const char *str, size_t size, int permanent);
/* Any strings interned in the startup phase. Common to all the threads, /* Any strings interned in the startup phase. Common to all the threads,
won't be free'd until process exit. If we want an ability to won't be free'd until process exit. If we want an ability to
@ -48,7 +48,7 @@ ZEND_API zend_string *zend_empty_string = NULL;
ZEND_API zend_string *zend_one_char_string[256]; ZEND_API zend_string *zend_one_char_string[256];
ZEND_API zend_string **zend_known_strings = NULL; ZEND_API zend_string **zend_known_strings = NULL;
ZEND_API zend_ulong zend_hash_func(const char *str, size_t len) ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len)
{ {
return zend_inline_hash_func(str, len); return zend_inline_hash_func(str, len);
} }
@ -175,13 +175,13 @@ static zend_always_inline zend_string *zend_add_interned_string(zend_string *str
return str; return str;
} }
ZEND_API zend_string *zend_interned_string_find_permanent(zend_string *str) ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str)
{ {
zend_string_hash_val(str); zend_string_hash_val(str);
return zend_interned_string_ht_lookup(str, &interned_strings_permanent); return zend_interned_string_ht_lookup(str, &interned_strings_permanent);
} }
static zend_string *zend_new_interned_string_permanent(zend_string *str) static zend_string* ZEND_FASTCALL zend_new_interned_string_permanent(zend_string *str)
{ {
zend_string *ret; zend_string *ret;
@ -207,7 +207,7 @@ static zend_string *zend_new_interned_string_permanent(zend_string *str)
return zend_add_interned_string(str, &interned_strings_permanent, IS_STR_PERMANENT); return zend_add_interned_string(str, &interned_strings_permanent, IS_STR_PERMANENT);
} }
static zend_string *zend_new_interned_string_request(zend_string *str) static zend_string* ZEND_FASTCALL zend_new_interned_string_request(zend_string *str)
{ {
zend_string *ret; zend_string *ret;
@ -244,7 +244,7 @@ static zend_string *zend_new_interned_string_request(zend_string *str)
return ret; return ret;
} }
static zend_string *zend_string_init_interned_permanent(const char *str, size_t size, int permanent) static zend_string* ZEND_FASTCALL zend_string_init_interned_permanent(const char *str, size_t size, int permanent)
{ {
zend_string *ret; zend_string *ret;
zend_ulong h = zend_inline_hash_func(str, size); zend_ulong h = zend_inline_hash_func(str, size);
@ -259,7 +259,7 @@ static zend_string *zend_string_init_interned_permanent(const char *str, size_t
return zend_add_interned_string(ret, &interned_strings_permanent, IS_STR_PERMANENT); return zend_add_interned_string(ret, &interned_strings_permanent, IS_STR_PERMANENT);
} }
static zend_string *zend_string_init_interned_request(const char *str, size_t size, int permanent) static zend_string* ZEND_FASTCALL zend_string_init_interned_request(const char *str, size_t size, int permanent)
{ {
zend_string *ret; zend_string *ret;
zend_ulong h = zend_inline_hash_func(str, size); zend_ulong h = zend_inline_hash_func(str, size);

View file

@ -26,18 +26,19 @@
BEGIN_EXTERN_C() BEGIN_EXTERN_C()
typedef void (*zend_string_copy_storage_func_t)(void); typedef void (*zend_string_copy_storage_func_t)(void);
typedef zend_string *(*zend_new_interned_string_func_t)(zend_string *str); typedef zend_string *(ZEND_FASTCALL *zend_new_interned_string_func_t)(zend_string *str);
typedef zend_string *(*zend_string_init_interned_func_t)(const char *str, size_t size, int permanent); typedef zend_string *(ZEND_FASTCALL *zend_string_init_interned_func_t)(const char *str, size_t size, int permanent);
ZEND_API extern zend_new_interned_string_func_t zend_new_interned_string; ZEND_API extern zend_new_interned_string_func_t zend_new_interned_string;
ZEND_API extern zend_string_init_interned_func_t zend_string_init_interned; ZEND_API extern zend_string_init_interned_func_t zend_string_init_interned;
ZEND_API zend_ulong zend_hash_func(const char *str, size_t len); ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len);
ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str);
ZEND_API void zend_interned_strings_init(void); ZEND_API void zend_interned_strings_init(void);
ZEND_API void zend_interned_strings_dtor(void); ZEND_API void zend_interned_strings_dtor(void);
ZEND_API void zend_interned_strings_activate(void); ZEND_API void zend_interned_strings_activate(void);
ZEND_API void zend_interned_strings_deactivate(void); ZEND_API void zend_interned_strings_deactivate(void);
ZEND_API zend_string *zend_interned_string_find_permanent(zend_string *str);
ZEND_API void zend_interned_strings_set_request_storage_handlers(zend_new_interned_string_func_t handler, zend_string_init_interned_func_t init_handler); ZEND_API void zend_interned_strings_set_request_storage_handlers(zend_new_interned_string_func_t handler, zend_string_init_interned_func_t init_handler);
ZEND_API void zend_interned_strings_set_permanent_storage_copy_handlers(zend_string_copy_storage_func_t copy_handler, zend_string_copy_storage_func_t restore_handler); ZEND_API void zend_interned_strings_set_permanent_storage_copy_handlers(zend_string_copy_storage_func_t copy_handler, zend_string_copy_storage_func_t restore_handler);
ZEND_API void zend_interned_strings_switch_storage(zend_bool request); ZEND_API void zend_interned_strings_switch_storage(zend_bool request);

View file

@ -437,7 +437,7 @@ static zend_always_inline zend_string *accel_find_interned_string(zend_string *s
return NULL; return NULL;
} }
zend_string *accel_new_interned_string(zend_string *str) zend_string* ZEND_FASTCALL accel_new_interned_string(zend_string *str)
{ {
zend_ulong h; zend_ulong h;
uint32_t pos, *hash_slot; uint32_t pos, *hash_slot;
@ -493,7 +493,7 @@ zend_string *accel_new_interned_string(zend_string *str)
return s; return s;
} }
static zend_string *accel_new_interned_string_for_php(zend_string *str) static zend_string* ZEND_FASTCALL accel_new_interned_string_for_php(zend_string *str)
{ {
zend_string_hash_val(str); zend_string_hash_val(str);
if (ZCG(counted)) { if (ZCG(counted)) {
@ -528,7 +528,7 @@ static zend_always_inline zend_string *accel_find_interned_string_ex(zend_ulong
return NULL; return NULL;
} }
static zend_string *accel_init_interned_string_for_php(const char *str, size_t size, int permanent) static zend_string* ZEND_FASTCALL accel_init_interned_string_for_php(const char *str, size_t size, int permanent)
{ {
if (ZCG(counted)) { if (ZCG(counted)) {
zend_ulong h = zend_inline_hash_func(str, size); zend_ulong h = zend_inline_hash_func(str, size);
@ -708,7 +708,7 @@ static void accel_copy_permanent_strings(zend_new_interned_string_func_t new_int
} ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END();
} }
static zend_string *accel_replace_string_by_shm_permanent(zend_string *str) static zend_string* ZEND_FASTCALL accel_replace_string_by_shm_permanent(zend_string *str)
{ {
zend_string *ret = accel_find_interned_string(str); zend_string *ret = accel_find_interned_string(str);
@ -719,7 +719,7 @@ static zend_string *accel_replace_string_by_shm_permanent(zend_string *str)
return str; return str;
} }
static zend_string *accel_replace_string_by_process_permanent(zend_string *str) static zend_string* ZEND_FASTCALL accel_replace_string_by_process_permanent(zend_string *str)
{ {
zend_string *ret = zend_interned_string_find_permanent(str); zend_string *ret = zend_interned_string_find_permanent(str);

View file

@ -333,6 +333,6 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type);
#define IS_ACCEL_INTERNED(str) \ #define IS_ACCEL_INTERNED(str) \
((char*)(str) >= (char*)ZCSG(interned_strings).start && (char*)(str) < (char*)ZCSG(interned_strings).top) ((char*)(str) >= (char*)ZCSG(interned_strings).start && (char*)(str) < (char*)ZCSG(interned_strings).top)
zend_string *accel_new_interned_string(zend_string *str); zend_string* ZEND_FASTCALL accel_new_interned_string(zend_string *str);
#endif /* ZEND_ACCELERATOR_H */ #endif /* ZEND_ACCELERATOR_H */