{"ARMv6", X264_CPU_ARMV6},
{"NEON", X264_CPU_NEON},
{"FastNeonMRC", X264_CPU_FAST_NEON_MRC},
+#elif ARCH_AARCH64
+ {"ARMv8", X264_CPU_ARMV8},
+ {"NEON", X264_CPU_NEON},
#endif
{"", 0},
};
return flags;
}
+#elif ARCH_AARCH64
+
+uint32_t x264_cpu_detect( void )
+{
+ return X264_CPU_ARMV8 | X264_CPU_NEON;
+}
+
#else
uint32_t x264_cpu_detect( void )
#elif ARCH_ARM
b->cpu&X264_CPU_NEON ? "neon" :
b->cpu&X264_CPU_ARMV6 ? "armv6" :
+#elif ARCH_AARCH64
+ b->cpu&X264_CPU_NEON ? "neon" :
+ b->cpu&X264_CPU_ARMV8 ? "armv8" :
#endif
"c",
#if HAVE_MMX
ret |= add_flags( &cpu0, &cpu1, X264_CPU_NEON, "NEON" );
if( x264_cpu_detect() & X264_CPU_FAST_NEON_MRC )
ret |= add_flags( &cpu0, &cpu1, X264_CPU_FAST_NEON_MRC, "Fast NEON MRC" );
+#elif ARCH_AARCH64
+ if( x264_cpu_detect() & X264_CPU_ARMV8 )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_ARMV8, "ARMv8" );
+ if( x264_cpu_detect() & X264_CPU_NEON )
+ ret |= add_flags( &cpu0, &cpu1, X264_CPU_NEON, "NEON" );
#endif
return ret;
}
/* PowerPC */
#define X264_CPU_ALTIVEC 0x0000001
-/* ARM */
+/* ARM and AArch64 */
#define X264_CPU_ARMV6 0x0000001
#define X264_CPU_NEON 0x0000002 /* ARM NEON */
#define X264_CPU_FAST_NEON_MRC 0x0000004 /* Transfer from NEON to ARM register is fast (Cortex-A9) */
+#define X264_CPU_ARMV8 0x0000008
/* Analyse flags */
#define X264_ANALYSE_I4x4 0x0001 /* Analyse i4x4 */