[pypy-commit] pypy arm64: converting bytes of longlong and float
fijal
pypy.commits at gmail.com
Mon Jun 24 04:06:59 EDT 2019
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: arm64
Changeset: r96849:67646e01619f
Date: 2019-06-24 08:06 +0000
http://bitbucket.org/pypy/pypy/changeset/67646e01619f/
Log: converting bytes of longlong and float
diff --git a/rpython/jit/backend/aarch64/codebuilder.py b/rpython/jit/backend/aarch64/codebuilder.py
--- a/rpython/jit/backend/aarch64/codebuilder.py
+++ b/rpython/jit/backend/aarch64/codebuilder.py
@@ -63,6 +63,14 @@
def MOV_rr(self, rd, rn):
self.ORR_rr(rd, r.xzr.value, rn)
+ def UMOV_rd(self, rd, rn):
+ base = 0b0100111000001000001111
+ self.write32((base << 10) | (rn << 5) | rd)
+
+ def INS_dr(self, rd, rn):
+ base = 0b0100111000001000000111
+ self.write32((base << 10) | (rn << 5) | rd)
+
def ORR_rr(self, rd, rn, rm):
base = 0b10101010000
self.write32((base << 21) | (rm << 16) |
diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
--- a/rpython/jit/backend/aarch64/opassembler.py
+++ b/rpython/jit/backend/aarch64/opassembler.py
@@ -263,7 +263,15 @@
def emit_op_float_truediv(self, op, arglocs):
arg1, arg2, res = arglocs
- self.mc.FDIV_dd(res.value, arg1.value, arg2.value)
+ self.mc.FDIV_dd(res.value, arg1.value, arg2.value)
+
+ def emit_op_convert_float_bytes_to_longlong(self, op, arglocs):
+ arg, res = arglocs
+ self.mc.UMOV_rd(res.value, arg.value)
+
+ def emit_op_convert_longlong_bytes_to_float(self, op, arglocs):
+ arg, res = arglocs
+ self.mc.INS_dr(res.value, arg.value)
emit_op_float_lt = gen_float_comp_op('float_lt', c.VFP_LT)
emit_op_float_le = gen_float_comp_op('float_le', c.VFP_LE)
diff --git a/rpython/jit/backend/aarch64/regalloc.py b/rpython/jit/backend/aarch64/regalloc.py
--- a/rpython/jit/backend/aarch64/regalloc.py
+++ b/rpython/jit/backend/aarch64/regalloc.py
@@ -485,6 +485,8 @@
prepare_op_cast_float_to_int = prepare_unary
prepare_op_cast_int_to_float = prepare_unary
+ prepare_op_convert_float_bytes_to_longlong = prepare_unary
+ prepare_op_convert_longlong_bytes_to_float = prepare_unary
# --------------------------------- fields --------------------------
More information about the pypy-commit
mailing list