Exemple #1
0
 def f(n):
     o = llop.extract_ushort(llgroup.HALFWORD, goffsets[n])
     p = llop.get_group_member(Ptr(S1), grpptr, o)
     p.x = 5
     for i in range(len(goffsets)):
         if i != n:
             o = llop.extract_ushort(llgroup.HALFWORD, goffsets[i])
             q = llop.get_group_member(Ptr(S1), grpptr, o)
             q.x = 666
     return p.x
Exemple #2
0
 def malloc_big_fixedsize(size, tid):
     if self.DEBUG:
         self._random_usage_of_xmm_registers()
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_fixedsize_clear(llmemory.GCREF, type_id,
                                            size, False, False, False)
Exemple #3
0
 def f():
     p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1a)
     assert p == test.p1a
     p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1b)
     assert p == test.p1b
     p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2a)
     assert p == test.p2a
     p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2b)
     assert p == test.p2b
     #
     p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr, test.g1a,
                                    llmemory.sizeof(test.S1))
     assert p == test.p2a
     p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr, test.g2a,
                                    llmemory.sizeof(test.S2))
     assert p == test.p2b
     p = llop.get_next_group_member(lltype.Ptr(test.S1), grpptr, test.g2b,
                                    llmemory.sizeof(test.S2))
     assert p == test.p1b
     #
     expected = [123, 456]
     for i in range(2):
         p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, g1x[i])
         assert p.x == expected[i]
     #
     for i in range(2):
         s = llop.extract_ushort(HALFWORD, cslist[i])
         p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, s)
         assert p == test.p1b
     assert cslist[0] & ~MASK == 0x45 << HALFSHIFT
     assert cslist[1] & ~MASK == 0x41 << HALFSHIFT
     assert cslist[0] >> HALFSHIFT == 0x45
     assert cslist[1] >> (HALFSHIFT + 1) == 0x41 >> 1
     #
     return 42
Exemple #4
0
 def f():
     p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1a)
     assert p == test.p1a
     p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1b)
     assert p == test.p1b
     p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2a)
     assert p == test.p2a
     p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2b)
     assert p == test.p2b
     #
     p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr,
                                    test.g1a, llmemory.sizeof(test.S1))
     assert p == test.p2a
     p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr,
                                    test.g2a, llmemory.sizeof(test.S2))
     assert p == test.p2b
     p = llop.get_next_group_member(lltype.Ptr(test.S1), grpptr,
                                    test.g2b, llmemory.sizeof(test.S2))
     assert p == test.p1b
     #
     expected = [123, 456]
     for i in range(2):
         p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, g1x[i])
         assert p.x == expected[i]
     #
     for i in range(2):
         s = llop.extract_ushort(HALFWORD, cslist[i])
         p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, s)
         assert p == test.p1b
     assert cslist[0] & ~MASK == 0x45 << HALFSHIFT
     assert cslist[1] & ~MASK == 0x41 << HALFSHIFT
     assert cslist[0] >> HALFSHIFT == 0x45
     assert cslist[1] >> (HALFSHIFT+1) == 0x41 >> 1
     #
     return 42
Exemple #5
0
 def _bh_malloc(self, sizedescr):
     from rpython.memory.gctypelayout import check_typeid
     llop1 = self.llop1
     type_id = llop.extract_ushort(llgroup.HALFWORD, sizedescr.tid)
     check_typeid(type_id)
     return llop1.do_malloc_fixedsize_clear(llmemory.GCREF,
                                            type_id, sizedescr.size,
                                            False, False, False)
Exemple #6
0
 def malloc_big_fixedsize(size, tid):
     if self.DEBUG:
         self._random_usage_of_xmm_registers()
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_fixedsize_clear(llmemory.GCREF,
                                            type_id, size,
                                            False, False, False)
Exemple #7
0
 def _bh_malloc(self, sizedescr):
     from rpython.memory.gctypelayout import check_typeid
     llop1 = self.llop1
     type_id = llop.extract_ushort(llgroup.HALFWORD, sizedescr.tid)
     check_typeid(type_id)
     size = self.round_up_for_allocation(sizedescr.size)
     return llop1.do_malloc_fixedsize_clear(llmemory.GCREF, type_id, size,
                                            False, False, False)
Exemple #8
0
 def _bh_malloc_array(self, num_elem, arraydescr):
     from rpython.memory.gctypelayout import check_typeid
     llop1 = self.llop1
     type_id = llop.extract_ushort(llgroup.HALFWORD, arraydescr.tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(llmemory.GCREF, type_id, num_elem,
                                          arraydescr.basesize,
                                          arraydescr.itemsize,
                                          arraydescr.lendescr.offset)
Exemple #9
0
 def get_type_id(self, addr):
     tid = self.header(addr).tid
     ll_assert(tid & (GCFLAG_FORWARDED|GCFLAG_EXTERNAL) != GCFLAG_FORWARDED,
               "get_type_id on forwarded obj")
     # Non-prebuilt forwarded objects are overwritten with a FORWARDSTUB.
     # Although calling get_type_id() on a forwarded object works by itself,
     # we catch it as an error because it's likely that what is then
     # done with the typeid is bogus.
     return llop.extract_ushort(llgroup.HALFWORD, tid)
Exemple #10
0
 def malloc_array_nonstandard(basesize, itemsize, lengthofs, tid,
                              num_elem):
     """For the rare case of non-standard arrays, i.e. arrays where
     self.standard_array_{basesize,length_ofs} is wrong.  It can
     occur e.g. with arrays of floats on Win32."""
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(
         llmemory.GCREF,
         type_id, num_elem, basesize, itemsize, lengthofs)
Exemple #11
0
 def malloc_array(itemsize, tid, num_elem):
     """Allocate an array with a variable-size num_elem.
     Only works for standard arrays."""
     assert num_elem >= 0, 'num_elem should be >= 0'
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(
         llmemory.GCREF,
         type_id, num_elem, self.standard_array_basesize, itemsize,
         self.standard_array_length_ofs)
Exemple #12
0
 def _bh_malloc_array(self, num_elem, arraydescr):
     from rpython.memory.gctypelayout import check_typeid
     llop1 = self.llop1
     type_id = llop.extract_ushort(llgroup.HALFWORD, arraydescr.tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(llmemory.GCREF,
                                          type_id, num_elem,
                                          arraydescr.basesize,
                                          arraydescr.itemsize,
                                          arraydescr.lendescr.offset)
Exemple #13
0
 def get_type_id(self, addr):
     tid = self.header(addr).tid
     ll_assert(
         tid & (GCFLAG_FORWARDED | GCFLAG_EXTERNAL) != GCFLAG_FORWARDED,
         "get_type_id on forwarded obj")
     # Non-prebuilt forwarded objects are overwritten with a FORWARDSTUB.
     # Although calling get_type_id() on a forwarded object works by itself,
     # we catch it as an error because it's likely that what is then
     # done with the typeid is bogus.
     return llop.extract_ushort(llgroup.HALFWORD, tid)
Exemple #14
0
 def malloc_array_nonstandard(basesize, itemsize, lengthofs, tid,
                              num_elem):
     """For the rare case of non-standard arrays, i.e. arrays where
     self.standard_array_{basesize,length_ofs} is wrong.  It can
     occur e.g. with arrays of floats on Win32."""
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(llmemory.GCREF, type_id,
                                          num_elem, basesize, itemsize,
                                          lengthofs)
Exemple #15
0
 def malloc_array(itemsize, tid, num_elem):
     """Allocate an array with a variable-size num_elem.
     Only works for standard arrays."""
     assert num_elem >= 0, 'num_elem should be >= 0'
     type_id = llop.extract_ushort(llgroup.HALFWORD, tid)
     check_typeid(type_id)
     return llop1.do_malloc_varsize_clear(
         llmemory.GCREF, type_id, num_elem,
         self.standard_array_basesize, itemsize,
         self.standard_array_length_ofs)
Exemple #16
0
def build_test():
    test = TestLLGroup()
    test.build()
    grpptr = test.grpptr
    g1x = [test.g1a, test.g1b]
    MASK = CombinedSymbolic.MASK
    cs1 = CombinedSymbolic(test.g1b, 0x45 << HALFSHIFT)
    cs2 = CombinedSymbolic(test.g1b, 0x41 << HALFSHIFT)
    assert llop.extract_ushort(HALFWORD, cs1) is test.g1b
    assert cs1 & ~MASK == 0x45 << HALFSHIFT
    cslist = [cs1, cs2]

    #
    def f():
        p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1a)
        assert p == test.p1a
        p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1b)
        assert p == test.p1b
        p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2a)
        assert p == test.p2a
        p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2b)
        assert p == test.p2b
        #
        p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr, test.g1a,
                                       llmemory.sizeof(test.S1))
        assert p == test.p2a
        p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr, test.g2a,
                                       llmemory.sizeof(test.S2))
        assert p == test.p2b
        p = llop.get_next_group_member(lltype.Ptr(test.S1), grpptr, test.g2b,
                                       llmemory.sizeof(test.S2))
        assert p == test.p1b
        #
        expected = [123, 456]
        for i in range(2):
            p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, g1x[i])
            assert p.x == expected[i]
        #
        for i in range(2):
            s = llop.extract_ushort(HALFWORD, cslist[i])
            p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, s)
            assert p == test.p1b
        assert cslist[0] & ~MASK == 0x45 << HALFSHIFT
        assert cslist[1] & ~MASK == 0x41 << HALFSHIFT
        assert cslist[0] >> HALFSHIFT == 0x45
        assert cslist[1] >> (HALFSHIFT + 1) == 0x41 >> 1
        #
        return 42

    return f
Exemple #17
0
def build_test():
    test = TestLLGroup()
    test.build()
    grpptr = test.grpptr
    g1x = [test.g1a, test.g1b]
    MASK = CombinedSymbolic.MASK
    cs1 = CombinedSymbolic(test.g1b, 0x45 << HALFSHIFT)
    cs2 = CombinedSymbolic(test.g1b, 0x41 << HALFSHIFT)
    assert llop.extract_ushort(HALFWORD, cs1) is test.g1b
    assert cs1 & ~MASK == 0x45 << HALFSHIFT
    cslist = [cs1, cs2]
    #
    def f():
        p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1a)
        assert p == test.p1a
        p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, test.g1b)
        assert p == test.p1b
        p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2a)
        assert p == test.p2a
        p = llop.get_group_member(lltype.Ptr(test.S2), grpptr, test.g2b)
        assert p == test.p2b
        #
        p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr,
                                       test.g1a, llmemory.sizeof(test.S1))
        assert p == test.p2a
        p = llop.get_next_group_member(lltype.Ptr(test.S2), grpptr,
                                       test.g2a, llmemory.sizeof(test.S2))
        assert p == test.p2b
        p = llop.get_next_group_member(lltype.Ptr(test.S1), grpptr,
                                       test.g2b, llmemory.sizeof(test.S2))
        assert p == test.p1b
        #
        expected = [123, 456]
        for i in range(2):
            p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, g1x[i])
            assert p.x == expected[i]
        #
        for i in range(2):
            s = llop.extract_ushort(HALFWORD, cslist[i])
            p = llop.get_group_member(lltype.Ptr(test.S1), grpptr, s)
            assert p == test.p1b
        assert cslist[0] & ~MASK == 0x45 << HALFSHIFT
        assert cslist[1] & ~MASK == 0x41 << HALFSHIFT
        assert cslist[0] >> HALFSHIFT == 0x45
        assert cslist[1] >> (HALFSHIFT+1) == 0x41 >> 1
        #
        return 42
    return f
Exemple #18
0
 def malloc_str(length):
     type_id = llop.extract_ushort(llgroup.HALFWORD, str_type_id)
     return llop1.do_malloc_varsize_clear(
         llmemory.GCREF,
         type_id, length, str_basesize, str_itemsize,
         str_ofs_length)
Exemple #19
0
 def malloc_unicode(length):
     type_id = llop.extract_ushort(llgroup.HALFWORD, unicode_type_id)
     return llop1.do_malloc_varsize(
         llmemory.GCREF,
         type_id, length, unicode_basesize, unicode_itemsize,
         unicode_ofs_length)
Exemple #20
0
 def malloc_unicode(length):
     type_id = llop.extract_ushort(llgroup.HALFWORD, unicode_type_id)
     return llop1.do_malloc_varsize(llmemory.GCREF, type_id, length,
                                    unicode_basesize, unicode_itemsize,
                                    unicode_ofs_length)
Exemple #21
0
 def get_actual_typeid(self, gcptr):
     # Read the whole GC header word.  Return the typeid from the
     # lower half-word.
     hdr = rffi.cast(self.HDRPTR, gcptr)
     type_id = llop.extract_ushort(llgroup.HALFWORD, hdr.tid)
     return llop.combine_ushort(lltype.Signed, type_id, 0)
Exemple #22
0
 def get_actual_typeid(self, gcptr):
     # Read the whole GC header word.  Return the typeid from the
     # lower half-word.
     hdr = rffi.cast(self.HDRPTR, gcptr)
     type_id = llop.extract_ushort(llgroup.HALFWORD, hdr.tid)
     return llop.combine_ushort(lltype.Signed, type_id, 0)