Example #1
0
 def test_error_checking_unsigned(self):
     for b in range(0, 17):
         field = Field("test", b, 15+b)
         assert field.decode(field.encode(0)) == 0
         assert field.decode(field.encode(32768)) == 32768
         assert field.decode(field.encode(65535)) == 65535
         raises(ValueError, field.encode, -32768)
         raises(ValueError, field.encode, -1)
         raises(ValueError, field.encode, 65536)
Example #2
0
 def test_decode_signed(self):
     field = Field("test", 16, 31, 'signed')
     for i in range(1000):
         hi = long(random.randrange(0x10000)) << 16
         lo = long(random.randrange(0x10000))
         word = hi | lo
         if lo & 0x8000:
             lo |= ~0xFFFF
         assert field.decode(word) == lo
Example #3
0
 def test_decode_signed(self):
     field = Field("test", 16, 31, 'signed')
     for i in range(1000):
         hi = long(random.randrange(0x10000)) << 16
         lo = long(random.randrange(0x10000))
         word = hi|lo
         if lo & 0x8000:
             lo |= ~0xFFFF
         assert field.decode(word) == lo
Example #4
0
 def test_error_checking_signed(self):
     for b in range(0, 17):
         field = Field("test", b, 15 + b, 'signed')
         assert field.decode(field.encode(0)) == 0
         assert field.decode(field.encode(-32768)) == -32768
         assert field.decode(field.encode(32767)) == 32767
         raises(ValueError, field.encode, 32768)
         raises(ValueError, field.encode, -32769)
Example #5
0
 def test_error_checking_signed(self):
     for b in range(0, 17):
         field = Field("test", b, 15+b, 'signed')
         assert field.decode(field.encode(0)) == 0
         assert field.decode(field.encode(-32768)) == -32768
         assert field.decode(field.encode(32767)) == 32767
         raises(ValueError, field.encode, 32768)
         raises(ValueError, field.encode, -32769)
Example #6
0
 def test_decode(self):
     # this test is crappy
     field = Field("test", 0, 31)
     for i in range(100):
         j = random.randrange(maxppcint)
         assert field.decode(j) == j
     field = Field("test", 0, 31 - 4)
     for i in range(100):
         j = random.randrange(maxppcint)
         assert field.decode(j) == j >> 4
         assert field.decode(j) == j >> 4
     field = Field("test", 3, 31 - 4)
     for i in range(100):
         j = random.randrange(maxppcint >> 3)
         assert field.decode(j) == j >> 4
Example #7
0
 def test_error_checking_unsigned(self):
     for b in range(0, 17):
         field = Field("test", b, 15 + b)
         assert field.decode(field.encode(0)) == 0
         assert field.decode(field.encode(32768)) == 32768
         assert field.decode(field.encode(65535)) == 65535
         raises(ValueError, field.encode, -32768)
         raises(ValueError, field.encode, -1)
         raises(ValueError, field.encode, 65536)
Example #8
0
 def test_decode(self):
     # this test is crappy
     field = Field("test", 0, 31)
     for i in range(100):
         j = random.randrange(maxppcint)
         assert field.decode(j) == j
     field = Field("test", 0, 31-4)
     for i in range(100):
         j = random.randrange(maxppcint)
         assert field.decode(j) == j>>4
         assert field.decode(j) == j>>4
     field = Field("test", 3, 31-4)
     for i in range(100):
         j = random.randrange(maxppcint>>3)
         assert field.decode(j) == j>>4
Example #9
0
 def test_bitclash(self):
     raises(FormException, TestForm, 'h', 'hh')
     raises(FormException, TestForm, Field('t1', 0, 0), Field('t2', 0, 0))
Example #10
0
import random
import sys

from pypy.jit.codegen.ppc.ppcgen.form import Form, FormException
from pypy.jit.codegen.ppc.ppcgen.field import Field
from pypy.jit.codegen.ppc.ppcgen.assembler import Assembler

# 0                              31
# +-------------------------------+
# |       h       |       l       |
# +-------------------------------+
# |  hh   |  hl   |  lh   |  ll   |
# +-------------------------------+

test_fieldmap = {
    'l': Field('l', 16, 31),
    'h': Field('h', 0, 15),
    'll': Field('ll', 24, 31),
    'lh': Field('lh', 16, 23),
    'hl': Field('hl', 8, 15),
    'hh': Field('hh', 0, 7),
}


def p(w):
    import struct
    return struct.pack('>i', w)


class TestForm(Form):
    fieldmap = test_fieldmap
Example #11
0
 def test_decode_unsigned(self):
     field = Field("test", 16, 31)
     for i in range(1000):
         hi = long(random.randrange(0x10000)) << 16
         lo = long(random.randrange(0x10000))
         assert field.decode(hi|lo) == lo
Example #12
0
 def test_decode_unsigned(self):
     field = Field("test", 16, 31)
     for i in range(1000):
         hi = long(random.randrange(0x10000)) << 16
         lo = long(random.randrange(0x10000))
         assert field.decode(hi | lo) == lo
Example #13
0
    def r(self, i, labels, pc):
        if not ppc_fields['AA'].decode(i):
            v = self.decode(i)
            if pc + v in labels:
                return "%s (%r)" % (v, ', '.join(labels[pc + v]))
        else:
            return self.decode(i)


class spr(Field):
    def encode(self, value):
        value = (value & 31) << 5 | (value >> 5 & 31)
        return super(spr, self).encode(value)

    def decode(self, inst):
        value = super(spr, self).decode(inst)
        return (value & 31) << 5 | (value >> 5 & 31)


# other special fields?

ppc_fields = {
    "LI": IField("LI", *fields["LI"]),
    "BD": IField("BD", *fields["BD"]),
    "spr": spr("spr", *fields["spr"]),
}

for f in fields:
    if f not in ppc_fields:
        ppc_fields[f] = Field(f, *fields[f])