static zend_always_inline void fast_long_increment_function(zval *op1)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if defined(HAVE_ASM_GOTO) && defined(__i386__)
__asm__ goto(
"incl (%0)\n\t"
"jo %l1\n"
return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0);
-#elif defined(__GNUC__) && defined(__x86_64__)
+#elif defined(HAVE_ASM_GOTO) && defined(__x86_64__)
__asm__ goto(
"incq (%0)\n\t"
"jo %l1\n"
static zend_always_inline void fast_long_decrement_function(zval *op1)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if defined(HAVE_ASM_GOTO) && defined(__i386__)
__asm__ goto(
"decl (%0)\n\t"
"jo %l1\n"
return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0);
-#elif defined(__GNUC__) && defined(__x86_64__)
+#elif defined(HAVE_ASM_GOTO) && defined(__x86_64__)
__asm__ goto(
"decq (%0)\n\t"
"jo %l1\n"
static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if defined(HAVE_ASM_GOTO) && defined(__i386__)
__asm__ goto(
"movl (%1), %%eax\n\t"
"addl (%2), %%eax\n\t"
return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
-#elif defined(__GNUC__) && defined(__x86_64__)
+#elif defined(HAVE_ASM_GOTO) && defined(__x86_64__)
__asm__ goto(
"movq (%1), %%rax\n\t"
"addq (%2), %%rax\n\t"
static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2)
{
-#if defined(__GNUC__) && defined(__i386__)
+#if defined(HAVE_ASM_GOTO) && defined(__i386__)
__asm__ goto(
"movl (%1), %%eax\n\t"
"subl (%2), %%eax\n\t"
return;
overflow: ZEND_ATTRIBUTE_COLD_LABEL
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
-#elif defined(__GNUC__) && defined(__x86_64__)
+#elif defined(HAVE_ASM_GOTO) && defined(__x86_64__)
__asm__ goto(
"movq (%1), %%rax\n\t"
"subq (%2), %%rax\n\t"
PHP_CRYPT_R_STYLE
fi
+dnl Check for asm goto support
+AC_CACHE_CHECK([for asm goto], ac_cv__asm_goto,
+[AC_TRY_RUN([
+int main(void) {
+ __asm__ goto("jmp %l0\n" :::: end);
+end:
+ return 0;
+}
+ ],ac_cv__asm_goto=yes, ac_cv__asm_goto=no, ac_cv__asm_goto=no)])
+
+if test "$ac_cv__asm_goto" = yes; then
+ AC_DEFINE(HAVE_ASM_GOTO,1,[Define if asm goto support])
+fi
+
PHP_CHECK_VALGRIND
dnl General settings.