@@ -604,6 +604,26 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
604
604
return ;
605
605
overflow : ZEND_ATTRIBUTE_COLD_LABEL
606
606
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
607
+ #elif defined(HAVE_ASM_GOTO ) && defined(__aarch64__ )
608
+ __asm__ goto(
609
+ "ldr x5, [%1]\n\t"
610
+ "ldr x6, [%2]\n\t"
611
+ "adds x5, x5, x6\n\t"
612
+ "bvs %l5\n\t"
613
+ "mov w6, %3\n\t"
614
+ "str x5, [%0]\n\t"
615
+ "str w6, [%0, %c4]\n"
616
+ :
617
+ : "r" (& result -> value ),
618
+ "r" (& op1 -> value ),
619
+ "r" (& op2 -> value ),
620
+ "n" (IS_LONG ),
621
+ "n" (ZVAL_OFFSETOF_TYPE )
622
+ : "x5" , "x6" , "cc" , "memory"
623
+ : overflow );
624
+ return ;
625
+ overflow : ZEND_ATTRIBUTE_COLD_LABEL
626
+ ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) + (double ) Z_LVAL_P (op2 ));
607
627
#elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
608
628
long lresult ;
609
629
if (UNEXPECTED (__builtin_saddl_overflow (Z_LVAL_P (op1 ), Z_LVAL_P (op2 ), & lresult ))) {
@@ -694,6 +714,26 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
694
714
return ;
695
715
overflow : ZEND_ATTRIBUTE_COLD_LABEL
696
716
ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
717
+ #elif defined(HAVE_ASM_GOTO ) && defined(__aarch64__ )
718
+ __asm__ goto(
719
+ "ldr x5, [%1]\n\t"
720
+ "ldr x6, [%2]\n\t"
721
+ "subs x5, x5, x6\n\t"
722
+ "bvs %l5\n\t"
723
+ "mov w6, %3\n\t"
724
+ "str x5, [%0]\n\t"
725
+ "str w6, [%0, %c4]\n"
726
+ :
727
+ : "r" (& result -> value ),
728
+ "r" (& op1 -> value ),
729
+ "r" (& op2 -> value ),
730
+ "n" (IS_LONG ),
731
+ "n" (ZVAL_OFFSETOF_TYPE )
732
+ : "x5" , "x6" , "cc" , "memory"
733
+ : overflow );
734
+ return ;
735
+ overflow : ZEND_ATTRIBUTE_COLD_LABEL
736
+ ZVAL_DOUBLE (result , (double ) Z_LVAL_P (op1 ) - (double ) Z_LVAL_P (op2 ));
697
737
#elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG
698
738
long lresult ;
699
739
if (UNEXPECTED (__builtin_ssubl_overflow (Z_LVAL_P (op1 ), Z_LVAL_P (op2 ), & lresult ))) {
0 commit comments