[pypy-commit] pypy s390x-backend: rsi encoding e.g. branch relative long on index high

plan_rich noreply at buildbot.pypy.org
Fri Oct 16 11:32:30 EDT 2015


Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r80280:59735521f42f
Date: 2015-10-16 17:32 +0200
http://bitbucket.org/pypy/pypy/changeset/59735521f42f/

Log:	rsi encoding e.g. branch relative long on index high

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
@@ -53,6 +53,7 @@
 
 BIT_MASK_4 =  0xF
 BIT_MASK_12 = 0xFFF
+BIT_MASK_16 = 0xFFFF
 BIT_MASK_20 = 0xFFFFF
 BIT_MASK_32 = 0xFFFFFFFF
 
@@ -145,7 +146,7 @@
         byte = (reg_or_mask & 0xf) << 4 | (ord(halfopcode) & 0xf)
         self.writechar(chr(byte))
         # half word boundary, addressing bytes
-        self.write_s32(imm32 >> 1 & BIT_MASK_32)
+        self.write_i32(imm32 >> 1 & BIT_MASK_32)
     return encode_ri
 
 
@@ -243,6 +244,15 @@
         self.writechar(opcode2)
     return encode_ssa
 
+def build_rsi(mnemonic, (opcode,)):
+    @builder.arguments('r,r,i16')
+    def encode_ri(self, reg1, reg2, imm16):
+        self.writechar(opcode)
+        byte = (reg1 & BIT_MASK_4) << 4 | (reg2 & BIT_MASK_4)
+        self.writechar(chr(byte))
+        self.write_i16(imm16 >> 1 & BIT_MASK_16)
+    return encode_ri
+
 _mnemonic_codes = {
     'AR':      (build_rr,    ['\x1A']),
     'AGR':     (build_rre,   ['\xB9\x08']),
@@ -263,6 +273,7 @@
     'BRASL':   (build_ril,   ['\xC0','\x05']),
     'BXH':     (build_rs,    ['\x86']),
     'BXHG':    (build_rsy,   ['\xEB','\x44']),
+    'BRXH':    (build_rsi,   ['\x84']),
 }
 
 def build_instr_codes(clazz):
@@ -272,11 +283,14 @@
         setattr(clazz, name, func)
 
 class AbstractZARCHBuilder(object):
-    def write_s32(self, word):
+    def write_i32(self, word):
         self.writechar(chr((word >> 24) & 0xFF))
         self.writechar(chr((word >> 16) & 0xFF))
         self.writechar(chr((word >> 8) & 0xFF))
         self.writechar(chr(word & 0xFF))
+    def write_i16(self, word):
+        self.writechar(chr((word >> 8) & 0xFF))
+        self.writechar(chr(word & 0xFF))
 
 build_instr_codes(AbstractZARCHBuilder)
 


More information about the pypy-commit mailing list