[pypy-commit] pypy ppc-jit-backend: Added David's patch no. 7 to ppc_assembler.py and test_ppc.py.
hager
noreply at buildbot.pypy.org
Fri Aug 19 11:33:14 CEST 2011
Author: hager <sven.hager at uni-duesseldorf.de>
Branch: ppc-jit-backend
Changeset: r46631:d27dc3405273
Date: 2011-08-19 11:37 +0200
http://bitbucket.org/pypy/pypy/changeset/d27dc3405273/
Log: Added David's patch no. 7 to ppc_assembler.py and test_ppc.py.
diff --git a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppcgen/ppc_assembler.py
@@ -4,6 +4,7 @@
from pypy.jit.backend.ppc.ppcgen.ppc_field import ppc_fields
from pypy.jit.backend.ppc.ppcgen.assembler import Assembler
from pypy.jit.backend.ppc.ppcgen.symbol_lookup import lookup
+from pypy.jit.backend.ppc.ppcgen.arch import IS_PPC_32
from pypy.jit.backend.llsupport.asmmemmgr import BlockBuilderMixin
from pypy.jit.backend.llsupport.asmmemmgr import AsmMemoryManager
from pypy.rpython.lltypesystem import lltype, rffi
@@ -901,7 +902,13 @@
self.ori(rD, rD, lo(word))
def load_from(self, rD, addr):
- self.addis(rD, 0, ha(addr))
+ if IS_PPC_32:
+ self.addis(rD, 0, ha(addr))
+ else:
+ self.addis(rD, 0, highest(addr))
+ self.ori(rD, rD, higher(addr))
+ self.sldi(rD, rD, 32)
+ self.oris(rD, rD, high(addr))
self.lwz(rD, rD, la(addr))
def store_reg(self, source_reg, addr):
diff --git a/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py b/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py
--- a/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py
+++ b/pypy/jit/backend/ppc/ppcgen/test/test_ppc.py
@@ -6,7 +6,7 @@
from pypy.jit.backend.ppc.ppcgen.regname import *
from pypy.jit.backend.ppc.ppcgen import form, pystructs
from pypy.jit.backend.detect_cpu import autodetect_main_model
-from pypy.jit.backend.ppc.ppcgen.arch import WORD
+from pypy.jit.backend.ppc.ppcgen.arch import IS_PPC_32, IS_PPC_64, WORD
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.rpython.annlowlevel import llhelper
@@ -140,6 +140,8 @@
a.load_word(5, word)
a.load_word(6, word)
a.mullw(3, 5, 6)
+ if IS_PPC_64:
+ a.extsw(3, 3)
a.blr()
# 1000000 * 1000000 = 0b1110100011010100101001010001000000000000
@@ -150,6 +152,8 @@
a.load_word(5, word)
a.load_word(6, word)
a.mulhw(3, 5, 6)
+ if IS_PPC_64:
+ a.extsw(3, 3)
a.blr()
# 1000000 * 1000000 = 0b1110100011010100101001010001000000000000
@@ -160,6 +164,8 @@
a.load_word(5, word)
a.load_word(6, word)
a.mulhwu(3, 5, 6)
+ if IS_PPC_64:
+ a.extsw(3, 3)
a.blr()
@asmtest(expected=10000)
@@ -172,6 +178,8 @@
a.blr()
def test_call_function(self):
+ if is_64_bit_arch():
+ py.test.skip("call 64 bit")
functype = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Signed))
call_addr = rffi.cast(lltype.Signed, llhelper(functype, func))
a = PPCBuilder()
@@ -262,8 +270,12 @@
a.load_word(10, word1)
a.load_word(11, word2)
- a.load_word(8, rffi.cast(lltype.Signed, p))
- a.load_word(9, rffi.cast(lltype.Signed, p) + WORD)
+ if IS_PPC_64:
+ a.load_dword(8, rffi.cast(lltype.Signed, p))
+ a.load_dword(9, rffi.cast(lltype.Signed, p) + WORD)
+ else:
+ a.load_word(8, rffi.cast(lltype.Signed, p))
+ a.load_word(9, rffi.cast(lltype.Signed, p) + WORD)
a.stw(10, 8, 0)
a.stw(11, 9, 0)
@@ -292,14 +304,14 @@
def test_ld(self):
if not is_64_bit_arch():
- py.test.skip("maybe works on 64 bit?")
+ py.test.skip("works on 64 bit")
a = PPCBuilder()
- p = lltype.malloc(rffi.CArray(rffi.INT), 1, flavor="raw")
+ p = lltype.malloc(rffi.CArray(rffi.LONG), 1, flavor="raw")
addr = rffi.cast(lltype.Signed, p)
- p[0] = rffi.cast(rffi.INT, 200)
+ p[0] = rffi.cast(rffi.LONG, 200)
- a.load_word(3, addr)
+ a.load_dword(3, addr)
a.ld(3, 3, 0)
a.blr()
More information about the pypy-commit
mailing list