@@ -508,9 +508,15 @@ ZEND_API void zend_update_current_locale(void);
508
508
#define ZVAL_OFFSETOF_TYPE \
509
509
(offsetof(zval, u1.type_info) - offsetof(zval, value))
510
510
511
+ #if defined(HAVE_ASM_GOTO ) && !__has_feature (memory_sanitizer )
512
+ # define ZEND_USE_ASM_ARITHMETIC 1
513
+ #else
514
+ # define ZEND_USE_ASM_ARITHMETIC 0
515
+ #endif
516
+
511
517
static zend_always_inline void fast_long_increment_function (zval * op1 )
512
518
{
513
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
519
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
514
520
__asm__ goto(
515
521
"addl $1,(%0)\n\t"
516
522
"jo %l1\n"
@@ -521,7 +527,7 @@ static zend_always_inline void fast_long_increment_function(zval *op1)
521
527
return ;
522
528
overflow : ZEND_ATTRIBUTE_COLD_LABEL
523
529
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MAX + 1.0 );
524
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
530
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__x86_64__ )
525
531
__asm__ goto(
526
532
"addq $1,(%0)\n\t"
527
533
"jo %l1\n"
@@ -532,7 +538,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
532
538
return ;
533
539
overflow : ZEND_ATTRIBUTE_COLD_LABEL
534
540
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MAX + 1.0 );
535
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
541
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__aarch64__ )
536
542
__asm__ goto (
537
543
"ldr x5, [%0]\n\t"
538
544
"adds x5, x5, 1\n\t"
@@ -573,7 +579,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
573
579
574
580
static zend_always_inline void fast_long_decrement_function (zval * op1 )
575
581
{
576
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
582
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
577
583
__asm__ goto(
578
584
"subl $1,(%0)\n\t"
579
585
"jo %l1\n"
@@ -584,7 +590,7 @@ static zend_always_inline void fast_long_decrement_function(zval *op1)
584
590
return ;
585
591
overflow : ZEND_ATTRIBUTE_COLD_LABEL
586
592
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MIN - 1.0 );
587
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
593
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__x86_64__ )
588
594
__asm__ goto(
589
595
"subq $1,(%0)\n\t"
590
596
"jo %l1\n"
@@ -595,7 +601,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
595
601
return ;
596
602
overflow : ZEND_ATTRIBUTE_COLD_LABEL
597
603
ZVAL_DOUBLE (op1 , (double )ZEND_LONG_MIN - 1.0 );
598
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
604
+ #elif ZEND_USE_ASM_ARITHMETIC && defined (__aarch64__ )
599
605
__asm__ goto (
600
606
"ldr x5, [%0]\n\t"
601
607
"subs x5 ,x5, 1\n\t"
@@ -636,7 +642,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
636
642
637
643
static zend_always_inline void fast_long_add_function (zval * result , zval * op1 , zval * op2 )
638
644
{
639
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
645
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
640
646
__asm__ goto(
641
647
"movl (%1), %%eax\n\t"
642
648
"addl (%2), %%eax\n\t"
@@ -654,7 +660,7 @@ static zend_always_inline void fast_long_add_function(zval *result, zval *op1, z
654
660
return ;
655
661
overflow : ZEND_ATTRIBUTE_COLD_LABEL
656
662
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
657
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
663
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__ )
658
664
__asm__ goto(
659
665
"movq (%1), %%rax\n\t"
660
666
"addq (%2), %%rax\n\t"
@@ -672,7 +678,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
672
678
return ;
673
679
overflow : ZEND_ATTRIBUTE_COLD_LABEL
674
680
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
675
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
681
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__ )
676
682
__asm__ goto(
677
683
"ldr x5, [%1]\n\t"
678
684
"ldr x6, [%2]\n\t"
@@ -746,7 +752,7 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o
746
752
747
753
static zend_always_inline void fast_long_sub_function (zval * result , zval * op1 , zval * op2 )
748
754
{
749
- #if defined( HAVE_ASM_GOTO ) && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
755
+ #if ZEND_USE_ASM_ARITHMETIC && defined(__i386__ ) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__ )
750
756
__asm__ goto(
751
757
"movl (%1), %%eax\n\t"
752
758
"subl (%2), %%eax\n\t"
@@ -764,7 +770,7 @@ static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, z
764
770
return ;
765
771
overflow : ZEND_ATTRIBUTE_COLD_LABEL
766
772
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
767
- #elif defined( HAVE_ASM_GOTO ) && defined(__x86_64__ )
773
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__x86_64__ )
768
774
__asm__ goto(
769
775
"movq (%1), %%rax\n\t"
770
776
"subq (%2), %%rax\n\t"
@@ -782,7 +788,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
782
788
return ;
783
789
overflow : ZEND_ATTRIBUTE_COLD_LABEL
784
790
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
785
- #elif defined( HAVE_ASM_GOTO ) && defined(__aarch64__ )
791
+ #elif ZEND_USE_ASM_ARITHMETIC && defined(__aarch64__ )
786
792
__asm__ goto(
787
793
"ldr x5, [%1]\n\t"
788
794
"ldr x6, [%2]\n\t"
0 commit comments