@@ -500,9 +500,15 @@ ZEND_API void zend_update_current_locale(void);
500
500
#define ZVAL_OFFSETOF_TYPE \
501
501
(offsetof(zval, u1.type_info) - offsetof(zval, value))
502
502
503
+ #if defined(HAVE_ASM_GOTO ) && !__has_feature (memory_sanitizer )
504
+ # define ZEND_USE_ASM_ARITHMETIC 1
505
+ #else
506
+ # define ZEND_USE_ASM_ARITHMETIC 0
507
+ #endif
508
+
503
509
static zend_always_inline void fast_long_increment_function (zval * op1 )
504
510
{
505
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
511
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
506
512
__asm__ goto(
507
513
"addl $1,(%0)\n\t"
508
514
"jo %l1\n"
@@ -513,7 +519,7 @@ static zend_always_inline void fast_long_increment_function(zval *op1)
513
519
return ;
514
520
overflow : ZEND_ATTRIBUTE_COLD_LABEL
515
521
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MAX + 1.0 );
516
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
522
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__x86_64__ )
517
523
__asm__ goto(
518
524
"addq $1,(%0)\n\t"
519
525
"jo %l1\n"
@@ -524,7 +530,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
524
530
return ;
525
531
overflow : ZEND_ATTRIBUTE_COLD_LABEL
526
532
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MAX + 1.0 );
527
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
533
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__aarch64__ )
528
534
__asm__ goto (
529
535
"ldr x5, [%0]\n\t"
530
536
"adds x5, x5, 1\n\t"
@@ -565,7 +571,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
565
571
566
572
static zend_always_inline void fast_long_decrement_function (zval * op1 )
567
573
{
568
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
574
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
569
575
__asm__ goto(
570
576
"subl $1,(%0)\n\t"
571
577
"jo %l1\n"
@@ -576,7 +582,7 @@ static zend_always_inline void fast_long_decrement_function(zval *op1)
576
582
return ;
577
583
overflow : ZEND_ATTRIBUTE_COLD_LABEL
578
584
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MIN - 1.0 );
579
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
585
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__x86_64__ )
580
586
__asm__ goto(
581
587
"subq $1,(%0)\n\t"
582
588
"jo %l1\n"
@@ -587,7 +593,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
587
593
return ;
588
594
overflow : ZEND_ATTRIBUTE_COLD_LABEL
589
595
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MIN - 1.0 );
590
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
596
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__aarch64__ )
591
597
__asm__ goto (
592
598
"ldr x5, [%0]\n\t"
593
599
"subs x5 ,x5, 1\n\t"
@@ -628,7 +634,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
628
634
629
635
static zend_always_inline void fast_long_add_function (zval * result , zval * op1 , zval * op2 )
630
636
{
631
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
637
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
632
638
__asm__ goto(
633
639
"movl (%1), %%eax\n\t"
634
640
"addl (%2), %%eax\n\t"
@@ -646,7 +652,7 @@ static zend_always_inline void fast_long_add_function(zval *result, zval *op1, z
646
652
return ;
647
653
overflow : ZEND_ATTRIBUTE_COLD_LABEL
648
654
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
649
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
655
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__ )
650
656
__asm__ goto(
651
657
"movq (%1), %%rax\n\t"
652
658
"addq (%2), %%rax\n\t"
@@ -664,7 +670,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
664
670
return ;
665
671
overflow : ZEND_ATTRIBUTE_COLD_LABEL
666
672
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
667
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
673
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__ )
668
674
__asm__ goto(
669
675
"ldr x5, [%1]\n\t"
670
676
"ldr x6, [%2]\n\t"
@@ -738,7 +744,7 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o
738
744
739
745
static zend_always_inline void fast_long_sub_function (zval * result , zval * op1 , zval * op2 )
740
746
{
741
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
747
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
742
748
__asm__ goto(
743
749
"movl (%1), %%eax\n\t"
744
750
"subl (%2), %%eax\n\t"
@@ -756,7 +762,7 @@ static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, z
756
762
return ;
757
763
overflow : ZEND_ATTRIBUTE_COLD_LABEL
758
764
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
759
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
765
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__ )
760
766
__asm__ goto(
761
767
"movq (%1), %%rax\n\t"
762
768
"subq (%2), %%rax\n\t"
@@ -774,7 +780,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
774
780
return ;
775
781
overflow : ZEND_ATTRIBUTE_COLD_LABEL
776
782
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
777
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
783
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__ )
778
784
__asm__ goto(
779
785
"ldr x5, [%1]\n\t"
780
786
"ldr x6, [%2]\n\t"
0 commit comments