[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