Skip to content

Commit c290de1

Browse files
committed
Move x86 dependent code out from platform independed parts.
1 parent f4412f5 commit c290de1

File tree

4 files changed

+33
-23
lines changed

4 files changed

+33
-23
lines changed

ext/opcache/jit/zend_jit.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,7 +1510,7 @@ static int zend_jit_try_allocate_free_reg(const zend_op_array *op_array, const z
15101510
if (!ZEND_REGSET_IN(*hints, it->reg) &&
15111511
/* TODO: Avoid most often scratch registers. Find a better way ??? */
15121512
(!current->used_as_hint ||
1513-
(it->reg != ZREG_R0 && it->reg != ZREG_R1 && it->reg != ZREG_XMM0 && it->reg != ZREG_XMM1))) {
1513+
!ZEND_REGSET_IN(zend_jit_get_low_priority_regset(), it->reg))) {
15141514
hint = it->reg;
15151515
}
15161516
} else {
@@ -1640,10 +1640,7 @@ static int zend_jit_try_allocate_free_reg(const zend_op_array *op_array, const z
16401640
low_priority_regs = *hints;
16411641
if (current->used_as_hint) {
16421642
/* TODO: Avoid most often scratch registers. Find a better way ??? */
1643-
ZEND_REGSET_INCL(low_priority_regs, ZREG_R0);
1644-
ZEND_REGSET_INCL(low_priority_regs, ZREG_R1);
1645-
ZEND_REGSET_INCL(low_priority_regs, ZREG_XMM0);
1646-
ZEND_REGSET_INCL(low_priority_regs, ZREG_XMM1);
1643+
low_priority_regs = ZEND_REGSET_UNION(low_priority_regs, zend_jit_get_low_priority_regset());
16471644
}
16481645

16491646
ZEND_REGSET_FOREACH(available, i) {

ext/opcache/jit/zend_jit_trace.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3260,7 +3260,7 @@ static int zend_jit_trace_deoptimization(dasm_State **Dst,
32603260
return 0;
32613261
}
32623262
} else {
3263-
if (reg == ZREG_ZVAL_COPY_R0
3263+
if (reg == ZREG_ZVAL_COPY_GPR0
32643264
&&!zend_jit_escape_if_undef_r0(Dst, i, flags, opline)) {
32653265
return 0;
32663266
}
@@ -6911,7 +6911,7 @@ static void zend_jit_dump_exit_info(zend_jit_trace_info *t)
69116911
fprintf(stderr, " ");
69126912
zend_dump_var(op_array, (j < op_array->last_var) ? IS_CV : 0, j);
69136913
fprintf(stderr, ":unknown(zval_try_addref)");
6914-
} else if (STACK_REG(stack, j) == ZREG_ZVAL_COPY_R0) {
6914+
} else if (STACK_REG(stack, j) == ZREG_ZVAL_COPY_GPR0) {
69156915
fprintf(stderr, " ");
69166916
zend_dump_var(op_array, (j < op_array->last_var) ? IS_CV : 0, j);
69176917
fprintf(stderr, ":unknown(zval_copy(%s))", zend_reg_name[0]);
@@ -7402,7 +7402,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf
74027402
zend_jit_trace_stack *stack = t->stack_map + t->exit_info[exit_num].stack_offset;
74037403

74047404
if (t->exit_info[exit_num].flags & ZEND_JIT_EXIT_RESTORE_CALL) {
7405-
zend_execute_data *call = (zend_execute_data *)regs->r[ZREG_RX];
7405+
zend_execute_data *call = (zend_execute_data *)regs->gpr[ZREG_RX];
74067406
call->prev_execute_data = EX(call);
74077407
EX(call) = call;
74087408
}
@@ -7413,7 +7413,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf
74137413
zend_long val;
74147414

74157415
if (STACK_REG(stack, i) < ZREG_NUM) {
7416-
val = regs->r[STACK_REG(stack, i)];
7416+
val = regs->gpr[STACK_REG(stack, i)];
74177417
} else if (STACK_REG(stack, i) == ZREG_LONG_MIN) {
74187418
val = ZEND_LONG_MIN;
74197419
} else if (STACK_REG(stack, i) == ZREG_LONG_MAX) {
@@ -7426,7 +7426,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf
74267426
double val;
74277427

74287428
if (STACK_REG(stack, i) < ZREG_NUM) {
7429-
val = regs->xmm[STACK_REG(stack, i) - ZREG_XMM0];
7429+
val = regs->fpr[STACK_REG(stack, i) - ZREG_FIRST_FPR];
74307430
} else if (STACK_REG(stack, i) == ZREG_LONG_MIN_MINUS_1) {
74317431
val = (double)ZEND_LONG_MIN - 1.0;
74327432
} else if (STACK_REG(stack, i) == ZREG_LONG_MAX_PLUS_1) {
@@ -7444,8 +7444,8 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf
74447444
ZVAL_NULL(EX_VAR_NUM(i));
74457445
} else if (STACK_REG(stack, i) == ZREG_ZVAL_TRY_ADDREF) {
74467446
Z_TRY_ADDREF_P(EX_VAR_NUM(i));
7447-
} else if (STACK_REG(stack, i) == ZREG_ZVAL_COPY_R0) {
7448-
zval *val = (zval*)regs->r[0];
7447+
} else if (STACK_REG(stack, i) == ZREG_ZVAL_COPY_GPR0) {
7448+
zval *val = (zval*)regs->gpr[0];
74497449

74507450
if (UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)) {
74517451
/* Undefined array index or property */
@@ -7486,7 +7486,7 @@ int ZEND_FASTCALL zend_jit_trace_exit(uint32_t exit_num, zend_jit_registers_buf
74867486
}
74877487
}
74887488
if (t->exit_info[exit_num].flags & ZEND_JIT_EXIT_METHOD_CALL) {
7489-
zend_function *func = (zend_function*)regs->r[0];
7489+
zend_function *func = (zend_function*)regs->gpr[0];
74907490

74917491
if (UNEXPECTED(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
74927492
zend_string_release_ex(func->common.function_name, 0);

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3144,7 +3144,7 @@ static int zend_jit_trace_begin(dasm_State **Dst, uint32_t trace_num, zend_jit_t
31443144
if (STACK_REG(parent_stack, i) != ZREG_NONE) {
31453145
if (STACK_REG(parent_stack, i) < ZREG_NUM) {
31463146
ZEND_REGSET_EXCL(regset, STACK_REG(parent_stack, i));
3147-
} else if (STACK_REG(parent_stack, i) == ZREG_ZVAL_COPY_R0) {
3147+
} else if (STACK_REG(parent_stack, i) == ZREG_ZVAL_COPY_GPR0) {
31483148
ZEND_REGSET_EXCL(regset, ZREG_R0);
31493149
}
31503150
}
@@ -3941,7 +3941,7 @@ static int zend_jit_store_const(dasm_State **Dst, int var, zend_reg reg)
39413941
| GET_ZVAL_PTR r1, dst
39423942
| GC_ADDREF r1
39433943
|1:
3944-
} else if (reg == ZREG_ZVAL_COPY_R0) {
3944+
} else if (reg == ZREG_ZVAL_COPY_GPR0) {
39453945
zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0, 0);
39463946

39473947
| ZVAL_COPY_VALUE dst, -1, val_addr, -1, ZREG_R1, ZREG_R2
@@ -11724,7 +11724,7 @@ static int zend_jit_fetch_dim_read(dasm_State **Dst,
1172411724
if (!(op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF) - (MAY_BE_STRING|MAY_BE_LONG)))) {
1172511725
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
1172611726
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
11727-
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0);
11727+
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0);
1172811728
exit_point = zend_jit_trace_get_exit_point(opline+1, flags);
1172911729
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info);
1173011730
res_exit_addr = zend_jit_trace_get_exit_addr(exit_point);
@@ -12987,7 +12987,7 @@ static int zend_jit_fetch_obj(dasm_State **Dst,
1298712987

1298812988
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var));
1298912989
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
12990-
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0);
12990+
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0);
1299112991
exit_point = zend_jit_trace_get_exit_point(opline+1, flags);
1299212992
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info);
1299312993
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
@@ -15021,7 +15021,7 @@ static int zend_jit_fetch_constant(dasm_State **Dst,
1502115021
const void *exit_addr = NULL;
1502215022

1502315023
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->result.var), IS_UNKNOWN, 1);
15024-
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_R0);
15024+
SET_STACK_REG(stack, EX_VAR_TO_NUM(opline->result.var), ZREG_ZVAL_COPY_GPR0);
1502515025
exit_point = zend_jit_trace_get_exit_point(opline+1, 0);
1502615026
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->result.var), old_info);
1502715027
exit_addr = zend_jit_trace_get_exit_addr(exit_point);
@@ -15785,6 +15785,17 @@ static zend_regset zend_jit_get_scratch_regset(const zend_op *opline, const zend
1578515785
return regset;
1578615786
}
1578715787

15788+
static zend_regset zend_jit_get_low_priority_regset(void)
15789+
{
15790+
zend_regset regset = ZEND_REGSET_EMPTY;
15791+
15792+
ZEND_REGSET_INCL(regset, ZREG_R0);
15793+
ZEND_REGSET_INCL(regset, ZREG_R1);
15794+
ZEND_REGSET_INCL(regset, ZREG_XMM0);
15795+
ZEND_REGSET_INCL(regset, ZREG_XMM1);
15796+
return regset;
15797+
}
15798+
1578815799
#if defined(__clang__)
1578915800
# pragma clang diagnostic pop
1579015801
#endif

ext/opcache/jit/zend_jit_x86.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,19 +74,21 @@ typedef enum _zend_reg {
7474
ZREG_NULL,
7575

7676
ZREG_ZVAL_TRY_ADDREF,
77-
ZREG_ZVAL_COPY_R0,
77+
ZREG_ZVAL_COPY_GPR0,
7878
} zend_reg;
7979

8080
typedef struct _zend_jit_registers_buf {
8181
#if defined(__x86_64__) || defined(_WIN64)
82-
uint64_t r[16];
83-
double xmm[16];
82+
uint64_t gpr[16]; /* general purpose integer register */
83+
double fpr[16]; /* floating point registers */
8484
#else
85-
uint32_t r[8];
86-
double xmm[8];
85+
uint32_t gpr[8]; /* general purpose integer register */
86+
double fpr[8]; /* floating point registers */
8787
#endif
8888
} zend_jit_registers_buf;
8989

90+
#define ZREG_FIRST_FPR ZREG_XMM0
91+
9092
#define ZREG_RAX ZREG_R0
9193
#define ZREG_RCX ZREG_R1
9294
#define ZREG_RDX ZREG_R2

0 commit comments

Comments
 (0)