Author: Richard Plangger <planri...@gmail.com>
Branch: ppc-vsx-support
Changeset: r85360:0ad6556517cf
Date: 2016-06-22 18:10 +0200
http://bitbucket.org/pypy/pypy/changeset/0ad6556517cf/

Log:    (ppc) added impl for float_abs & float_neg.

diff --git a/rpython/jit/backend/ppc/codebuilder.py 
b/rpython/jit/backend/ppc/codebuilder.py
--- a/rpython/jit/backend/ppc/codebuilder.py
+++ b/rpython/jit/backend/ppc/codebuilder.py
@@ -62,6 +62,7 @@
 XFX = Form("CRM", "rS", "XO1")
 XLL = Form("LL", "XO1")
 XX1 = Form("fvrT", "rA", "rB", "XO1")
+XX2 = Form("fvrT", "fvrB", "XO5")
 XX3 = Form("fvrT", "fvrA", "fvrB", "XO9")
 XV = Form("ivrT", "rA", "rB", "XO1")
 VX = Form("ivrT", "ivrA", "ivrB", "XO8")
@@ -611,6 +612,14 @@
     xvdivdp = XX3(60, XO9=102)
     xvdivsp = XX3(60, XO9=88)
 
+    # neg
+    xvnegdp = XX2(60, XO5=505)
+    xvabssp = XX2(60, XO5=441)
+
+    # abs
+    xvabsdp = XX2(60, XO5=473)
+    xvabssp = XX2(60, XO5=409)
+
     # INTEGER
     # -------
 
@@ -644,8 +653,6 @@
     # vector move register is alias to vector or
     vmr = vor
 
-
-
     # shift, perm and select
     lvsl = XV(31, XO1=6)
     lvsr = XV(31, XO1=38)
diff --git a/rpython/jit/backend/ppc/vector_ext.py 
b/rpython/jit/backend/ppc/vector_ext.py
--- a/rpython/jit/backend/ppc/vector_ext.py
+++ b/rpython/jit/backend/ppc/vector_ext.py
@@ -213,6 +213,26 @@
         # TODO
         self.regalloc_mov(loc0, resloc)
 
+    def emit_vec_float_abs(self, op, arglocs, resloc):
+        resloc, argloc, sizeloc = arglocs
+        size = sizeloc.value
+        if size == 4:
+            self.mc.xvabssp(resloc.value, argloc.value)
+        elif size == 8:
+            self.mc.xvabsdp(resloc.value, argloc.value)
+        else:
+            notimplemented("[ppc/assembler] float abs for size %d" % size)
+
+    def emit_vec_float_neg(self, op, arglocs, resloc):
+        resloc, argloc, sizeloc = arglocs
+        size = sizeloc.value
+        if size == 4:
+            self.mc.xvnegsp(resloc.value, argloc.value)
+        elif size == 8:
+            self.mc.xvnegdp(resloc.value, argloc.value)
+        else:
+            notimplemented("[ppc/assembler] float neg for size %d" % size)
+
     #def genop_guard_vec_guard_true(self, guard_op, guard_token, locs, resloc):
     #    self.implement_guard(guard_token)
 
@@ -328,22 +348,6 @@
     #    # entries before) become ones
     #    self.mc.PCMPEQ(loc, temp, sizeloc.value)
 
-    #def genop_vec_float_abs(self, op, arglocs, resloc):
-    #    src, sizeloc = arglocs
-    #    size = sizeloc.value
-    #    if size == 4:
-    #        self.mc.ANDPS(src, heap(self.single_float_const_abs_addr))
-    #    elif size == 8:
-    #        self.mc.ANDPD(src, heap(self.float_const_abs_addr))
-
-    #def genop_vec_float_neg(self, op, arglocs, resloc):
-    #    src, sizeloc = arglocs
-    #    size = sizeloc.value
-    #    if size == 4:
-    #        self.mc.XORPS(src, heap(self.single_float_const_neg_addr))
-    #    elif size == 8:
-    #        self.mc.XORPD(src, heap(self.float_const_neg_addr))
-
     #def genop_vec_float_eq(self, op, arglocs, resloc):
     #    _, rhsloc, sizeloc = arglocs
     #    size = sizeloc.value
@@ -659,17 +663,16 @@
 
 
 
-    #def prepare_vec_arith_unary(self, op):
-    #    lhs = op.getarg(0)
-    #    assert isinstance(lhs, VectorOp)
-    #    args = op.getarglist()
-    #    res = self.xrm.force_result_in_reg(op, op.getarg(0), args)
-    #    self.perform(op, [res, imm(lhs.bytesize)], res)
+    def prepare_vec_arith_unary(self, op):
+        a0 = op.getarg(0)
+        loc0 = self.ensure_vector_reg(a0)
+        resloc = self.force_allocate_vector_reg(op)
+        sizeloc = imm(op.bytesize)
+        return [resloc, loc0, sizeloc]
 
-    #prepare_vec_float_neg = prepare_vec_arith_unary
-    #prepare_vec_float_abs = prepare_vec_arith_unary
-    #del prepare_vec_arith_unary
-
+    prepare_vec_float_neg = prepare_vec_arith_unary
+    prepare_vec_float_abs = prepare_vec_arith_unary
+    del prepare_vec_arith_unary
 
     #def prepare_vec_float_eq(self, op):
     #    assert isinstance(op, VectorOp)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to