[pypy-commit] pypy s390x-backend: register immediate encoding
plan_rich
noreply at buildbot.pypy.org
Thu Oct 15 06:16:24 EDT 2015
Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r80232:066bb29ef362
Date: 2015-10-15 12:16 +0200
http://bitbucket.org/pypy/pypy/changeset/066bb29ef362/
Log: register immediate encoding
diff --git a/rpython/jit/backend/zarch/codebuilder.py b/rpython/jit/backend/zarch/codebuilder.py
--- a/rpython/jit/backend/zarch/codebuilder.py
+++ b/rpython/jit/backend/zarch/codebuilder.py
@@ -39,7 +39,6 @@
self.writechar(opcode1)
self.writechar(opcode2)
self.writechar('\x00')
- #self.writechar('\x00')
operands = ((reg1 & 0x0f) << 4) | (reg2 & 0xf)
self.writechar(chr(operands))
return encode_rr
@@ -55,7 +54,6 @@
byte = displace >> 8 & 0xf | base << 4
self.writechar(chr(byte))
self.writechar(chr(displace & 0xff))
-
return encode_rx
def build_rxy(mnemonic, (opcode1,opcode2)):
@@ -71,8 +69,16 @@
self.writechar(chr(displace & 0xff))
self.writechar(chr(displace >> 12 & 0xff))
self.writechar(opcode2)
+ return encode_rxy
- return encode_rxy
+def build_ri(mnemonic, (opcode,halfopcode)):
+ def encode_ri(self, reg_or_mask, imm):
+ self.writechar(opcode)
+ byte = (reg_or_mask & 0xf) << 4 | (ord(halfopcode) & 0xf)
+ self.writechar(chr(byte))
+ self.writechar(chr(imm >> 8 & 0xff))
+ self.writechar(chr(imm & 0xff))
+ return encode_ri
def build_instr_codes(clazz):
_mnemonic_codes = {
@@ -82,6 +88,8 @@
'A': (build_rx, ['\x5A']),
'AY': (build_rxy, ['\xE3','\x5A']),
'AG': (build_rxy, ['\xE3','\x08']),
+ 'AGF': (build_rxy, ['\xE3','\x18']),
+ 'AHI': (build_ri, ['\xA7','\x0A']),
}
for mnemonic, (builder, args) in _mnemonic_codes.items():
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
@@ -27,9 +27,10 @@
and self.index == self.instrindex):
return # ignore the extra character '\x40'
print self.op
- generated = "\x09from codebuilder.py: " + hexdump(self.expected[self.instrindex:self.index] + char)+"..."
+ post = self.expected[self.index+1:self.index+1+15]
+ generated = "\x09from codebuilder.py: " + hexdump(self.expected[self.instrindex:self.index] + "!" + char + "!" + post)+"..."
print generated
- expected = "\x09from gnu as: " + hexdump(self.expected[self.instrindex:self.index+15])+"..."
+ expected = "\x09from gnu as: " + hexdump(self.expected[self.instrindex:self.index+15])+"..."
print expected
raise Exception("Differs:\n" + generated + "\n" + expected)
self.index += 1
@@ -120,6 +121,11 @@
for ofs in self.stack_bp_tests(1)
]
+ def imm16_tests(self):
+ v = ([-128,-1,0,1,127] +
+ [random.randrange(-32768, 32767) for i in range(COUNT1)])
+ return v
+
def imm8_tests(self):
v = ([-128,-1,0,1,127] +
[random.randrange(-127, 127) for i in range(COUNT1)])
@@ -143,6 +149,7 @@
'r': self.assembler_operand_reg,
'x': lambda x: str(x),
'y': lambda x: str(x),
+ 'i': lambda x: str(x)
}
def operand_combinations(self, modes, arguments):
@@ -203,14 +210,16 @@
def modes(self, mode):
if mode == "rxy":
return "ry"
+ if mode == "rre":
+ return "rr"
return mode
def make_all_tests(self, methname, modes, args=[]):
tests = {
'r': self.REGS,
- 'e': None,
'x': self.INDEX_BASE_DISPLACE,
'y': self.INDEX_BASE_DISPLACE_LONG,
+ 'i': self.imm16_tests(),
}
combinations = []
for m in modes:
More information about the pypy-commit
mailing list