Author: Richard Plangger <planri...@gmail.com> Branch: s390x-backend Changeset: r80386:535d3fb38323 Date: 2015-10-22 12:13 +0200 http://bitbucket.org/pypy/pypy/changeset/535d3fb38323/
Log: made the instruction type RRF more general to support each unsupported parameter 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 @@ -9,6 +9,8 @@ return 0 if arg == 'f': return 0 + if arg == '-': + return 0 if arg.startswith('i') or arg.startswith('u'): return 0 return loc.addr(0) @@ -20,6 +22,7 @@ """ NOT_RPYTHON """ """ Available names: + - - unused f - floating point register r - register r/m - register or mask @@ -290,22 +293,28 @@ self.writechar(opcode2) return encode_ri -def build_rrf(mnemonic, (opcode1,opcode2)): - @builder.arguments('r,r/m,r,r/m') - def encode_rrf(self, r1, rm3, r2, rm4): - self.writechar(opcode1) - self.writechar(opcode2) - byte = (rm3 & BIT_MASK_4) << 4 | (rm4 & BIT_MASK_4) - self.writechar(chr(byte)) - byte = (r1 & BIT_MASK_4) << 4 | (r2 & BIT_MASK_4) - self.writechar(chr(byte)) - return encode_rrf +def _build_rrf(args): + def build_rff(mnemonic, (opcode1,opcode2)): + @builder.arguments(args) + def encode_rrf(self, r1, rm3, r2, rm4): + self.writechar(opcode1) + self.writechar(opcode2) + byte = (rm3 & BIT_MASK_4) << 4 | (rm4 & BIT_MASK_4) + self.writechar(chr(byte)) + byte = (r1 & BIT_MASK_4) << 4 | (r2 & BIT_MASK_4) + self.writechar(chr(byte)) + return encode_rrf + return build_rff + +build_rrf = _build_rrf('r,u4,r,-') def build_unpack_func(mnemonic, func): def function(self, *args): - newargs = [None] * len(args) + newargs = [None] * len(func._arguments_) for i,arg in enumerate(unrolling_iterable(func._arguments_)): - if arg == 'r' or arg == 'r/m' or arg == 'f': + if arg == '-': + newargs[i] = 0 + elif arg == 'r' or arg == 'r/m' or arg == 'f': newargs[i] = args[i].value elif arg.startswith('i') or arg.startswith('u'): newargs[i] = args[i].value diff --git a/rpython/jit/backend/zarch/masks.py b/rpython/jit/backend/zarch/masks.py new file mode 100644 --- /dev/null +++ b/rpython/jit/backend/zarch/masks.py @@ -0,0 +1,8 @@ +from rpython.jit.backend.zarch import locations as loc + +RND_CURMODE = loc.imm(0x0) +RND_BIASED_NEAREST = loc.imm(0x1) +RND_NEARST = loc.imm(0x4) +RND_TOZERO = loc.imm(0x5) +RND_TO_POSINF = loc.imm(0x6) +RND_TO_NEGINF= loc.imm(0x7) 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 @@ -201,7 +201,6 @@ self.mc.write(BFL(-15.0)) self.jump_here(self.mc.BRAS, 'lit') self.mc.LD(reg.f0, loc.addr(0, reg.r13)) - self.mc.FIDBR(reg.f1, msk.RND_CURMODE, reg.f0, loc.imm(0)) - self.mc.CGDBR(reg.r2, msk.RND_CURMODE, reg.f1, loc.imm(0)) + self.mc.CGDBR(reg.r2, msk.RND_CURMODE, reg.f0) self.a.jmpto(reg.r14) assert run_asm(self.a) == -15 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 @@ -128,6 +128,7 @@ FP_REGS = range(16) FP_REGNAMES = ['%%f%d' % i for i in FP_REGS] TEST_CASE_GENERATE = { + '-': [], 'r': REGS, 'f': FP_REGS, 'r/m': REGS, _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit