[pypy-commit] pypy default: Force alignment (to 16 bytes) of any call to materialize().
arigo
noreply at buildbot.pypy.org
Sun Feb 22 16:17:09 CET 2015
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r76045:0d1ee380a33e
Date: 2015-02-22 16:17 +0100
http://bitbucket.org/pypy/pypy/changeset/0d1ee380a33e/
Log: Force alignment (to 16 bytes) of any call to materialize(). Kill
stuff in the ARM backend.
diff --git a/rpython/jit/backend/arm/arch.py b/rpython/jit/backend/arm/arch.py
--- a/rpython/jit/backend/arm/arch.py
+++ b/rpython/jit/backend/arm/arch.py
@@ -1,4 +1,3 @@
-FUNC_ALIGN = 8
WORD = 4
DOUBLE_WORD = 8
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
@@ -4,7 +4,7 @@
from rpython.jit.backend.arm import conditions as c, registers as r
from rpython.jit.backend.arm import shift
-from rpython.jit.backend.arm.arch import (WORD, DOUBLE_WORD, FUNC_ALIGN,
+from rpython.jit.backend.arm.arch import (WORD, DOUBLE_WORD,
JITFRAME_FIXED_SIZE)
from rpython.jit.backend.arm.codebuilder import InstrBuilder, OverwritingBuilder
from rpython.jit.backend.arm.locations import imm, StackLocation, get_fp_offset
@@ -484,10 +484,6 @@
self.mc.BL(target)
return startpos
- def align(self):
- while(self.mc.currpos() % FUNC_ALIGN != 0):
- self.mc.writechar(chr(0))
-
def gen_func_epilog(self, mc=None, cond=c.AL):
gcrootmap = self.cpu.gc_ll_descr.gcrootmap
if mc is None:
@@ -557,7 +553,7 @@
debug_stop('jit-backend-ops')
def _call_header(self):
- self.align()
+ assert self.currpos() == 0
self.gen_func_prolog()
def _call_header_with_stack_check(self):
diff --git a/rpython/jit/backend/arm/codebuilder.py b/rpython/jit/backend/arm/codebuilder.py
--- a/rpython/jit/backend/arm/codebuilder.py
+++ b/rpython/jit/backend/arm/codebuilder.py
@@ -1,7 +1,7 @@
from rpython.jit.backend.arm import conditions as cond
from rpython.jit.backend.arm import registers as reg
from rpython.jit.backend.arm import support
-from rpython.jit.backend.arm.arch import (WORD, FUNC_ALIGN, PC_OFFSET)
+from rpython.jit.backend.arm.arch import WORD, PC_OFFSET
from rpython.jit.backend.arm.instruction_builder import define_instructions
from rpython.jit.backend.llsupport.asmmemmgr import BlockBuilderMixin
from rpython.rlib.objectmodel import we_are_translated
@@ -29,14 +29,9 @@
class AbstractARMBuilder(object):
-
def __init__(self, arch_version=7):
self.arch_version = arch_version
- def align(self):
- while(self.currpos() % FUNC_ALIGN != 0):
- self.writechar(chr(0))
-
def NOP(self):
self.MOV_rr(0, 0)
@@ -467,21 +462,6 @@
f.write(data[i])
f.close()
- # XXX remove and setup aligning in llsupport
- def materialize(self, asmmemmgr, allblocks, gcrootmap=None):
- size = self.get_relative_pos() + WORD
- malloced = asmmemmgr.malloc(size, size + 7)
- allblocks.append(malloced)
- rawstart = malloced[0]
- while(rawstart % FUNC_ALIGN != 0):
- rawstart += 1
- self.copy_to_raw_memory(rawstart)
- if self.gcroot_markers is not None:
- assert gcrootmap is not None
- for pos, mark in self.gcroot_markers:
- gcrootmap.put(rawstart + pos, mark)
- return rawstart
-
def clear_cache(self, addr):
if we_are_translated():
startaddr = rffi.cast(llmemory.Address, addr)
diff --git a/rpython/jit/backend/llsupport/asmmemmgr.py b/rpython/jit/backend/llsupport/asmmemmgr.py
--- a/rpython/jit/backend/llsupport/asmmemmgr.py
+++ b/rpython/jit/backend/llsupport/asmmemmgr.py
@@ -208,6 +208,8 @@
('data', lltype.FixedSizeArray(lltype.Char, SUBBLOCK_SIZE)))
SUBBLOCK_PTR.TO.become(SUBBLOCK)
+ ALIGN_MATERIALIZE = 16
+
gcroot_markers = None
def __init__(self, translated=None):
@@ -303,9 +305,12 @@
def materialize(self, asmmemmgr, allblocks, gcrootmap=None):
size = self.get_relative_pos()
+ align = self.ALIGN_MATERIALIZE
+ size += align - 1
malloced = asmmemmgr.malloc(size, size)
allblocks.append(malloced)
rawstart = malloced[0]
+ rawstart = (rawstart + align - 1) & (-align)
self.copy_to_raw_memory(rawstart)
if self.gcroot_markers is not None:
assert gcrootmap is not None
More information about the pypy-commit
mailing list