[pypy-svn] pypy arm-backed-float: start using longlong representation for floats
bivab
commits-noreply at bitbucket.org
Wed Mar 30 17:31:35 CEST 2011
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backed-float
Changeset: r43020:b296af1b90d0
Date: 2011-03-30 15:31 +0200
http://bitbucket.org/pypy/pypy/changeset/b296af1b90d0/
Log: start using longlong representation for floats
diff --git a/pypy/jit/backend/arm/assembler.py b/pypy/jit/backend/arm/assembler.py
--- a/pypy/jit/backend/arm/assembler.py
+++ b/pypy/jit/backend/arm/assembler.py
@@ -8,6 +8,7 @@
from pypy.jit.backend.llsupport.regalloc import compute_vars_longevity, TempBox
from pypy.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
from pypy.jit.backend.model import CompiledLoopToken
+from pypy.jit.codewriter import longlong
from pypy.jit.metainterp.history import (Const, ConstInt, ConstPtr,
BoxInt, BoxPtr, AbstractFailDescr,
INT, REF, FLOAT)
@@ -58,7 +59,7 @@
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(lltype.Float, failargs_limit)
+ self.fail_boxes_float = values_array(longlong.FLOATSTORAGE, failargs_limit)
self.fail_boxes_ptr = values_array(llmemory.GCREF, failargs_limit)
self.fail_boxes_count = 0
self.fail_force_index = 0
@@ -162,7 +163,7 @@
elif group == self.REF_TYPE:
self.fail_boxes_ptr.setitem(fail_index, rffi.cast(llmemory.GCREF, value))
elif group == self.FLOAT_TYPE:
- self.fail_boxes_float.setitem(fail_index, rffi.cast(lltype.Float, value))
+ self.fail_boxes_float.setitem(fail_index, longlong.getfloatstorage(value))
else:
assert 0, 'unknown type'
diff --git a/pypy/jit/backend/arm/regalloc.py b/pypy/jit/backend/arm/regalloc.py
--- a/pypy/jit/backend/arm/regalloc.py
+++ b/pypy/jit/backend/arm/regalloc.py
@@ -9,12 +9,14 @@
prepare_cmp_op,
prepare_float_op,
_check_imm_arg)
+from pypy.jit.codewriter import longlong
from pypy.jit.metainterp.history import (Const, ConstInt, ConstFloat, ConstPtr,
Box, BoxInt, BoxPtr, AbstractFailDescr,
INT, REF, FLOAT, LoopToken)
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.backend.llsupport.descr import BaseFieldDescr, BaseArrayDescr
from pypy.jit.backend.llsupport import symbolic
+from pypy.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
from pypy.rpython.lltypesystem import lltype, rffi, rstr, llmemory
from pypy.jit.codewriter import heaptracker
from pypy.rlib.objectmodel import we_are_translated
@@ -56,8 +58,12 @@
save_around_call_regs = r.all_vfp_regs
def convert_to_imm(self, c):
- adr = self.assembler.datablockwrapper.malloc_aligned(8, 8)
- rffi.cast(rffi.CArrayPtr(rffi.DOUBLE), adr)[0] = c.getfloat()
+ datablockwrapper = MachineDataBlockWrapper(self.assembler.cpu.asmmemmgr,
+ self.assembler.blocks)
+ adr = datablockwrapper.malloc_aligned(8, 8)
+ datablockwrapper.done()
+ x = c.getfloatstorage()
+ rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE), adr)[0] = x
return locations.ConstFloatLoc(adr)
def __init__(self, longevity, frame_manager=None, assembler=None):
diff --git a/pypy/jit/backend/arm/runner.py b/pypy/jit/backend/arm/runner.py
--- a/pypy/jit/backend/arm/runner.py
+++ b/pypy/jit/backend/arm/runner.py
@@ -39,8 +39,8 @@
self.assembler.assemble_bridge(faildescr, inputargs, operations,
original_loop_token, log=log)
- def set_future_value_float(self, index, intvalue):
- self.assembler.fail_boxes_float.setitem(index, intvalue)
+ def set_future_value_float(self, index, floatvalue):
+ self.assembler.fail_boxes_float.setitem(index, floatvalue)
def set_future_value_int(self, index, intvalue):
self.assembler.fail_boxes_int.setitem(index, intvalue)
diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -117,16 +117,16 @@
i0 = BoxFloat()
i1 = BoxFloat()
operations = [
- ResOperation(rop.FLOAT_ADD, [i0, ConstFloat(2.3)], i1),
+ ResOperation(rop.FLOAT_ADD, [i0, constfloat(2.3)], i1),
ResOperation(rop.FINISH, [i1], None, descr=BasicFailDescr(1))
]
inputargs = [i0]
looptoken = LoopToken()
self.cpu.compile_loop(inputargs, operations, looptoken)
- self.cpu.set_future_value_float(0, 2.8)
+ self.cpu.set_future_value_float(0, longlong.getfloatstorage(2.8))
fail = self.cpu.execute_token(looptoken)
res = self.cpu.get_latest_value_float(0)
- assert res == 5.1
+ assert longlong.getrealfloat(res) == 5.1
assert fail.identifier == 1
def test_compile_loop(self):
More information about the Pypy-commit
mailing list