Author: Richard Plangger <[email protected]>
Branch: s390x-backend
Changeset: r80395:20f482e7b1ef
Date: 2015-10-22 16:01 +0200
http://bitbucket.org/pypy/pypy/changeset/20f482e7b1ef/
Log: testing single float to float cast, testing int64 to float cast,
added div (with remainer) instr
diff --git a/rpython/jit/backend/zarch/instruction_builder.py
b/rpython/jit/backend/zarch/instruction_builder.py
--- a/rpython/jit/backend/zarch/instruction_builder.py
+++ b/rpython/jit/backend/zarch/instruction_builder.py
@@ -5,11 +5,7 @@
def dummy_argument(arg):
""" NOT_RPYTHON """
- if arg == 'r' or arg == 'r/m':
- return 0
- if arg == 'f':
- return 0
- if arg == '-':
+ if arg in ('r', 'r/m', 'm', 'f', '-'):
return 0
if arg.startswith('i') or arg.startswith('u'):
return 0
@@ -25,6 +21,7 @@
- - unused
f - floating point register
r - register
+ m - mask
r/m - register or mask
iX - immediate X bits (signed)
uX - immediate X bits (unsigend)
diff --git a/rpython/jit/backend/zarch/instructions.py
b/rpython/jit/backend/zarch/instructions.py
--- a/rpython/jit/backend/zarch/instructions.py
+++ b/rpython/jit/backend/zarch/instructions.py
@@ -102,15 +102,23 @@
'LNEBR': ('rre', ['\xB3','\x01']),
'LNDBR': ('rre', ['\xB3','\x11']),
+
+ # load lengthended
+ 'LDEBR': ('rre', ['\xB3','\x04']),
}
floatingpoint_mnemonic_codes = {
'FIEBR': ('rrf', ['\xB3','\x57'], 'r,u4,r,-'),
'FIDBR': ('rrf', ['\xB3','\x5F'], 'r,u4,r,-'),
+ # convert to fixed
'CGEBR': ('rrf', ['\xB3','\xA8'], 'r,u4,r,-'),
'CGDBR': ('rrf', ['\xB3','\xA9'], 'r,u4,r,-'),
+ # convert from fixed
+ 'CEGBR': ('rre', ['\xB3','\xA4']),
+ 'CDGBR': ('rre', ['\xB3','\xA5']),
+
# arithmetic
# ADDITION
'AEBR': ('rre', ['\xB3','\x0A']),
@@ -133,6 +141,11 @@
'DDBR': ('rre', ['\xB3','\x1D']),
'DEB': ('rxe', ['\xED','\x0D'], 'r,bidl,-'),
'DDB': ('rxe', ['\xED','\x1D'], 'r,bidl,-'),
+
+ # DIVIDE (+mod)
+ 'DIEBR': ('rrf', ['\xB3','\x53'], 'r,r,r,m'),
+ 'DIDBR': ('rrf', ['\xB3','\x5B'], 'r,r,r,m'),
+
}
all_mnemonic_codes = {
diff --git a/rpython/jit/backend/zarch/test/test_assembler.py
b/rpython/jit/backend/zarch/test/test_assembler.py
--- a/rpython/jit/backend/zarch/test/test_assembler.py
+++ b/rpython/jit/backend/zarch/test/test_assembler.py
@@ -20,7 +20,7 @@
from rpython.rlib.objectmodel import specialize
from rpython.rlib.debug import ll_assert
from rpython.rlib.longlong2float import (float2longlong,
- DOUBLE_ARRAY_PTR)
+ DOUBLE_ARRAY_PTR, singlefloat2uint_emulator)
import ctypes
CPU = getcpuclass()
@@ -28,13 +28,14 @@
def byte_count(func):
return func._byte_count
-def BFL(value):
+def BFL(value, short=False):
+ if short:
+ return struct.pack('f', value)
return struct.pack('>q', float2longlong(value))
def ADDR(value):
ptr = ll2ctypes.lltype2ctypes(value)
addr = ctypes.addressof(ptr.contents.items)
- print hex(addr)
return struct.pack('>Q', addr)
def isclose(a,b, rel_tol=1e-9, abs_tol=0.0):
@@ -65,6 +66,12 @@
def float(self, val):
self.asm.mc.write(BFL(val))
+ def single_float(self, val):
+ self.asm.mc.write(BFL(val, short=True))
+
+ def int64(self, val):
+ self.asm.mc.write(struct.pack('>q', val))
+
class LabelCtx(object):
def __init__(self, asm, name):
self.asm = asm
@@ -315,3 +322,32 @@
self.mc.STD(reg.f0, loc.addr(0, reg.r11))
run_asm(self.a)
assert isclose(mem[0], 0.0)
+
+ def test_cast_single_float_to_float(self):
+ with lltype.scoped_alloc(DOUBLE_ARRAY_PTR.TO, 16) as mem:
+ with ActivationRecordCtx(self):
+ with LiteralPoolCtx(self) as pool:
+ pool.single_float(6.66)
+ pool.addr(mem)
+ self.mc.LEY(reg.f1, loc.addr(0, reg.r13))
+ ## cast short to long!
+ self.mc.LDEBR(reg.f0, reg.f1)
+ self.mc.LG(reg.r11, loc.addr(4, reg.r13))
+ self.mc.STD(reg.f0, loc.addr(0, reg.r11))
+ run_asm(self.a)
+ assert isclose(mem[0], 6.66, abs_tol=0.05)
+
+ def test_cast_int64_to_float(self):
+ with lltype.scoped_alloc(DOUBLE_ARRAY_PTR.TO, 16) as mem:
+ with ActivationRecordCtx(self):
+ with LiteralPoolCtx(self) as pool:
+ pool.int64(12345)
+ pool.addr(mem)
+ self.mc.LG(reg.r12, loc.addr(0, reg.r13))
+ # cast int to float!
+ self.mc.CDGBR(reg.f0, reg.r12)
+ self.mc.LG(reg.r11, loc.addr(8, reg.r13))
+ self.mc.STD(reg.f0, loc.addr(0, reg.r11))
+ run_asm(self.a)
+ assert isclose(mem[0], 12345.0)
+
diff --git a/rpython/jit/backend/zarch/test/test_auto_encoding.py
b/rpython/jit/backend/zarch/test/test_auto_encoding.py
--- a/rpython/jit/backend/zarch/test/test_auto_encoding.py
+++ b/rpython/jit/backend/zarch/test/test_auto_encoding.py
@@ -132,6 +132,7 @@
'r': REGS,
'f': FP_REGS,
'r/m': REGS,
+ 'm': range_of_bits(4),
'i4': range_of_bits(4, signed=True),
'i8': range_of_bits(8, signed=True),
'i16': range_of_bits(16, signed=True),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit