Author: fijal
Branch: arm64
Changeset: r96824:1f31b1f9873c
Date: 2019-06-18 17:23 +0200
http://bitbucket.org/pypy/pypy/changeset/1f31b1f9873c/

Log:    more floats

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
@@ -30,6 +30,10 @@
         assert 0 <= offset < 32768
         self.write32((base << 22) | ((offset >> 3) << 10) | (rn << 5) | rt)
 
+    def STR_dd(self, rt, rn, rm):
+        base = 0b11111100001
+        self.write32((base << 21) | (rm << 16) | (0b011010 << 10) | (rn << 5) 
| rt)
+
     def STP_rr_preindex(self, reg1, reg2, rn, offset):
         base = 0b1010100110
         assert -512 <= offset < 512
@@ -122,6 +126,10 @@
         base = 0b1111110101
         self.write32((base << 22) | (offset >> 3 << 10) | (rn << 5) | rt)
 
+    def LDR_dr(self, rt, rn, rm):
+        base = 0b11111100011
+        self.write32((base << 21) | (rm << 16) | (0b011010 << 10) | (rn << 5) 
| rt)
+
     def LDRB_ri(self, rt, rn, immed):
         base = 0b0011100101
         assert 0 <= immed <= 1<<12
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
@@ -348,7 +348,8 @@
                     self.mc.STR_di(value_loc.value, base_loc.value,
                                     ofs_loc.value)
                 else:
-                    xxx
+                    self.mc.STR_dd(value_loc.value, base_loc.value,
+                                   ofs_loc.value)
                 return
             if ofs_loc.is_imm():
                 self.mc.STR_ri(value_loc.value, base_loc.value,
@@ -489,17 +490,24 @@
 
     def emit_op_guard_value(self, op, arglocs):
         v0 = arglocs[0]
-        assert v0.is_core_reg() # can be also a float reg, but later
         v1 = arglocs[1]
-        if v1.is_core_reg():
-            loc = v1
-        elif v1.is_imm():
-            self.mc.gen_load_int(r.ip0.value, v1.value)
-            loc = r.ip0
+        if v0.is_core_reg():
+            if v1.is_core_reg():
+                loc = v1
+            elif v1.is_imm():
+                self.mc.gen_load_int(r.ip0.value, v1.value)
+                loc = r.ip0
+            else:
+                assert v1.is_stack()
+                yyy
+            self.mc.CMP_rr(v0.value, loc.value)
         else:
-            assert v1.is_stack()
-            yyy
-        self.mc.CMP_rr(v0.value, loc.value)
+            assert v0.is_vfp_reg()
+            if v1.is_vfp_reg():
+                loc = v1
+            else:
+                xxx
+            self.mc.FCMP_dd(v0.value, loc.value)
         self._emit_guard(op, c.EQ, arglocs[2:])
 
     def emit_op_guard_class(self, op, arglocs):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to