[pypy-commit] pypy arm64: casts

fijal pypy.commits at gmail.com
Tue Jun 18 11:14:19 EDT 2019


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: arm64
Changeset: r96822:9453a6ab3fe2
Date: 2019-06-18 14:57 +0000
http://bitbucket.org/pypy/pypy/changeset/9453a6ab3fe2/

Log:	casts

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
@@ -199,6 +199,14 @@
         base = 0b0001111001100000110000
         self.write32((base << 10) | (rn << 5) | rd)
 
+    def FCVTZS_d(self, rd, rn):
+        base = 0b1001111001111000
+        self.write32((base << 16) | (rn << 5) | rd)
+
+    def SCVTF_r(self, rd, rn):
+        base = 0b1001111001100010
+        self.write32((base << 16) | (rn << 5) | rd)
+
     def SUB_rr(self, rd, rn, rm, s=0):
         base = 0b11001011001 | (s << 8)
         self.write32((base << 21) | (rm << 16) | (0b11 << 13) | (rn << 5) | (rd))
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
@@ -253,6 +253,14 @@
         arg, res = arglocs
         self.mc.FABS_d(res.value, arg.value)        
 
+    def emit_op_cast_float_to_int(self, op, arglocs):
+        arg, res = arglocs
+        self.mc.FCVTZS_d(res.value, arg.value)
+
+    def emit_op_cast_int_to_float(self, op, arglocs):
+        arg, res = arglocs
+        self.mc.SCVTF_r(res.value, arg.value)
+
     def emit_op_load_from_gc_table(self, op, arglocs):
         res_loc, = arglocs
         index = op.getarg(0).getint()
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
@@ -464,6 +464,9 @@
 
     prepare_op_float_neg = prepare_unary
     prepare_op_float_abs = prepare_unary
+    prepare_op_cast_float_to_int = prepare_unary
+    prepare_op_cast_int_to_float = prepare_unary
+
 
     # --------------------------------- fields --------------------------
 


More information about the pypy-commit mailing list