aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-12 03:59:39 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-12 03:59:39 +0000
commitd1075b72c819ee537bde8a302340c4b837402a76 (patch)
tree191b8d66050bb09829f336e9efd7ba300cfb08da
parent0210b487a4ed299d3aad570c8cec74303c2cb308 (diff)
downloadruby-d1075b72c819ee537bde8a302340c4b837402a76.tar.gz
* vm_exec.c: improve performance in ppc64 arch.
[ruby-core:63437] [Feature #9997] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47149 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--vm_exec.c8
2 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 6f62f68d4f..730969de43 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Aug 12 12:57:28 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+
+ * vm_exec.c: improve performance in ppc64 arch.
+ [ruby-core:63437] [Feature #9997]
+
Tue Aug 12 12:14:52 2014 Akira Matsuda <ronnie@dio.jp>
* lib/fileutils.rb: fix typo.
diff --git a/vm_exec.c b/vm_exec.c
index 3a29136b1e..330d35a194 100644
--- a/vm_exec.c
+++ b/vm_exec.c
@@ -24,6 +24,9 @@ static void vm_analysis_insn(int insn);
#elif defined(__GNUC__) && defined(__i386__)
#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("e" reg)
+#elif defined(__GNUC__) && defined(__powerpc64__)
+#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg)
+
#else
#define DECL_SC_REG(type, r, reg) register type reg_##r
#endif
@@ -70,6 +73,11 @@ vm_exec_core(rb_thread_t *th, VALUE initial)
# endif
#define USE_MACHINE_REGS 1
+#elif defined(__GNUC__) && defined(__powerpc64__)
+ DECL_SC_REG(VALUE *, pc, "14");
+ DECL_SC_REG(rb_control_frame_t *, cfp, "15");
+#define USE_MACHINE_REGS 1
+
#else
register rb_control_frame_t *reg_cfp;
VALUE *reg_pc;