[pypy-commit] pypy ppc-jit-backend: implement method to call an address in a register
hager
noreply at buildbot.pypy.org
Tue Mar 13 18:35:28 CET 2012
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r53448:ffa102113953
Date: 2012-03-13 10:26 -0700
http://bitbucket.org/pypy/pypy/changeset/ffa102113953/
Log: implement method to call an address in a register
diff --git a/pypy/jit/backend/ppc/codebuilder.py b/pypy/jit/backend/ppc/codebuilder.py
--- a/pypy/jit/backend/ppc/codebuilder.py
+++ b/pypy/jit/backend/ppc/codebuilder.py
@@ -1,5 +1,6 @@
import os
from pypy.jit.backend.ppc.ppc_form import PPCForm as Form
+from pypy.jit.backend.ppc.locations import RegisterLocation
from pypy.jit.backend.ppc.ppc_field import ppc_fields
from pypy.jit.backend.ppc.assembler import Assembler
from pypy.jit.backend.ppc.arch import (IS_PPC_32, WORD, IS_PPC_64)
@@ -1046,6 +1047,25 @@
if IS_PPC_64:
self.load(r.TOC.value, r.SP.value, 5 * WORD)
+ def call_register(self, call_reg):
+ """ do a call to an address given in a register
+ """
+ assert isinstance(call_reg, RegisterLocation)
+ with scratch_reg(self):
+ if IS_PPC_32:
+ self.mr(r.SCRATCH.value, call_reg.value)
+ else:
+ self.store(r.TOC.value, r.SP.value, 5 * WORD)
+ self.mr(r.r11.value, call_reg.value)
+ self.load(r.SCRATCH.value, r.r11.value, 0)
+ self.load(r.r2.value, r.r11.value, WORD)
+ self.load(r.r11.value, r.r11.value, 2 * WORD)
+ self.mtctr(r.SCRATCH.value)
+ self.bctrl()
+
+ if IS_PPC_64:
+ self.load(r.TOC.value, r.SP.value, 5 * WORD)
+
def load(self, target_reg, base_reg, offset):
if IS_PPC_32:
self.lwz(target_reg, base_reg, offset)
More information about the pypy-commit
mailing list