[pypy-commit] pypy arm-backend-2: implement the read timestamp operation. But it only works in privileged mode. Bah.
bivab
noreply at buildbot.pypy.org
Thu Apr 5 14:19:13 CEST 2012
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r54205:81fad4c1e587
Date: 2012-04-05 12:07 +0000
http://bitbucket.org/pypy/pypy/changeset/81fad4c1e587/
Log: implement the read timestamp operation. But it only works in
privileged mode. Bah.
diff --git a/pypy/jit/backend/arm/instruction_builder.py b/pypy/jit/backend/arm/instruction_builder.py
--- a/pypy/jit/backend/arm/instruction_builder.py
+++ b/pypy/jit/backend/arm/instruction_builder.py
@@ -223,6 +223,7 @@
n = (0x3 << 26 | (table['op1'] & 0x3F) << 20 | (table['op'] & 0x1) << 4)
def f(self, coproc, opc1, rt, crn, crm, opc2=0, cond=cond.AL):
+ assert coproc & 0xE != 0xA
self.write32(n
| cond << 28
| (opc1 & 0x7) << 21
diff --git a/pypy/jit/backend/arm/instructions.py b/pypy/jit/backend/arm/instructions.py
--- a/pypy/jit/backend/arm/instructions.py
+++ b/pypy/jit/backend/arm/instructions.py
@@ -93,6 +93,7 @@
supervisor_and_coproc = {
'MCR': {'op1': 0x20, 'op': 1, 'rn':0, 'coproc':0},
+ 'MRC': {'op1': 0x21, 'op': 1, 'rn':0, 'coproc':0},
}
block_data = {
diff --git a/pypy/jit/backend/arm/opassembler.py b/pypy/jit/backend/arm/opassembler.py
--- a/pypy/jit/backend/arm/opassembler.py
+++ b/pypy/jit/backend/arm/opassembler.py
@@ -1299,3 +1299,11 @@
return fcond
emit_op_convert_float_bytes_to_longlong = gen_emit_unary_float_op('float_bytes_to_longlong', 'VMOV_cc')
+
+ def emit_op_read_timestamp(self, op, arglocs, regalloc, fcond):
+ tmp = arglocs[0]
+ res = arglocs[1]
+ self.mc.MRC(15, 0, tmp.value, 15, 12, 1)
+ self.mc.MOV_ri(r.ip.value, 0)
+ self.mc.VMOV_cr(res.value, tmp.value, r.ip.value)
+ return fcond
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
@@ -1207,6 +1207,11 @@
prepare_op_convert_float_bytes_to_longlong = prepare_float_op(base=False,
name='prepare_op_convert_float_bytes_to_longlong')
+ def prepare_op_read_timestamp(self, op, fcond):
+ loc = self.get_scratch_reg(INT)
+ res = self.vfprm.force_allocate_reg(op.result)
+ return [loc, res]
+
def add_none_argument(fn):
return lambda self, op, fcond: fn(self, op, None, fcond)
More information about the pypy-commit
mailing list