php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
zend_jit_ir.c File Reference
#include "jit/ir/ir.h"
#include "jit/ir/ir_builder.h"

Go to the source code of this file.

Data Structures

struct  _ir_refs
 
struct  _zend_jit_reg_var
 
struct  _zend_jit_ctx
 
struct  _zend_jit_registers_buf
 
struct  _zend_jit_stub
 
struct  _zend_jit_unwind_arg
 
struct  jit_observer_fcall_is_unobserved_data
 
struct  _zend_closure
 

Macros

#define ZREG_RX   ZREG_IP
 
#define OPTIMIZE_FOR_SIZE   0
 
#define _ir_CTX   (&jit->ctx)
 
#define ir_CONST_ADDR(_addr)
 
#define ir_CONST_FUNC(_addr)
 
#define ir_CONST_FC_FUNC(_addr)
 
#define ir_CAST_FC_FUNC(_addr)
 
#define ir_CONST_FUNC_PROTO(_addr, _proto)
 
#define ir_ADD_OFFSET(_addr, _offset)
 
#define IR_LONG   IR_I32
 
#define ir_CONST_LONG   ir_CONST_I32
 
#define ir_UNARY_OP_L   ir_UNARY_OP_I32
 
#define ir_BINARY_OP_L   ir_BINARY_OP_I32
 
#define ir_ADD_L   ir_ADD_I32
 
#define ir_SUB_L   ir_SUB_I32
 
#define ir_MUL_L   ir_MUL_I32
 
#define ir_DIV_L   ir_DIV_I32
 
#define ir_MOD_L   ir_MOD_I32
 
#define ir_NEG_L   ir_NEG_I32
 
#define ir_ABS_L   ir_ABS_I32
 
#define ir_SEXT_L   ir_SEXT_I32
 
#define ir_ZEXT_L   ir_ZEXT_I32
 
#define ir_TRUNC_L   ir_TRUNC_I32
 
#define ir_BITCAST_L   ir_BITCAST_I32
 
#define ir_FP2L   ir_FP2I32
 
#define ir_ADD_OV_L   ir_ADD_OV_I32
 
#define ir_SUB_OV_L   ir_SUB_OV_I32
 
#define ir_MUL_OV_L   ir_MUL_OV_I32
 
#define ir_NOT_L   ir_NOT_I32
 
#define ir_OR_L   ir_OR_I32
 
#define ir_AND_L   ir_AND_I32
 
#define ir_XOR_L   ir_XOR_I32
 
#define ir_SHL_L   ir_SHL_I32
 
#define ir_SHR_L   ir_SHR_I32
 
#define ir_SAR_L   ir_SAR_I32
 
#define ir_ROL_L   ir_ROL_I32
 
#define ir_ROR_L   ir_ROR_I32
 
#define ir_MIN_L   ir_MIN_I32
 
#define ir_MAX_L   ir_MAX_I32
 
#define ir_LOAD_L   ir_LOAD_I32
 
#define ir_refs_size(_n)
 
#define ir_refs_init(_name, _n)
 
#define jit_EG(_field)
 
#define jit_CG(_field)
 
#define jit_CALL(_call, _field)
 
#define jit_EX(_field)
 
#define jit_RX(_field)
 
#define JIT_STUBS(_)
 
#define JIT_STUB_ID(name, flags)
 
#define JIT_STUB_FORWARD(name, flags)
 
#define JIT_STUB(name, flags)
 
#define ZEND_JIT_EXIT_POINTS_SPACING   4
 
#define ZEND_JIT_EXIT_POINTS_PER_GROUP   32
 
#define REGISTER_HELPER(n)
 
#define REGISTER_DATA(n)
 

Typedefs

typedef struct _ir_refs ir_refs
 
typedef enum _jit_stub_id jit_stub_id
 
typedef struct _zend_jit_reg_var zend_jit_reg_var
 
typedef struct _zend_jit_ctx zend_jit_ctx
 
typedef int8_t zend_reg
 
typedef struct _zend_jit_registers_buf zend_jit_registers_buf
 
typedef struct _zend_jit_stub zend_jit_stub
 
typedef struct _Unwind_Context _Unwind_Context
 
typedef int(* _Unwind_Trace_Fn) (_Unwind_Context *, void *)
 
typedef struct _zend_jit_unwind_arg zend_jit_unwind_arg
 
typedef struct _zend_closure zend_closure
 

Enumerations

enum  _jit_stub_id { jit_last_stub }
 

Functions

int ZEND_FASTCALL zend_jit_trace_exit (uint32_t exit_num, zend_jit_registers_buf *regs)
 
uint32_t zend_jit_duplicate_exit_point (ir_ctx *ctx, zend_jit_trace_info *t, uint32_t exit_point, ir_ref snapshot_ref)
 
voidzend_jit_snapshot_handler (ir_ctx *ctx, ir_ref snapshot_ref, ir_insn *snapshot, void *addr)
 
int _Unwind_Backtrace (_Unwind_Trace_Fn, void *)
 
uintptr_t _Unwind_GetCFA (_Unwind_Context *)
 
 void (ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
 

Macro Definition Documentation

◆ _ir_CTX

#define _ir_CTX   (&jit->ctx)

Definition at line 64 of file zend_jit_ir.c.

◆ ir_ABS_L

#define ir_ABS_L   ir_ABS_I32

Definition at line 123 of file zend_jit_ir.c.

◆ ir_ADD_L

#define ir_ADD_L   ir_ADD_I32

Definition at line 117 of file zend_jit_ir.c.

◆ ir_ADD_OFFSET

#define ir_ADD_OFFSET ( _addr,
_offset )
Value:
jit_ADD_OFFSET(jit, _addr, _offset)

Definition at line 77 of file zend_jit_ir.c.

◆ ir_ADD_OV_L

#define ir_ADD_OV_L   ir_ADD_OV_I32

Definition at line 129 of file zend_jit_ir.c.

◆ ir_AND_L

#define ir_AND_L   ir_AND_I32

Definition at line 134 of file zend_jit_ir.c.

◆ ir_BINARY_OP_L

#define ir_BINARY_OP_L   ir_BINARY_OP_I32

Definition at line 116 of file zend_jit_ir.c.

◆ ir_BITCAST_L

#define ir_BITCAST_L   ir_BITCAST_I32

Definition at line 127 of file zend_jit_ir.c.

◆ ir_CAST_FC_FUNC

#define ir_CAST_FC_FUNC ( _addr)
Value:
ir_fold2(_ir_CTX, IR_OPT(IR_PROTO, IR_ADDR), (_addr), \
ir_ref ir_fold2(ir_ctx *ctx, uint32_t opt, ir_ref op1, ir_ref op2)
Definition ir.c:1067
ir_ref ir_proto_0(ir_ctx *ctx, uint8_t flags, ir_type ret_type)
Definition ir.c:721
#define IR_OPT(op, type)
Definition ir.h:385
#define IR_FASTCALL_FUNC
Definition ir.h:511
#define _ir_CTX
Definition ir_builder.h:16

Definition at line 70 of file zend_jit_ir.c.

◆ ir_CONST_ADDR

#define ir_CONST_ADDR ( _addr)
Value:
jit_CONST_ADDR(jit, (uintptr_t)(_addr))

Definition at line 67 of file zend_jit_ir.c.

◆ ir_CONST_FC_FUNC

#define ir_CONST_FC_FUNC ( _addr)
Value:
jit_CONST_FUNC(jit, (uintptr_t)(_addr), IR_FASTCALL_FUNC)

Definition at line 69 of file zend_jit_ir.c.

◆ ir_CONST_FUNC

#define ir_CONST_FUNC ( _addr)
Value:
jit_CONST_FUNC(jit, (uintptr_t)(_addr), 0)

Definition at line 68 of file zend_jit_ir.c.

◆ ir_CONST_FUNC_PROTO

#define ir_CONST_FUNC_PROTO ( _addr,
_proto )
Value:
jit_CONST_FUNC_PROTO(jit, (uintptr_t)(_addr), (_proto))

Definition at line 73 of file zend_jit_ir.c.

◆ ir_CONST_LONG

#define ir_CONST_LONG   ir_CONST_I32

Definition at line 114 of file zend_jit_ir.c.

◆ ir_DIV_L

#define ir_DIV_L   ir_DIV_I32

Definition at line 120 of file zend_jit_ir.c.

◆ ir_FP2L

#define ir_FP2L   ir_FP2I32

Definition at line 128 of file zend_jit_ir.c.

◆ ir_LOAD_L

#define ir_LOAD_L   ir_LOAD_I32

Definition at line 143 of file zend_jit_ir.c.

◆ IR_LONG

#define IR_LONG   IR_I32

Definition at line 113 of file zend_jit_ir.c.

◆ ir_MAX_L

#define ir_MAX_L   ir_MAX_I32

Definition at line 142 of file zend_jit_ir.c.

◆ ir_MIN_L

#define ir_MIN_L   ir_MIN_I32

Definition at line 141 of file zend_jit_ir.c.

◆ ir_MOD_L

#define ir_MOD_L   ir_MOD_I32

Definition at line 121 of file zend_jit_ir.c.

◆ ir_MUL_L

#define ir_MUL_L   ir_MUL_I32

Definition at line 119 of file zend_jit_ir.c.

◆ ir_MUL_OV_L

#define ir_MUL_OV_L   ir_MUL_OV_I32

Definition at line 131 of file zend_jit_ir.c.

◆ ir_NEG_L

#define ir_NEG_L   ir_NEG_I32

Definition at line 122 of file zend_jit_ir.c.

◆ ir_NOT_L

#define ir_NOT_L   ir_NOT_I32

Definition at line 132 of file zend_jit_ir.c.

◆ ir_OR_L

#define ir_OR_L   ir_OR_I32

Definition at line 133 of file zend_jit_ir.c.

◆ ir_refs_init

#define ir_refs_init ( _name,
_n )
Value:
_name = alloca(ir_refs_size(_n)); \
do {_name->count = 0; _name->limit = (_n);} while (0)
#define ir_refs_size(_n)
char * alloca()

Definition at line 154 of file zend_jit_ir.c.

◆ ir_refs_size

#define ir_refs_size ( _n)
Value:
(offsetof(ir_refs, refs) + sizeof(ir_ref) * (_n))
int32_t ir_ref
Definition ir.h:390
#define offsetof(STRUCTURE, FIELD)
struct _ir_refs ir_refs

Definition at line 153 of file zend_jit_ir.c.

◆ ir_ROL_L

#define ir_ROL_L   ir_ROL_I32

Definition at line 139 of file zend_jit_ir.c.

◆ ir_ROR_L

#define ir_ROR_L   ir_ROR_I32

Definition at line 140 of file zend_jit_ir.c.

◆ ir_SAR_L

#define ir_SAR_L   ir_SAR_I32

Definition at line 138 of file zend_jit_ir.c.

◆ ir_SEXT_L

#define ir_SEXT_L   ir_SEXT_I32

Definition at line 124 of file zend_jit_ir.c.

◆ ir_SHL_L

#define ir_SHL_L   ir_SHL_I32

Definition at line 136 of file zend_jit_ir.c.

◆ ir_SHR_L

#define ir_SHR_L   ir_SHR_I32

Definition at line 137 of file zend_jit_ir.c.

◆ ir_SUB_L

#define ir_SUB_L   ir_SUB_I32

Definition at line 118 of file zend_jit_ir.c.

◆ ir_SUB_OV_L

#define ir_SUB_OV_L   ir_SUB_OV_I32

Definition at line 130 of file zend_jit_ir.c.

◆ ir_TRUNC_L

#define ir_TRUNC_L   ir_TRUNC_I32

Definition at line 126 of file zend_jit_ir.c.

◆ ir_UNARY_OP_L

#define ir_UNARY_OP_L   ir_UNARY_OP_I32

Definition at line 115 of file zend_jit_ir.c.

◆ ir_XOR_L

#define ir_XOR_L   ir_XOR_I32

Definition at line 135 of file zend_jit_ir.c.

◆ ir_ZEXT_L

#define ir_ZEXT_L   ir_ZEXT_I32

Definition at line 125 of file zend_jit_ir.c.

◆ jit_CALL

#define jit_CALL ( _call,
_field )
Value:
#define ir_ADD_OFFSET(_addr, _offset)
Definition ir_builder.h:490
struct _zend_execute_data zend_execute_data
Definition zend_types.h:91

Definition at line 206 of file zend_jit_ir.c.

◆ jit_CG

#define jit_CG ( _field)
Value:
ir_CONST_ADDR(&CG(_field))
#define ir_CONST_ADDR(_val)
Definition ir_builder.h:25
#define CG(v)

Definition at line 201 of file zend_jit_ir.c.

◆ jit_EG

#define jit_EG ( _field)
Value:
ir_CONST_ADDR(&EG(_field))
#define EG(v)

Definition at line 198 of file zend_jit_ir.c.

◆ jit_EX

#define jit_EX ( _field)
Value:
jit_CALL(jit_FP(jit), _field)
#define jit_CALL(_call, _field)

Definition at line 209 of file zend_jit_ir.c.

◆ jit_RX

#define jit_RX ( _field)
Value:
jit_CALL(jit_IP(jit), _field)

Definition at line 212 of file zend_jit_ir.c.

◆ JIT_STUB

#define JIT_STUB ( name,
flags )
Value:
{JIT_STUB_PREFIX #name, zend_jit_ ## name ## _stub, flags},
zend_string * name

Definition at line 255 of file zend_jit_ir.c.

◆ JIT_STUB_FORWARD

#define JIT_STUB_FORWARD ( name,
flags )
Value:
static int zend_jit_ ## name ## _stub(zend_jit_ctx *jit);
struct _zend_jit_ctx zend_jit_ctx

Definition at line 252 of file zend_jit_ir.c.

◆ JIT_STUB_ID

#define JIT_STUB_ID ( name,
flags )
Value:
jit_stub_ ## name,

Definition at line 249 of file zend_jit_ir.c.

◆ JIT_STUBS

#define JIT_STUBS ( _)

Definition at line 215 of file zend_jit_ir.c.

◆ OPTIMIZE_FOR_SIZE

#define OPTIMIZE_FOR_SIZE   0

Definition at line 60 of file zend_jit_ir.c.

◆ REGISTER_DATA

#define REGISTER_DATA ( n)
Value:
ir_disasm_add_symbol(#n, (uint64_t)(uintptr_t)&n, sizeof(n));
zend_long n
Definition ffi.c:4979
void ir_disasm_add_symbol(const char *name, uint64_t addr, uint64_t size)
Definition ir_disasm.c:85

Definition at line 2966 of file zend_jit_ir.c.

◆ REGISTER_HELPER

#define REGISTER_HELPER ( n)
Value:
ir_disasm_add_symbol(#n, (uint64_t)(uintptr_t)n, sizeof(void*));

Definition at line 2964 of file zend_jit_ir.c.

◆ ZEND_JIT_EXIT_POINTS_PER_GROUP

#define ZEND_JIT_EXIT_POINTS_PER_GROUP   32

Definition at line 319 of file zend_jit_ir.c.

◆ ZEND_JIT_EXIT_POINTS_SPACING

#define ZEND_JIT_EXIT_POINTS_SPACING   4

Definition at line 318 of file zend_jit_ir.c.

◆ ZREG_RX

#define ZREG_RX   ZREG_IP

Definition at line 58 of file zend_jit_ir.c.

Typedef Documentation

◆ _Unwind_Context

Definition at line 3202 of file zend_jit_ir.c.

◆ _Unwind_Trace_Fn

typedef int(* _Unwind_Trace_Fn) (_Unwind_Context *, void *)

Definition at line 3203 of file zend_jit_ir.c.

◆ ir_refs

typedef struct _ir_refs ir_refs

◆ jit_stub_id

typedef enum _jit_stub_id jit_stub_id

◆ zend_closure

typedef struct _zend_closure zend_closure

◆ zend_jit_ctx

typedef struct _zend_jit_ctx zend_jit_ctx

◆ zend_jit_reg_var

◆ zend_jit_registers_buf

◆ zend_jit_stub

typedef struct _zend_jit_stub zend_jit_stub

◆ zend_jit_unwind_arg

◆ zend_reg

typedef int8_t zend_reg

Definition at line 300 of file zend_jit_ir.c.

Enumeration Type Documentation

◆ _jit_stub_id

Enumerator
jit_last_stub 

Definition at line 258 of file zend_jit_ir.c.

Function Documentation

◆ _Unwind_Backtrace()

int _Unwind_Backtrace ( _Unwind_Trace_Fn ,
void *  )
extern

◆ _Unwind_GetCFA()

uintptr_t _Unwind_GetCFA ( _Unwind_Context * )
extern

◆ void()

void ( ZEND_FASTCALL * zend_touch_vm_stack_data)
extern

◆ zend_jit_duplicate_exit_point()

uint32_t zend_jit_duplicate_exit_point ( ir_ctx * ctx,
zend_jit_trace_info * t,
uint32_t exit_point,
ir_ref snapshot_ref )

Definition at line 689 of file zend_jit_ir.c.

◆ zend_jit_snapshot_handler()

void * zend_jit_snapshot_handler ( ir_ctx * ctx,
ir_ref snapshot_ref,
ir_insn * snapshot,
void * addr )

Definition at line 740 of file zend_jit_ir.c.

◆ zend_jit_trace_exit()

int ZEND_FASTCALL zend_jit_trace_exit ( uint32_t exit_num,
zend_jit_registers_buf * regs )

Definition at line 8560 of file zend_jit_trace.c.