zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval *op1, *op2;
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = EX_CONSTANT(opline->op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_left_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
+ && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
shift_right_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_or_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_and_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
zend_free_op free_op1, free_op2;
zval *op1, *op2;
- SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
+ && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
+ ZEND_VM_NEXT_OPCODE();
+ }
+
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
bitwise_xor_function(EX_VAR(opline->result.var), op1, op2);
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);