Skip to content

Commit 33bf149

Browse files
committed
Don't use asm arithmetic under msan
Clang 9 supports asm goto, so these no longer get automatically skipped.
1 parent 676f455 commit 33bf149

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
@@ -508,9 +508,15 @@ ZEND_API void zend_update_current_locale(void);
508508
#define ZVAL_OFFSETOF_TYPE \
509509
(offsetof(zval, u1.type_info) - offsetof(zval, value))
510510

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+
511517
static zend_always_inline void fast_long_increment_function(zval *op1)
512518
{
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__)
514520
__asm__ goto(
515521
"addl $1,(%0)\n\t"
516522
"jo %l1\n"
@@ -521,7 +527,7 @@ static zend_always_inline void fast_long_increment_function(zval *op1)
521527
return;
522528
overflow: ZEND_ATTRIBUTE_COLD_LABEL
523529
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__)
525531
__asm__ goto(
526532
"addq $1,(%0)\n\t"
527533
"jo %l1\n"
@@ -532,7 +538,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
532538
return;
533539
overflow: ZEND_ATTRIBUTE_COLD_LABEL
534540
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__)
536542
__asm__ goto (
537543
"ldr x5, [%0]\n\t"
538544
"adds x5, x5, 1\n\t"
@@ -573,7 +579,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
573579

574580
static zend_always_inline void fast_long_decrement_function(zval *op1)
575581
{
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__)
577583
__asm__ goto(
578584
"subl $1,(%0)\n\t"
579585
"jo %l1\n"
@@ -584,7 +590,7 @@ static zend_always_inline void fast_long_decrement_function(zval *op1)
584590
return;
585591
overflow: ZEND_ATTRIBUTE_COLD_LABEL
586592
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__)
588594
__asm__ goto(
589595
"subq $1,(%0)\n\t"
590596
"jo %l1\n"
@@ -595,7 +601,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
595601
return;
596602
overflow: ZEND_ATTRIBUTE_COLD_LABEL
597603
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__)
599605
__asm__ goto (
600606
"ldr x5, [%0]\n\t"
601607
"subs x5 ,x5, 1\n\t"
@@ -636,7 +642,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
636642

637643
static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2)
638644
{
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__)
640646
__asm__ goto(
641647
"movl (%1), %%eax\n\t"
642648
"addl (%2), %%eax\n\t"
@@ -654,7 +660,7 @@ static zend_always_inline void fast_long_add_function(zval *result, zval *op1, z
654660
return;
655661
overflow: ZEND_ATTRIBUTE_COLD_LABEL
656662
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__)
658664
__asm__ goto(
659665
"movq (%1), %%rax\n\t"
660666
"addq (%2), %%rax\n\t"
@@ -672,7 +678,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
672678
return;
673679
overflow: ZEND_ATTRIBUTE_COLD_LABEL
674680
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__)
676682
__asm__ goto(
677683
"ldr x5, [%1]\n\t"
678684
"ldr x6, [%2]\n\t"
@@ -746,7 +752,7 @@ static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *o
746752

747753
static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2)
748754
{
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__)
750756
__asm__ goto(
751757
"movl (%1), %%eax\n\t"
752758
"subl (%2), %%eax\n\t"
@@ -764,7 +770,7 @@ static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, z
764770
return;
765771
overflow: ZEND_ATTRIBUTE_COLD_LABEL
766772
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__)
768774
__asm__ goto(
769775
"movq (%1), %%rax\n\t"
770776
"subq (%2), %%rax\n\t"
@@ -782,7 +788,7 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
782788
return;
783789
overflow: ZEND_ATTRIBUTE_COLD_LABEL
784790
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__)
786792
__asm__ goto(
787793
"ldr x5, [%1]\n\t"
788794
"ldr x6, [%2]\n\t"

0 commit comments

Comments
 (0)