summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorAGSaidi <AGSaidi@users.noreply.github.com>2020-08-13 12:15:54 -0500
committerGitHub <noreply@github.com>2020-08-14 02:15:54 +0900
commit511b55bcefc81c036294dc9a544d14bd342acd3b (patch)
tree005ed74167f0a3a16363e09b6f354a63e8a56726 /gc.c
parent787cb0fd868bb6de40dcc78fcc39c28a96c7d561 (diff)
Enable arm64 optimizations that exist for power/x86 (#3393)
* Enable unaligned accesses on arm64 64-bit Arm platforms support unaligned accesses. Running the string benchmarks this change improves performance by an average of 1.04x, min .96x, max 1.21x, median 1.01x * arm64 enable gc optimizations Similar to x86 and powerpc optimizations. | |compare-ruby|built-ruby| |:------|-----------:|---------:| |hash1 | 0.225| 0.237| | | -| 1.05x| |hash2 | 0.110| 0.110| | | 1.00x| -| * vm_exec.c: improve performance for arm64 | |compare-ruby|built-ruby| |:------------------------------|-----------:|---------:| |vm_array | 26.501M| 27.959M| | | -| 1.06x| |vm_attr_ivar | 21.606M| 31.429M| | | -| 1.45x| |vm_attr_ivar_set | 21.178M| 26.113M| | | -| 1.23x| |vm_backtrace | 6.621| 6.668| | | -| 1.01x| |vm_bigarray | 26.205M| 29.958M| | | -| 1.14x| |vm_bighash | 504.155k| 479.306k| | | 1.05x| -| |vm_block | 16.692M| 21.315M| | | -| 1.28x| |block_handler_type_iseq | 5.083| 7.004| | | -| 1.38x|
Notes
Notes: Merged-By: nurse <naruse@airemix.jp>
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 22972dfc80..788f06f158 100644
--- a/gc.c
+++ b/gc.c
@@ -1115,6 +1115,19 @@ tick(void)
return val;
}
+#elif defined(__aarch64__) && defined(__GNUC__)
+typedef unsigned long tick_t;
+#define PRItick "lu"
+
+static __inline__ tick_t
+tick(void)
+{
+ unsigned long val;
+ __asm__ __volatile__ ("mrs %0, cntvct_el0", : "=r" (val));
+ return val;
+}
+
+
#elif defined(_WIN32) && defined(_MSC_VER)
#include <intrin.h>
typedef unsigned __int64 tick_t;