Author: Maciej Fijalkowski <[email protected]>
Branch: jitframe-on-heap
Changeset: r61183:71edf3e0a14f
Date: 2013-02-13 21:17 +0200
http://bitbucket.org/pypy/pypy/changeset/71edf3e0a14f/
Log: kill more duplication
diff --git a/rpython/jit/backend/arm/assembler.py
b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -734,26 +734,8 @@
return AsmInfo(ops_offset, startpos + rawstart, codeendpos - startpos)
- def rebuild_faillocs_from_descr(self, descr, inputargs):
- locs = []
- GPR_REGS = len(CoreRegisterManager.all_regs)
- VFP_REGS = len(VFPRegisterManager.all_regs)
- input_i = 0
- for pos in descr.rd_locs:
- if pos == -1:
- continue
- elif pos < GPR_REGS * WORD:
- locs.append(CoreRegisterManager.all_regs[pos // WORD])
- elif pos < (GPR_REGS * WORD + VFP_REGS * DOUBLE_WORD):
- pos = pos // DOUBLE_WORD - GPR_REGS * WORD // DOUBLE_WORD
- locs.append(VFPRegisterManager.all_regs[pos])
- else:
- i = pos // WORD - JITFRAME_FIXED_SIZE
- assert i >= 0
- tp = inputargs[input_i].type
- locs.append(StackLocation(i, pos, tp))
- input_i += 1
- return locs
+ def new_stack_loc(self, i, pos, tp):
+ return StackLocation(i, pos, tp)
def check_frame_before_jump(self, target_token):
if target_token in self.target_tokens_currently_compiling:
diff --git a/rpython/jit/backend/arm/opassembler.py
b/rpython/jit/backend/arm/opassembler.py
--- a/rpython/jit/backend/arm/opassembler.py
+++ b/rpython/jit/backend/arm/opassembler.py
@@ -24,7 +24,7 @@
from rpython.jit.backend.llsupport import symbolic
from rpython.jit.backend.llsupport.gcmap import allocate_gcmap
from rpython.jit.backend.llsupport.descr import InteriorFieldDescr
-from rpython.jit.backend.llsupport.assembler import GuardToken
+from rpython.jit.backend.llsupport.assembler import GuardToken, BaseAssembler
from rpython.jit.metainterp.history import (Box, AbstractFailDescr,
INT, FLOAT, REF)
from rpython.jit.metainterp.history import JitCellToken, TargetToken
@@ -48,7 +48,7 @@
self.offset = offset
-class ResOpAssembler(object):
+class ResOpAssembler(BaseAssembler):
def emit_op_int_add(self, op, arglocs, regalloc, fcond):
return self.int_add_impl(op, arglocs, regalloc, fcond)
diff --git a/rpython/jit/backend/arm/runner.py
b/rpython/jit/backend/arm/runner.py
--- a/rpython/jit/backend/arm/runner.py
+++ b/rpython/jit/backend/arm/runner.py
@@ -1,20 +1,18 @@
from rpython.jit.backend.arm.arch import JITFRAME_FIXED_SIZE
from rpython.jit.backend.arm.assembler import AssemblerARM
-from rpython.jit.backend.arm.registers import all_regs
+from rpython.jit.backend.arm.regalloc import CoreRegisterManager,\
+ VFPRegisterManager
from rpython.jit.backend.llsupport import jitframe
-from rpython.jit.backend.llsupport.symbolic import WORD
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
-from rpython.jit.metainterp import history
from rpython.rlib.jit_hooks import LOOP_RUN_CONTAINER
-from rpython.rlib.unroll import unrolling_iterable
-from rpython.rtyper.llinterp import LLInterpreter
-from rpython.rtyper.lltypesystem import lltype, rffi, llmemory
-
+from rpython.rtyper.lltypesystem import lltype, llmemory
jitframe.STATICSIZE = JITFRAME_FIXED_SIZE
class AbstractARMCPU(AbstractLLCPU):
+ IS_64_BIT = False
+
supports_floats = True
supports_longlong = False # XXX requires an implementation of
# read_timestamp that works in user mode
@@ -22,6 +20,8 @@
from rpython.jit.backend.arm.arch import JITFRAME_FIXED_SIZE
all_reg_indexes = range(16)
+ gen_regs = CoreRegisterManager.all_regs
+ float_regs = VFPRegisterManager.all_regs
use_hf_abi = False # use hard float abi flag
diff --git a/rpython/jit/backend/llsupport/assembler.py
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -36,6 +36,31 @@
gcmap[val // WORD // 8] |= r_uint(1) << (val % (WORD * 8))
return gcmap
+
class BaseAssembler(object):
""" Base class for Assembler generator in real backends
"""
+ def rebuild_faillocs_from_descr(self, descr, inputargs):
+ locs = []
+ GPR_REGS = len(self.cpu.gen_regs)
+ XMM_REGS = len(self.cpu.float_regs)
+ input_i = 0
+ if self.cpu.IS_64_BIT:
+ coeff = 1
+ else:
+ coeff = 2
+ for pos in descr.rd_locs:
+ if pos == -1:
+ continue
+ elif pos < GPR_REGS * WORD:
+ locs.append(self.cpu.gen_regs[pos // WORD])
+ elif pos < (GPR_REGS + XMM_REGS * coeff) * WORD:
+ pos = (pos // WORD - GPR_REGS) // coeff
+ locs.append(self.cpu.float_regs[pos])
+ else:
+ i = pos // WORD - self.cpu.JITFRAME_FIXED_SIZE
+ assert i >= 0
+ tp = inputargs[input_i].type
+ locs.append(self.new_stack_loc(i, pos, tp))
+ input_i += 1
+ return locs
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -1926,31 +1926,9 @@
ofs = self.cpu.get_ofs_of_frame_field('jf_gcmap')
mc.MOV_bi(ofs, 0)
- def rebuild_faillocs_from_descr(self, descr, inputargs):
- locs = []
- GPR_REGS = len(gpr_reg_mgr_cls.all_regs)
- XMM_REGS = len(xmm_reg_mgr_cls.all_regs)
+ def new_stack_loc(self, i, pos, tp):
base_ofs = self.cpu.get_baseofs_of_frame_field()
- input_i = 0
- if IS_X86_64:
- coeff = 1
- else:
- coeff = 2
- for pos in descr.rd_locs:
- if pos == -1:
- continue
- elif pos < GPR_REGS * WORD:
- locs.append(gpr_reg_mgr_cls.all_regs[pos // WORD])
- elif pos < (GPR_REGS + XMM_REGS * coeff) * WORD:
- pos = (pos // WORD - GPR_REGS) // coeff
- locs.append(xmm_reg_mgr_cls.all_regs[pos])
- else:
- i = pos // WORD - JITFRAME_FIXED_SIZE
- assert i >= 0
- tp = inputargs[input_i].type
- locs.append(StackLoc(i, get_ebp_ofs(base_ofs, i), tp))
- input_i += 1
- return locs
+ return StackLoc(i, get_ebp_ofs(base_ofs, i), tp)
def setup_failure_recovery(self):
self.failure_recovery_code = [0, 0, 0, 0]
diff --git a/rpython/jit/backend/x86/runner.py
b/rpython/jit/backend/x86/runner.py
--- a/rpython/jit/backend/x86/runner.py
+++ b/rpython/jit/backend/x86/runner.py
@@ -2,7 +2,7 @@
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
from rpython.rlib.jit_hooks import LOOP_RUN_CONTAINER
from rpython.jit.backend.x86.assembler import Assembler386
-from rpython.jit.backend.x86.regalloc import gpr_reg_mgr_cls
+from rpython.jit.backend.x86.regalloc import gpr_reg_mgr_cls, xmm_reg_mgr_cls
from rpython.jit.backend.x86.profagent import ProfileAgent
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
from rpython.jit.backend.x86 import regloc
@@ -24,6 +24,8 @@
from rpython.jit.backend.x86.arch import JITFRAME_FIXED_SIZE
all_reg_indexes = gpr_reg_mgr_cls.all_reg_indexes
+ gen_regs = gpr_reg_mgr_cls.all_regs
+ float_regs = xmm_reg_mgr_cls.all_regs
def __init__(self, rtyper, stats, opts=None, translate_support_code=False,
gcdescr=None):
@@ -128,12 +130,13 @@
class CPU386(AbstractX86CPU):
backend_name = 'x86'
- WORD = 4
NUM_REGS = 8
CALLEE_SAVE_REGISTERS = [regloc.ebx, regloc.esi, regloc.edi]
supports_longlong = True
+ IS_64_BIT = False
+
def __init__(self, *args, **kwargs):
assert sys.maxint == (2**31 - 1)
super(CPU386, self).__init__(*args, **kwargs)
@@ -144,8 +147,9 @@
class CPU_X86_64(AbstractX86CPU):
backend_name = 'x86_64'
- WORD = 8
NUM_REGS = 16
CALLEE_SAVE_REGISTERS = [regloc.ebx, regloc.r12, regloc.r13, regloc.r14,
regloc.r15]
+ IS_64_BIT = True
+
CPU = CPU386
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit