Skip to content

Commit 5a5680c

Browse files
committed
Don't use asm arithmetic under msan
Clang 9 supports asm goto, so these no longer get automatically skipped. (cherry picked from commit 33bf149)
1 parent 1c6b084 commit 5a5680c

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Zend/zend_operators.h

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,15 @@ ZEND_API void zend_update_current_locale(void);
500500
#define ZVAL_OFFSETOF_TYPE \
501501
(offsetof(zval, u1.type_info) - offsetof(zval, value))
502502

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+
503509
static zend_always_inline void fast_long_increment_function(zval *op1)
504510
{
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__)
506512
__asm__ goto(
507513
"addl $1,(%0)\n\t"
508514
"jo %l1\n"
@@ -513,7 +519,7 @@ static zend_always_inline void fast_long_increment_function(zval *op1)
513519
return;
514520
overflow: ZEND_ATTRIBUTE_COLD_LABEL
515521
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__)
517523
__asm__ goto(
518524
"addq $1,(%0)\n\t"
519525
"jo %l1\n"
@@ -524,7 +530,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
524530
return;
525531
overflow: ZEND_ATTRIBUTE_COLD_LABEL
526532
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__)
528534
__asm__ goto (
529535
"ldr x5, [%0]\n\t"
530536
"adds x5, x5, 1\n\t"
@@ -565,7 +571,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
565571

566572
static zend_always_inline void fast_long_decrement_function(zval *op1)
567573
{
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__)
569575
__asm__ goto(
570576
"subl $1,(%0)\n\t"
571577
"jo %l1\n"
@@ -576,7 +582,7 @@ static zend_always_inline void fast_long_decrement_function(zval *op1)
576582
return;
577583
overflow: ZEND_ATTRIBUTE_COLD_LABEL
578584
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__)
580586
__asm__ goto(
581587
"subq $1,(%0)\n\t"
582588
"jo %l1\n"
@@ -587,7 +593,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
587593
return;
588594
overflow: ZEND_ATTRIBUTE_COLD_LABEL
589595
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__)
591597
__asm__ goto (
592598
"ldr x5, [%0]\n\t"
593599
"subs x5 ,x5, 1\n\t"
@@ -628,7 +634,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
628634

629635
static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2)
630636
{
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__)
632638
__asm__ goto(
633639
"movl (%1), %%eax\n\t"
634640
"addl (%2), %%eax\n\t"
@@ -646,7 +652,7 @@ static zend_always_inline void fast_long_add_function(zval *result, zval *op1, z
646652
return;
647653
overflow: ZEND_ATTRIBUTE_COLD_LABEL
648654
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__)
650656
__asm__ goto(
651657
"movq (%1), %%rax\n\t"
652658
"addq (%2), %%rax\n\t"
@@ -664,7 +670,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
664670
return;
665671
overflow: ZEND_ATTRIBUTE_COLD_LABEL
666672
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__)
668674
__asm__ goto(
669675
"ldr x5, [%1]\n\t"
670676
"ldr x6, [%2]\n\t"
@@ -738,7 +744,7 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o
738744

739745
static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2)
740746
{
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__)
742748
__asm__ goto(
743749
"movl (%1), %%eax\n\t"
744750
"subl (%2), %%eax\n\t"
@@ -756,7 +762,7 @@ static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, z
756762
return;
757763
overflow: ZEND_ATTRIBUTE_COLD_LABEL
758764
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__)
760766
__asm__ goto(
761767
"movq (%1), %%rax\n\t"
762768
"subq (%2), %%rax\n\t"
@@ -774,7 +780,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
774780
return;
775781
overflow: ZEND_ATTRIBUTE_COLD_LABEL
776782
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__)
778784
__asm__ goto(
779785
"ldr x5, [%1]\n\t"
780786
"ldr x6, [%2]\n\t"

0 commit comments

Comments
 (0)