[pypy-commit] pypy ppc-backend-2: Add float support to emit_finish.
edelsohn
noreply at buildbot.pypy.org
Mon Apr 23 21:19:26 CEST 2012
Author: edelsohn
Branch: ppc-backend-2
Changeset: r54695:a98d6daa8fec
Date: 2012-04-23 15:19 -0400
http://bitbucket.org/pypy/pypy/changeset/a98d6daa8fec/
Log: Add float support to emit_finish.
diff --git a/pypy/jit/backend/ppc/opassembler.py b/pypy/jit/backend/ppc/opassembler.py
--- a/pypy/jit/backend/ppc/opassembler.py
+++ b/pypy/jit/backend/ppc/opassembler.py
@@ -346,12 +346,20 @@
with scratch_reg(self.mc):
self.mc.load_imm(r.SCRATCH, adr)
self.mc.storex(loc.value, 0, r.SCRATCH.value)
- elif loc.is_vfp_reg():
+ elif loc.is_fp_reg():
assert box.type == FLOAT
- assert 0, "not implemented yet"
+ adr = self.fail_boxes_float.get_addr_for_num(i)
+ with scratch_reg(self.mc):
+ self.mc.load_imm(r.SCRATCH, adr)
+ self.mc.stfdx(loc.value, 0, r.SCRATCH.value)
elif loc.is_stack() or loc.is_imm() or loc.is_imm_float():
if box.type == FLOAT:
- assert 0, "not implemented yet"
+ adr = self.fail_boxes_float.get_addr_for_num(i)
+ self.mc.stfd(r.f0.value, r.SPP.value, 0)
+ self.mov_loc_loc(loc, r.f0.value)
+ self.mc.load_imm(r.SCRATCH, adr)
+ self.mc.stfdx(r.f0.value, 0, r.SCRATCH.value)
+ self.mc.lfd(r.f0.value, r.SPP.value, 0)
elif box.type == REF or box.type == INT:
if box.type == REF:
adr = self.fail_boxes_ptr.get_addr_for_num(i)
@@ -459,7 +467,8 @@
for i in range(reg_args, n_args):
arg = arglocs[i]
if arg.type == FLOAT:
- assert 0, "not implemented yet"
+ count += 1
+ n += WORD
else:
count += 1
n += WORD
diff --git a/pypy/jit/backend/ppc/ppc_assembler.py b/pypy/jit/backend/ppc/ppc_assembler.py
--- a/pypy/jit/backend/ppc/ppc_assembler.py
+++ b/pypy/jit/backend/ppc/ppc_assembler.py
@@ -20,6 +20,7 @@
from pypy.jit.backend.model import CompiledLoopToken
from pypy.rpython.lltypesystem import lltype, rffi, llmemory
from pypy.jit.metainterp.resoperation import rop, ResOperation
+from pypy.jit.codewriter import longlong
from pypy.jit.metainterp.history import (INT, REF, FLOAT)
from pypy.jit.backend.x86.support import values_array
from pypy.rlib.debug import (debug_print, debug_start, debug_stop,
@@ -83,6 +84,8 @@
def __init__(self, cpu, failargs_limit=1000):
self.cpu = cpu
self.fail_boxes_int = values_array(lltype.Signed, failargs_limit)
+ self.fail_boxes_float = values_array(longlong.FLOATSTORAGE,
+ failargs_limit)
self.fail_boxes_ptr = values_array(llmemory.GCREF, failargs_limit)
self.mc = None
self.datablockwrapper = None
@@ -1371,11 +1374,14 @@
self.mc.store(r.SCRATCH.value, r.SPP.value, self.FORCE_INDEX_AREA)
def load(self, loc, value):
- assert loc.is_reg() and value.is_imm()
+ assert (loc.is_reg() and value.is_imm()
+ or loc.is_fp_reg() and value.is_imm_float())
if value.is_imm():
self.mc.load_imm(loc, value.getint())
elif value.is_imm_float():
- assert 0, "not implemented yet"
+ with scratch_reg(self.mc):
+ self.mc.load_imm(r.SCRATCH, value.getint())
+ self.mc.lfdx(loc.value, 0, r.SCRATCH.value)
def notimplemented_op(self, op, arglocs, regalloc):
print "[PPC/asm] %s not implemented" % op.getopname()
More information about the pypy-commit
mailing list