[pypy-commit] pypy py3k: merge default

pjenvey noreply at buildbot.pypy.org
Wed Mar 20 01:52:33 CET 2013


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r62528:8688a5451f54
Date: 2013-03-19 17:52 -0700
http://bitbucket.org/pypy/pypy/changeset/8688a5451f54/

Log:	merge default

diff too long, truncating to 2000 out of 89406 lines

diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -11,6 +11,8 @@
 .. branch: callback-jit
 Callbacks from C are now better JITted
 
+.. branch: fix-jit-logs
+
 .. branch: remove-globals-in-jit
 
 .. branch: length-hint
diff --git a/pypy/module/micronumpy/interp_ufuncs.py b/pypy/module/micronumpy/interp_ufuncs.py
--- a/pypy/module/micronumpy/interp_ufuncs.py
+++ b/pypy/module/micronumpy/interp_ufuncs.py
@@ -17,9 +17,9 @@
     return not dtype.itemtype.bool(val)
 
 class W_Ufunc(Wrappable):
-    _attrs_ = ["name", "promote_to_float", "promote_bools", "identity", 
+    _attrs_ = ["name", "promote_to_float", "promote_bools", "identity",
                "allow_complex", "complex_to_float"]
-    _immutable_fields_ = ["promote_to_float", "promote_bools", "name", 
+    _immutable_fields_ = ["promote_to_float", "promote_bools", "name",
             "allow_complex", "complex_to_float"]
 
     def __init__(self, name, promote_to_float, promote_bools, identity,
@@ -151,13 +151,13 @@
         assert isinstance(self, W_Ufunc2)
         obj = convert_to_array(space, w_obj)
         if obj.get_dtype().is_flexible_type():
-            raise OperationError(space.w_TypeError, 
+            raise OperationError(space.w_TypeError,
                       space.wrap('cannot perform reduce for flexible type'))
         obj_shape = obj.get_shape()
         if obj.is_scalar():
             return obj.get_scalar_value()
         shapelen = len(obj_shape)
-        axis = unwrap_axis_arg(space, shapelen, w_axis)    
+        axis = unwrap_axis_arg(space, shapelen, w_axis)
         assert axis >= 0
         size = obj.get_size()
         dtype = interp_dtype.decode_w_dtype(space, dtype)
@@ -256,7 +256,7 @@
                 out = None
         w_obj = convert_to_array(space, w_obj)
         if w_obj.get_dtype().is_flexible_type():
-            raise OperationError(space.w_TypeError, 
+            raise OperationError(space.w_TypeError,
                       space.wrap('Not implemented for this type'))
         if self.int_only and not w_obj.get_dtype().is_int_type():
             raise OperationError(space.w_TypeError, space.wrap(
@@ -281,7 +281,7 @@
             if self.complex_to_float and calc_dtype.is_complex_type():
                 if calc_dtype.name == 'complex64':
                     res_dtype = interp_dtype.get_dtype_cache(space).w_float32dtype
-                else:    
+                else:
                     res_dtype = interp_dtype.get_dtype_cache(space).w_float64dtype
         if w_obj.is_scalar():
             w_val = self.func(calc_dtype,
@@ -304,7 +304,7 @@
     argcount = 2
 
     def __init__(self, func, name, promote_to_float=False, promote_bools=False,
-        identity=None, comparison_func=False, int_only=False, 
+        identity=None, comparison_func=False, int_only=False,
         allow_complex=True, complex_to_float=False):
 
         W_Ufunc.__init__(self, name, promote_to_float, promote_bools, identity,
@@ -507,11 +507,11 @@
         return current_guess
     elif space.isinstance_w(w_obj, space.w_str):
         if (current_guess is None):
-            return interp_dtype.variable_dtype(space, 
+            return interp_dtype.variable_dtype(space,
                                                'S%d' % space.len_w(w_obj))
         elif current_guess.num ==18:
             if  current_guess.itemtype.get_size() < space.len_w(w_obj):
-                return interp_dtype.variable_dtype(space, 
+                return interp_dtype.variable_dtype(space,
                                                    'S%d' % space.len_w(w_obj))
         return current_guess
     if current_guess is complex_type:
@@ -588,7 +588,7 @@
             ("negative", "neg", 1),
             ("absolute", "abs", 1, {"complex_to_float": True}),
             ("sign", "sign", 1, {"promote_bools": True}),
-            ("signbit", "signbit", 1, {"bool_result": True, 
+            ("signbit", "signbit", 1, {"bool_result": True,
                                        "allow_complex": False}),
             ("reciprocal", "reciprocal", 1),
             ("conjugate", "conj", 1),
@@ -599,7 +599,7 @@
                                  "allow_complex": False}),
             ("fmax", "fmax", 2, {"promote_to_float": True}),
             ("fmin", "fmin", 2, {"promote_to_float": True}),
-            ("fmod", "fmod", 2, {"promote_to_float": True, 
+            ("fmod", "fmod", 2, {"promote_to_float": True,
                                  'allow_complex': False}),
             ("floor", "floor", 1, {"promote_to_float": True,
                                    "allow_complex": False}),
diff --git a/pypy/module/pypyjit/test_pypy_c/test_00_model.py b/pypy/module/pypyjit/test_pypy_c/test_00_model.py
--- a/pypy/module/pypyjit/test_pypy_c/test_00_model.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_00_model.py
@@ -496,7 +496,7 @@
             i10 = getfield_raw(..., descr=<.* pypysig_long_struct.c_value .*>)
             i14 = int_lt(i10, 0)
             guard_false(i14, descr=...)
-            jump(p0, p1, p2, p3, i8, descr=...)
+            jump(..., descr=...)
         """)
         #
         assert loop.match("""
@@ -504,7 +504,7 @@
             guard_true(i6, descr=...)
             i8 = int_add(i4, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i8, descr=...)
+            jump(..., descr=...)
         """)
         #
         py.test.raises(InvalidMatch, loop.match, """
@@ -512,7 +512,7 @@
             guard_true(i6)
             i8 = int_add(i5, 1) # variable mismatch
             --TICK--
-            jump(p0, p1, p2, p3, i8, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_match_by_id(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_array.py b/pypy/module/pypyjit/test_pypy_c/test_array.py
--- a/pypy/module/pypyjit/test_pypy_c/test_array.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_array.py
@@ -22,7 +22,7 @@
             guard_true(i7, descr=...)
             i9 = int_add(i5, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i9, i6, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_array_sum(self):
@@ -47,7 +47,7 @@
             guard_no_overflow(descr=...)
             i18 = int_add(i7, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, i18, i16, p8, i9, i10, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_array_intimg(self):
@@ -85,7 +85,7 @@
             setarrayitem_raw(i11, i8, _, descr=<ArrayS .>)
             i28 = int_add(i8, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, p6, i28, i15, p9, i10, i11, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_array_of_doubles(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_call.py b/pypy/module/pypyjit/test_pypy_c/test_call.py
--- a/pypy/module/pypyjit/test_pypy_c/test_call.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_call.py
@@ -101,7 +101,7 @@
             i15 = int_add_ovf(i12, 1)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i15, i6, p7, p8, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_method_call(self):
@@ -144,7 +144,7 @@
             i19 = int_add_ovf(i10, i17)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, i19, p7, i17, i9, i10, p11, p12, p13, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_static_classmethod_call(self):
@@ -369,12 +369,12 @@
         assert loop.match_by_id('call', opcode='CALL_FUNCTION', expected_src="""
             # make sure that the "block" is not allocated
             ...
-            i20 = force_token()
+            p20 = force_token()
             p22 = new_with_vtable(...)
             p24 = new_array(1, descr=<ArrayP .>)
             p26 = new_with_vtable(ConstClass(W_ListObject))
             {{{
-            setfield_gc(p0, i20, descr=<FieldS .*PyFrame.vable_token .*>)
+            setfield_gc(p0, p20, descr=<FieldP .*PyFrame.vable_token .*>)
             setfield_gc(p22, 1, descr=<FieldU pypy.interpreter.argument.Arguments.inst__jit_few_keywords .*>)
             setfield_gc(p26, ConstPtr(ptr22), descr=<FieldP pypy.objspace.std.listobject.W_ListObject.inst_strategy .*>)
             setarrayitem_gc(p24, 0, p26, descr=<ArrayP .>)
@@ -467,7 +467,7 @@
             p22 = new_with_vtable(ConstClass(W_IntObject))
             setfield_gc(p22, i13, descr=<FieldS pypy.objspace.std.intobject.W_IntObject.inst_intval .*>)
             setfield_gc(p4, p22, descr=<FieldP pypy.interpreter.nestedscope.Cell.inst_w_value .*>)
-            jump(p0, p1, p2, p3, p4, p7, p22, p7, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_kwargs_virtual(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_containers.py b/pypy/module/pypyjit/test_pypy_c/test_containers.py
--- a/pypy/module/pypyjit/test_pypy_c/test_containers.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_containers.py
@@ -115,7 +115,7 @@
             i35 = int_add_ovf(i5, i34)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i35, p13, i7, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_floatlist_unpack_without_calls(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_instance.py b/pypy/module/pypyjit/test_pypy_c/test_instance.py
--- a/pypy/module/pypyjit/test_pypy_c/test_instance.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_instance.py
@@ -27,7 +27,7 @@
             i9 = int_add_ovf(i5, 2)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i9, i6, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_load_attr(self):
@@ -52,7 +52,7 @@
             i10 = int_add_ovf(i5, i7)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i10, i6, i7, p8, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_getattr_with_dynamic_attribute(self):
@@ -127,7 +127,7 @@
             p20 = new_with_vtable(ConstClass(W_IntObject))
             setfield_gc(p20, i11, descr=<FieldS.*W_IntObject.inst_intval .*>)
             setfield_gc(ConstPtr(ptr21), p20, descr=<FieldP .*TypeCell.inst_w_value .*>)
-            jump(p0, p1, p2, p3, p4, p20, p6, i7, p20, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_oldstyle_newstyle_mix(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_intbound.py b/pypy/module/pypyjit/test_pypy_c/test_intbound.py
--- a/pypy/module/pypyjit/test_pypy_c/test_intbound.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_intbound.py
@@ -97,7 +97,7 @@
             guard_no_overflow(descr=...)
             i17 = int_add(i8, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i14, i12, i17, p8, i9, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_intbound_sub_lt(self):
@@ -121,7 +121,7 @@
             guard_no_overflow(descr=...)
             i13 = int_add(i5, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i11, i13, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_intbound_addsub_ge(self):
@@ -150,7 +150,7 @@
             guard_no_overflow(descr=...)
             i19 = int_add(i8, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i16, i14, i19, p8, i9, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_intbound_addmul_ge(self):
@@ -178,7 +178,7 @@
             guard_no_overflow(descr=...)
             i21 = int_add(i8, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i18, i14, i21, p8, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_intbound_eq(self):
@@ -210,7 +210,7 @@
             guard_no_overflow(descr=...)
             i16 = int_add(i8, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p6, i14, i16, p8, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_intbound_mul(self):
@@ -236,7 +236,7 @@
             guard_no_overflow(descr=...)
             i14 = int_add(i6, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i12, i14, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_assert(self):
@@ -257,7 +257,7 @@
             guard_no_overflow(descr=...)
             i12 = int_add(i6, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, i10, i12, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_xor(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_min_max.py b/pypy/module/pypyjit/test_pypy_c/test_min_max.py
--- a/pypy/module/pypyjit/test_pypy_c/test_min_max.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_min_max.py
@@ -22,7 +22,7 @@
             guard_no_overflow(descr=...)
             i11 = int_add(i4, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i11, i9, descr=...)
+            jump(..., descr=...)
         """)
         
 
diff --git a/pypy/module/pypyjit/test_pypy_c/test_misc.py b/pypy/module/pypyjit/test_pypy_c/test_misc.py
--- a/pypy/module/pypyjit/test_pypy_c/test_misc.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_misc.py
@@ -31,7 +31,7 @@
             i13 = int_add_ovf(i6, i12)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, i13, i11, i8, descr=...)
+            jump(..., descr=...)
         """
         assert loop0.match(expected)
         # XXX: The retracing fails to form a loop since j
@@ -56,7 +56,7 @@
             guard_no_overflow(descr=...)
             i10 = int_sub(i4, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i10, i8, descr=...)
+            jump(..., descr=...)
         """)
         #
         log = self.run(fact, [25], threshold=20)
@@ -71,7 +71,7 @@
             guard_no_exception(descr=...)
             i13 = int_sub(i4, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i13, p11, descr=...)
+            jump(..., descr=...)
         """)
 
 
@@ -91,7 +91,7 @@
             guard_true(i9, descr=...)
             f10 = float_add(f8, f5)
             --TICK--
-            jump(p0, p1, p2, p3, p4, f10, p6, f7, f8, descr=...)
+            jump(..., descr=...)
         """)
 
 
@@ -252,7 +252,7 @@
             i28 = int_add_ovf(i10, i25)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, p6, i28, i25, p9, p10, p11, p12, i19, descr=...)
+            jump(..., descr=...)
         """)
 
 
diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py b/pypy/module/pypyjit/test_pypy_c/test_string.py
--- a/pypy/module/pypyjit/test_pypy_c/test_string.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_string.py
@@ -49,7 +49,7 @@
             guard_true(i32, descr=...)
             i34 = int_add(i6, 1)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, i34, p7, p8, i9, i10, p11, i12, p13, descr=...)
+            jump(..., descr=...)
         """ % (-sys.maxint-1, SHIFT))
 
     def test_long(self):
@@ -115,7 +115,7 @@
             i58 = int_add_ovf(i6, i57)
             guard_no_overflow(descr=...)
             --TICK--
-            jump(p0, p1, p2, p3, p4, p5, i58, i7, descr=...)
+            jump(..., descr=...)
         """ % (-sys.maxint-1, SHIFT))
 
     def test_str_mod(self):
@@ -164,7 +164,7 @@
             guard_no_overflow(descr=...)
             i40 = int_sub(i4, 1)
             --TICK--
-            jump(p0, p1, p2, p3, i40, i38, descr=...)
+            jump(..., descr=...)
         """)
 
     def test_getattr_promote(self):
diff --git a/pypy/module/pypyjit/test_pypy_c/test_thread.py b/pypy/module/pypyjit/test_pypy_c/test_thread.py
--- a/pypy/module/pypyjit/test_pypy_c/test_thread.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_thread.py
@@ -46,5 +46,5 @@
             guard_no_overflow(descr=...)
             --TICK--
             i58 = arraylen_gc(p43, descr=...)
-            jump(p0, p1, p3, p5, p10, p12, p14, i54, i27, i47, p45, p43, descr=...)
+            jump(..., descr=...)
         """)
diff --git a/pypy/module/termios/test/test_termios.py b/pypy/module/termios/test/test_termios.py
--- a/pypy/module/termios/test/test_termios.py
+++ b/pypy/module/termios/test/test_termios.py
@@ -42,7 +42,8 @@
         child.expect('attr= (\[.*?\[.*?\]\])')
         lst = eval(child.match.group(1))
         assert len(lst) == 7
-        assert len(lst[-1]) == 32 # XXX is this portable???
+         # Length of the last element is 32 on Linux, 20 on MacOSX.
+        assert len(lst[-1]) in (20, 32)
 
     def test_tcall(self):
         """ Again - a test that doesnt really test anything
@@ -63,10 +64,16 @@
         child.expect('ok!')
 
     def test_tcsetattr(self):
+        # The last element of the third parameter for termios.tcsetattr()
+        # can't be a constant, because it varies from one OS to another.
+        # (Its length must be 32 on Linux, 20 on MacOSX, for example.)
+        # Use termios.tcgetattr() to get a value that will hopefully be
+        # valid for whatever OS we are running on right now.
         source = py.code.Source("""
         import sys
         import termios
-        termios.tcsetattr(sys.stdin, 1, [16640, 4, 191, 2608, 15, 15, [b'\x03', b'\x1c', b'\x7f', b'\x15', b'\x04', 0, 1, b'\x00', b'\x11', b'\x13', b'\x1a', b'\x00', b'\x12', b'\x0f', b'\x17', b'\x16', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00']])
+        cc = termios.tcgetattr(sys.stdin)[-1]
+        termios.tcsetattr(sys.stdin, 1, [16640, 4, 191, 2608, 15, 15, cc])
         print('ok!')
         """)
         f = udir.join("test_tcsetattr.py")
diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py
--- a/pypy/tool/jitlogparser/parser.py
+++ b/pypy/tool/jitlogparser/parser.py
@@ -364,16 +364,17 @@
 
 def import_log(logname, ParserCls=SimpleParser):
     log = parse_log_file(logname)
+    hex_re = '0x([\da-f]+)'
     addrs = {}
     for entry in extract_category(log, 'jit-backend-addr'):
-        m = re.search('bootstrap ([-\da-f]+)', entry)
+        m = re.search('bootstrap ' + hex_re, entry)
         if not m:
             # a bridge
-            m = re.search('has address ([-\da-f]+)', entry)
+            m = re.search('has address ' + hex_re, entry)
             addr = int(m.group(1), 16)
             entry = entry.lower()
-            m = re.search('guard [\da-f]+', entry)
-            name = m.group(0)
+            m = re.search('guard ' + hex_re, entry)
+            name = 'guard ' + m.group(1)
         else:
             name = entry[:entry.find('(') - 1].lower()
             addr = int(m.group(1), 16)
@@ -395,8 +396,8 @@
         comm = loop.comment
         comm = comm.lower()
         if comm.startswith('# bridge'):
-            m = re.search('guard (\d+)', comm)
-            name = 'guard ' + hex(int(m.group(1)))[2:]
+            m = re.search('guard ([\da-f]+)', comm)
+            name = 'guard ' + m.group(1)
         elif "(" in comm:
             name = comm[2:comm.find('(')-1]
         else:
@@ -414,7 +415,8 @@
 def split_trace(trace):
     labels = [0]
     if trace.comment and 'Guard' in trace.comment:
-        descrs = ['bridge ' + re.search('Guard ([\da-f]+)', trace.comment).group(1)]
+        descrs = ['bridge %d' % int(
+            re.search('Guard 0x([\da-f]+)', trace.comment).group(1), 16)]
     else:
         descrs = ['entry ' + re.search('Loop (\d+)', trace.comment).group(1)]
     for i, op in enumerate(trace.operations):
diff --git a/pypy/tool/jitlogparser/storage.py b/pypy/tool/jitlogparser/storage.py
--- a/pypy/tool/jitlogparser/storage.py
+++ b/pypy/tool/jitlogparser/storage.py
@@ -70,7 +70,7 @@
                 if 'entry bridge' in comment:
                     pass
                 elif comment.startswith('# bridge out of'):
-                    no = int(comment[len('# bridge out of Guard '):].split(' ', 1)[0], 16)
+                    no = int(comment[len('# bridge out of Guard 0x'):].split(' ', 1)[0], 16)
                     op, parent = guard_dict[no]
                     op.bridge = loop
                     op.percentage = ((getattr(loop, 'count', 1) * 100) /
diff --git a/pypy/tool/jitlogparser/test/logtest.log b/pypy/tool/jitlogparser/test/logtest.log
--- a/pypy/tool/jitlogparser/test/logtest.log
+++ b/pypy/tool/jitlogparser/test/logtest.log
@@ -5,7 +5,7 @@
 CODE_DUMP @7f3b0b2e63d5 +0  554889E5534154415541564157488DA500000000488B042590C5540148C7042590C554010000000048898570FFFFFF488B042598C5540148C7042598C554010000000048898568FFFFFF488B0425A0C5540148C70425A0C554010000000048898560FFFFFF488B0425A8C5540148C70425A8C554010000000048898558FFFFFF4C8B3C2550525B0149BB3050920D3B7F00004D8B334983C60149BB3050920D3B7F00004D89334981FF102700000F8D000000004983C7014C8B342580F76A024983EE014C89342580F76A024983FE000F8C00000000E9AEFFFFFF488B042588F76A024829E0483B042580EC3C01760D49BB05632E0B3B7F000041FFD3554889E5534154415541564157488DA550FFFFFF4889BD70FFFFFF4889B568FFFFFF48899560FFFFFF48898D58FFFFFF4D89C7E954FFFFFF49BB00602E0B3B7F000041FFD34440484C3D030300000049BB00602E0B3B7F000041FFD34440484C3D070304000000
 [11f210b949b3] jit-backend-dump}
 [11f210b949b4] {jit-backend-addr
-Loop 0 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f3b0b2e645d to 7f3b0b2e64af (bootstrap 7f3b0b2e63d5)
+Loop 0 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 0x7f3b0b2e645d to 0x7f3b0b2e64af (bootstrap 0x7f3b0b2e63d5)
 [11f210bab188] jit-backend-addr}
 [11f210bab189] jit-backend}
 [11f210bacbb7] {jit-log-opt-loop
diff --git a/pypy/tool/jitlogparser/test/logtest2.log b/pypy/tool/jitlogparser/test/logtest2.log
--- a/pypy/tool/jitlogparser/test/logtest2.log
+++ b/pypy/tool/jitlogparser/test/logtest2.log
@@ -1,301 +1,356 @@
-[1f5e7f69779] {jit-backend-dump
+[3304d0bb187] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b000 +0  4157415641554154415341524151415057565554535251504889E349C7C340BC920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3
-[1f5e7f7fe75] jit-backend-dump}
-[1f5e7f84fc4] {jit-backend-dump
+CODE_DUMP @7f476a7d5000 +0  48894D58488945604889556848895D70488975784889BD800000004C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000584889452058488945104889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C498000000C3
+[3304d0ca602] jit-backend-dump}
+[3304d0cfdf4] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b045 +0  4157415641554154415341524151415057565554535251504889E349C7C3F0BB920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3
-[1f5e7f87ac1] jit-backend-dump}
-[1f5e7f8a0b4] {jit-backend-dump
+CODE_DUMP @7f476a7d5085 +0  48894D58488945604889556848895D70488975784889BD800000004C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000488B1C25C802190348C70425C00219030000000048C70425C80219030000000048895D38584889452058488945104889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C498000000C3
+[3304d0d2b27] jit-backend-dump}
+[3304d0d73d6] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b08a +0  4157415641554154415341524151415057565554535251504889E34881EC80000000F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438F2440F11442440F2440F114C2448F2440F11542450F2440F115C2458F2440F11642460F2440F116C2468F2440F11742470F2440F117C247849C7C340BC920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3
-[1f5e7f8da6b] jit-backend-dump}
-[1f5e7f8f4f6] {jit-backend-dump
+CODE_DUMP @7f476a7d512e +0  4889455848894D60488955684889757048897D784C8985800000004C898D880000004C899590000000488B7C240841BBC069120141FFD3488B4558488B4D60488B5568488B7570488B7D784C8B85800000004C8B8D880000004C8B9590000000C20800
+[3304d0d9073] jit-backend-dump}
+[3304d0db1d8] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b13d +0  4157415641554154415341524151415057565554535251504889E34881EC80000000F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438F2440F11442440F2440F114C2448F2440F11542450F2440F115C2458F2440F11642460F2440F116C2468F2440F11742470F2440F117C247849C7C3F0BB920041FFD34889DF4883E4F049C7C350BC920041FFD3488D65D8415F415E415D415C5B5DC3
-[1f5e7f92b83] jit-backend-dump}
-[1f5e7f95b99] {jit-backend-dump
+CODE_DUMP @7f476a7d5191 +0  4889455848894D60488955684889757048897D784C8985800000004C898D880000004C899590000000488B7C240841BB006B120141FFD3488B442408F6400480488B4558488B4D60488B5568488B7570488B7D784C8B85800000004C8B8D880000004C8B9590000000C20800
+[3304d0dce9e] jit-backend-dump}
+[3304d0dfc06] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b210 +0  F20F11442410F20F114C2418F20F11542420F20F115C2428F20F11642430F20F116C2438F20F11742440F20F117C2448F2440F11442450F2440F114C2458F2440F11542460F2440F115C2468F2440F11642470F2440F116C2478F2440F11B42480000000F2440F11BC24880000004829C24889D749C7C350A8920041FFE3
-[1f5e7f988d0] jit-backend-dump}
-[1f5e7fa16fb] {jit-backend-dump
+CODE_DUMP @7f476a7d51fd +0  4883EC384889442408F20F114424184889EF48895C24284C89642430488B1C25C80219034C8B2425C002190348C70425C00219030000000048C70425C80219030000000041BBC069120141FFD3F20F10442418488B44240848891C25C80219034C892425C0021903488B5C24284C8B642430488D642438C3
+[3304d0e1a04] jit-backend-dump}
+[3304d0e4ae5] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b28e +0  F20F10442410F20F104C2418F20F10542420F20F105C2428F20F10642430F20F106C2438F20F10742440F20F107C2448F2440F10442450F2440F104C2458F2440F10542460F2440F105C2468F2440F10642470F2440F106C2478F2440F10B42480000000F2440F10BC2488000000488B1425704F3D01C3
-[1f5e7fa47ac] jit-backend-dump}
-[1f5e7fab3a4] {jit-backend-dump
+CODE_DUMP @7f476a7d5275 +0  48894D58488945604889556848895D70488975784889BD800000004C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000488B4C240848894D20488B7424104889EF4883EC0848C7452810000000488B0C25C802190348894D38488B1C25C002190348C70425C00219030000000048C70425C80219030000000041BB90E3E80041FFD34889C5488B4D3848C745380000000048890C25C802190348891C25C00219034883C40848C745280000000048C7452000000000488B4D58488B4560488B5568488B5D70488B7578488BBD800000004C8B85880000004C8B8D900000004C8B95980000004C8BA5A00000004C8BADA80000004C8BB5B00000004C8BBDB8000000F20F1085C0000000F20F108DC8000000F20F1095D0000000F20F109DD8000000F20F10A5E0000000F20F10ADE8000000F20F10B5F0000000F20F10BDF8000000F2440F108500010000F2440F108D08010000F2440F109510010000F2440F109D18010000F2440F10A520010000F2440F10AD28010000F2440F10B530010000C3
+[3304d0e9130] jit-backend-dump}
+[3304d0ea4a1] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b305 +0  57565251415041514883EC40F20F110424F20F114C2408F20F11542410F20F115C2418F20F11642420F20F116C2428F20F11742430F20F117C2438488D7D1049C7C340BA520041FFD3488B042550546B024885C0753CF20F107C2438F20F10742430F20F106C2428F20F10642420F20F105C2418F20F10542410F20F104C2408F20F1004244883C44041594158595A5E5FC3488B042558546B0248C7042550546B020000000048C7042558546B02000000004889042590C2540149C7C340BC920041FFD348C7C0020000004883C478C3
-[1f5e7faf1ca] jit-backend-dump}
-[1f5e7fb0813] {jit-backend-counts
-[1f5e7fb0f61] jit-backend-counts}
-[1f5fd38be3e] {jit-backend
-[1f5fe729336] {jit-backend-dump
+CODE_DUMP @7f476a7d5491 +0  48894D58488945604889556848895D70488975784889BD800000004C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000584889452058488945104889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C498000000C3
+[3304d0ecf16] jit-backend-dump}
+[3304d0ee1ff] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b3d5 +0  554889E5534154415541564157488DA500000000488B042590C2540148C7042590C254010000000048898570FFFFFF488B042598C2540148C7042598C254010000000048898568FFFFFF488B0425A0C2540148C70425A0C254010000000048898560FFFFFF488B0425A8C2540148C70425A8C254010000000048898558FFFFFF4C8B3C25D04D5B0149BB30B00C0A897F00004D8B334983C60149BB30B00C0A897F00004D89334981FF102700000F8D000000004D89FE4983E7024983FF000F85000000004983C6034C8B3C25A0536B024983EF014C893C25A0536B024983FF000F8C000000004D89F7E99AFFFFFF488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4889BD70FFFFFF4889B568FFFFFF48899560FFFFFF48898D58FFFFFF4D89C7E940FFFFFF49BB00B0A007897F000041FFD34440484C3D030300000049BB00B0A007897F000041FFD34440484C3D39030400000049BB00B0A007897F000041FFD34440484C3907070305000000
-[1f5fe73276a] jit-backend-dump}
-[1f5fe73438f] {jit-backend-addr
-Loop 0 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b45d to 7f8907a0b4c3 (bootstrap 7f8907a0b3d5)
-[1f5fe7369af] jit-backend-addr}
-[1f5fe737940] {jit-backend-dump
+CODE_DUMP @7f476a7d5595 +0  48894D58488945604889556848895D70488975784889BD800000004C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000488B1C25C802190348C70425C00219030000000048C70425C80219030000000048895D38584889452058488945104889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C498000000C3
+[3304d0fca06] jit-backend-dump}
+[3304d0fe4ac] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b3e5 +0  50FFFFFF
-[1f5fe74b40e] jit-backend-dump}
-[1f5fe74c63d] {jit-backend-dump
+CODE_DUMP @7f476a7d56bd +0  4889455848894D60488955684889757048897D784C8985800000004C898D880000004C899590000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000488B7C240841BBC069120141FFD3488B4558488B4D60488B5568488B7570488B7D784C8B85800000004C8B8D880000004C8B9590000000F20F1085C0000000F20F108DC8000000F20F1095D0000000F20F109DD8000000F20F10A5E0000000F20F10ADE8000000F20F10B5F0000000F20F10BDF8000000F2440F108500010000F2440F108D08010000F2440F109510010000F2440F109D18010000F2440F10A520010000F2440F10AD28010000F2440F10B530010000C20800
+[3304d1018ac] jit-backend-dump}
+[3304d103089] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b484 +0  95000000
-[1f5fe74da6a] jit-backend-dump}
-[1f5fe74e438] {jit-backend-dump
+CODE_DUMP @7f476a7d581e +0  4889455848894D60488955684889757048897D784C8985800000004C898D880000004C899590000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000488B7C240841BB006B120141FFD3488B442408F6400480488B4558488B4D60488B5568488B7570488B7D784C8B85800000004C8B8D880000004C8B9590000000F20F1085C0000000F20F108DC8000000F20F1095D0000000F20F109DD8000000F20F10A5E0000000F20F10ADE8000000F20F10B5F0000000F20F10BDF8000000F2440F108500010000F2440F108D08010000F2440F109510010000F2440F109D18010000F2440F10A520010000F2440F10AD28010000F2440F10B530010000C20800
+[3304d1062c0] jit-backend-dump}
+[3304d1072c1] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b495 +0  9B000000
-[1f5fe74f513] jit-backend-dump}
-[1f5fe74fd2e] {jit-backend-dump
+CODE_DUMP @7f476a7d5988 +0  488B0425C802190348C70425C00219030000000048C70425C8021903000000004889453848C745108064B5014889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C498000000C3
+[3304d1089ec] jit-backend-dump}
+[3304d11572c] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b4b7 +0  91000000
-[1f5fe750d8c] jit-backend-dump}
-[1f5fe75373f] jit-backend}
-[1f5fe755abc] {jit-log-opt-loop
-# Loop 0 : loop with 26 ops
-[p0, p1, p2, p3, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
-+166: i6 = int_lt(i4, 10000)
-guard_true(i6, descr=<Guard3>) [p1, p0, p2, p3, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND')
-+179: i8 = int_and(i4, 2)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE')
-+186: i9 = int_is_true(i8)
-guard_false(i9, descr=<Guard4>) [p1, p0, p2, p3, i8, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD')
-+196: i11 = int_add(i4, 3)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE')
-+200: i13 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+208: i15 = int_sub(i13, 1)
-+212: setfield_raw(40588192, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+220: i17 = int_lt(i15, 0)
-guard_false(i17, descr=<Guard5>) [p1, p0, p2, p3, i11, None, None]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-+230: jump(p0, p1, p2, p3, i11, descr=<Loop0>)
-+238: --end of the loop--
-[1f5fe92b8af] jit-log-opt-loop}
-[1f5fe944ae5] {jit-backend
-[1f5fee20651] {jit-backend-dump
+CODE_DUMP @7f476a7d59e3 +0  48894D584889556848895D70488975784C8985880000004C898D900000004C8995980000004C89A5A00000004C89ADA80000004C89B5B00000004C89BDB8000000F20F1185C0000000F20F118DC8000000F20F1195D0000000F20F119DD8000000F20F11A5E0000000F20F11ADE8000000F20F11B5F0000000F20F11BDF8000000F2440F118500010000F2440F118D08010000F2440F119510010000F2440F119D18010000F2440F11A520010000F2440F11AD28010000F2440F11B530010000488B4C240848894D204829C74883EC0848C745281000000041BBF0ACE80041FFD34883C4084885C00F84F4000000F645040174154883EC0849BBFD517D6A477F000041FFD34883C40848C7452800000000488B4D58488B5568488B5D70488B75784C8B85880000004C8B8D900000004C8B95980000004C8BA5A00000004C8BADA80000004C8BB5B00000004C8BBDB8000000F20F1085C0000000F20F108DC8000000F20F1095D0000000F20F109DD8000000F20F10A5E0000000F20F10ADE8000000F20F10B5F0000000F20F10BDF8000000F2440F108500010000F2440F108D08010000F2440F109510010000F2440F109D18010000F2440F10A520010000F2440F10AD28010000F2440F10B530010000488B3C25C8EEB50148C7452000000000C34883C40849BB88597D6A477F000041FFE3
+[3304d120245] jit-backend-dump}
+[3304d122916] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b565 +0  554889E5534154415541564157488DA5000000004C8B3C2590C2540148C7042590C25401000000004C8B342598C2540148C7042598C25401000000004C8B2C25A0C2540148C70425A0C25401000000004C8B2425A8C2540148C70425A8C25401000000004C8B1425D04D5B014C8B0C25B8C2540148C70425B8C25401000000004C8B0425E04D5B01488B3C25E84D5B01488B3425D0C2540148C70425D0C2540100000000488B1C25D8C2540148C70425D8C2540100000000488B1425E0C2540148C70425E0C254010000000049BB38B00C0A897F0000498B0B4883C10149BB38B00C0A897F000049890B4983F8010F85000000004883FE017206813E980700000F85000000004983FA000F850000000049BBA8F0B407897F00004D39DC0F8500000000488B56084881FA102700000F8D000000004989D44883E2024883FA000F85000000004983C403488B1425A0536B024883EA0148891425A0536B024883FA000F8C000000004C89BD70FFFFFF4C89B568FFFFFF4C89AD60FFFFFF4C898D58FFFFFF4D89E749BB5DB4A007897F000041FFE3488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4989FF4989F64989D54989CC4D89C24C8B5D104D89D84C8B5D184C89DF4C8B5D204C89DE4C8B5D284C89DB4C8B5D304C89DAE9CCFEFFFF49BB00B0A007897F000041FFD321383C343029241D180C08030600000049BB00B0A007897F000041FFD3383C18343029240C08030700000049BB00B0A007897F000041FFD329383C3430241808030800000049BB00B0A007897F000041FFD3383C3034241808030900000049BB00B0A007897F000041FFD3383C183424030A00000049BB00B0A007897F000041FFD3383C34241809030B00000049BB00B0A007897F000041FFD3383C34243107030C000000
-[1f5fee2e673] jit-backend-dump}
-[1f5fee2f38d] {jit-backend-addr
-Loop 1 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b631 to 7f8907a0b6f8 (bootstrap 7f8907a0b565)
-[1f5fee312e3] jit-backend-addr}
-[1f5fee320ed] {jit-backend-dump
+CODE_DUMP @7f476a7d5bd6 +0  4889E74883EC0841BB9018210141FFD34883C408488B0425C00219034885C07501C34883C40849BB88597D6A477F000041FFE3
+[3304d1240c0] jit-backend-dump}
+[3304d1246a0] {jit-backend-counts
+[3304d124ab0] jit-backend-counts}
+[3304d690a50] {jit-backend
+[3304db64ec0] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b575 +0  50FFFFFF
-[1f5fee3e903] jit-backend-dump}
-[1f5fee3fbff] {jit-backend-dump
+CODE_DUMP @7f476a7d5ce0 +0  4881EC9800000048896C24604889FD48895C24684C896424704C896C24784C89B424800000004C89BC2488000000488B0425709619034829E0483B042550B90403760D49BBD65B7D6A477F000041FFD349BBF0905D6D477F00004D8B3B4D8D770149BBF0905D6D477F00004D89334C8BB5380100004D8BBE800000004D8B6E504D8B66704D0FB6968E0000004D8B4E604D8B4678498B7E58498B7668488B5E10488B5618488B4620488B4E284C89BD480100004C89AD500100004C898D580100004889BD60010000488995680100004889857001000048898D7801000049BB08915D6D477F0000498B0B488D410149BB08915D6D477F00004989034983F8020F85000000004883FB017206813B680B00000F85000000004983FA000F850000000049BB20C0FC6A477F00004D39DC0F85000000004C8B63084983FC0A0F8D00000000498D5C24014C8B2425409519034983FC000F8C0000000049BB20915D6D477F00004D8B234D8D54240149BB20915D6D477F00004D89134883FB0A0F8D000000004C8D5301488B1C25409519034883FB000F8C000000004C89D3E9B9FFFFFF49BB2020FD6A477F0000415349BB405C7D6A477F0000415349BB00507D6A477F000041FFE349BB3806036B477F0000415349BB505C7D6A477F0000415349BB00507D6A477F000041FFE349BBC005036B477F0000415349BB605C7D6A477F0000415349BB00507D6A477F000041FFE349BB4805036B477F0000415349BB705C7D6A477F0000415349BB00507D6A477F000041FFE349BBD004036B477F0000415349BB805C7D6A477F0000415349BB00507D6A477F000041FFE349BB5804036B477F0000415349BB905C7D6A477F0000415349BB00507D6A477F000041FFE349BBE003036B477F0000415349BBA05C7D6A477F0000415349BB00507D6A477F000041FFE349BB6803036B477F0000415349BBB05C7D6A477F0000415349BB00507D6A477F000041FFE349BBF002036B477F0000415349BBC05C7D6A477F0000415349BB00507D6A477F000041FFE349BB7802036B477F0000415349BBD05C7D6A477F0000415349BB00507D6A477F000041FFE3
+[3304db7d5e4] jit-backend-dump}
+[3304db7df74] {jit-backend-addr
+Loop 0 (<code object g, file 'x.py', line 8> #9 LOAD_FAST) has address 0x7f476a7d5d30 to 0x7f476a7d5e80 (bootstrap 0x7f476a7d5ce0)
+[3304db7f906] jit-backend-addr}
+[3304db8036d] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b655 +0  0C010000
-[1f5fee41579] jit-backend-dump}
-[1f5fee421af] {jit-backend-dump
+CODE_DUMP @7f476a7d5de1 +0  9B000000
+[3304db81160] jit-backend-dump}
+[3304db81772] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b667 +0  17010000
-[1f5fee43835] jit-backend-dump}
-[1f5fee44261] {jit-backend-dump
+CODE_DUMP @7f476a7d5df3 +0  AE000000
+[3304db8217a] jit-backend-dump}
+[3304db825e3] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b671 +0  28010000
-[1f5fee457c1] jit-backend-dump}
-[1f5fee461a5] {jit-backend-dump
+CODE_DUMP @7f476a7d5dfd +0  C9000000
+[3304db82ee8] jit-backend-dump}
+[3304db83330] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b684 +0  2F010000
-[1f5fee475d3] jit-backend-dump}
-[1f5fee47f57] {jit-backend-dump
+CODE_DUMP @7f476a7d5e10 +0  DB000000
+[3304db83c9d] jit-backend-dump}
+[3304db840c2] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b695 +0  37010000
-[1f5fee4933d] jit-backend-dump}
-[1f5fee49cd9] {jit-backend-dump
+CODE_DUMP @7f476a7d5e1e +0  F2000000
+[3304db849f0] jit-backend-dump}
+[3304db84f62] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b6a6 +0  3D010000
-[1f5fee4b0ad] jit-backend-dump}
-[1f5fee4ba4f] {jit-backend-dump
+CODE_DUMP @7f476a7d5e35 +0  25010000
+[3304db8586f] jit-backend-dump}
+[3304db85c9d] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b6c8 +0  33010000
-[1f5fee4cf61] jit-backend-dump}
-[1f5fee4dc45] jit-backend}
-[1f5fee4f3a9] {jit-log-opt-loop
-# Loop 1 : entry bridge with 31 ops
-[p0, p1, p2, p3, i4, p5, i6, i7, p8, p9, p10]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-+234: guard_value(i6, 1, descr=<Guard6>) [i6, p1, p0, p2, p3, i4, p5, i7, p8, p9, p10]
-+244: guard_nonnull_class(p8, ConstClass(W_IntObject), descr=<Guard7>) [p1, p0, p8, p2, p3, i4, p5, p9, p10]
-+262: guard_value(i4, 0, descr=<Guard8>) [i4, p1, p0, p2, p3, p5, p8, p10]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST')
-+272: guard_value(p3, ConstPtr(ptr14), descr=<Guard9>) [p1, p0, p3, p2, p5, p8, p10]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
-+291: i15 = getfield_gc_pure(p8, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
-+295: i17 = int_lt(i15, 10000)
-guard_true(i17, descr=<Guard10>) [p1, p0, p8, p2, p5]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND')
-+308: i19 = int_and(i15, 2)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE')
-+315: i20 = int_is_true(i19)
-guard_false(i20, descr=<Guard11>) [p1, p0, p2, p5, p8, i19]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD')
-+325: i22 = int_add(i15, 3)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE')
-+329: i24 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+337: i26 = int_sub(i24, 1)
-+341: setfield_raw(40588192, i26, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+349: i28 = int_lt(i26, 0)
-guard_false(i28, descr=<Guard12>) [p1, p0, p2, p5, i22, None]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-+359: jump(p0, p1, p2, p5, i22, descr=<Loop0>)
-+403: --end of the loop--
-[1f60036d952] jit-log-opt-loop}
-[1f600719a74] {jit-backend
-[1f600759dac] {jit-backend-dump
+CODE_DUMP @7f476a7d5e5e +0  21010000
+[3304db86572] jit-backend-dump}
+[3304db869e7] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b817 +0  554889E5534154415541564157488DA500000000488B042590C2540148C7042590C254010000000048898570FFFFFF488B042598C2540148C7042598C254010000000048898568FFFFFF488B0425A0C2540148C70425A0C254010000000048898560FFFFFF488B0425A8C2540148C70425A8C254010000000048898558FFFFFF4C8B3C25D04D5B0149BB40B00C0A897F00004D8B334983C60149BB40B00C0A897F00004D89334981FF102700000F8D000000004D89FE4983E7024983FF000F85000000004983C6034C8B3C25A0536B024983EF024C893C25A0536B024983FF000F8C000000004D89F7E99AFFFFFF488B0425A8536B024829E0483B042580DC3C01760D49BB05B3A007897F000041FFD3554889E5534154415541564157488DA550FFFFFF4889BD70FFFFFF4889B568FFFFFF48899560FFFFFF48898D58FFFFFF4D89C7E940FFFFFF49BB00B0A007897F000041FFD34440484C3D030D00000049BB00B0A007897F000041FFD34440484C3D39030E00000049BB00B0A007897F000041FFD34440484C390707030F000000
-[1f60076fd90] jit-backend-dump}
-[1f600770f30] {jit-backend-addr
-Loop 2 (<code object f, file 'x.py', line 2> #9 LOAD_FAST) has address 7f8907a0b89f to 7f8907a0b905 (bootstrap 7f8907a0b817)
-[1f6007730fc] jit-backend-addr}
-[1f600773fde] {jit-backend-dump
+CODE_DUMP @7f476a7d5e74 +0  55010000
+[3304db872e3] jit-backend-dump}
+[3304db88112] jit-backend}
+[3304db8ae6c] {jit-log-opt-loop
+# Loop 0 (<code object g, file 'x.py', line 8> #9 LOAD_FAST) : loop with 59 ops
+[p0, p1]
++110: p2 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_w_f_trace 128>)
++124: p3 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_last_exception 80>)
++128: p4 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_pycode 112>)
++132: i5 = getfield_gc(p0, descr=<FieldU pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 142>)
++140: p6 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_lastblock 96>)
++144: i7 = getfield_gc(p0, descr=<FieldS pypy.interpreter.pyframe.PyFrame.inst_valuestackdepth 120>)
++148: i8 = getfield_gc(p0, descr=<FieldS pypy.interpreter.pyframe.PyFrame.inst_last_instr 88>)
++152: p9 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_locals_stack_w 104>)
++156: p11 = getarrayitem_gc(p9, 0, descr=<ArrayP 8>)
++160: p13 = getarrayitem_gc(p9, 1, descr=<ArrayP 8>)
++164: p15 = getarrayitem_gc(p9, 2, descr=<ArrayP 8>)
++168: p17 = getarrayitem_gc(p9, 3, descr=<ArrayP 8>)
++172: p18 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_cells 40>)
++172: label(p0, p1, p2, p3, p4, i5, p6, i7, i8, p11, p13, p15, p17, descr=TargetToken(139944714371104))
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #9 LOAD_FAST')
++251: guard_value(i7, 2, descr=<Guard7f476afd2020>) [i7, p1, p0, p2, p3, p4, i5, p6, i8, p11, p13, p15, p17]
++261: guard_nonnull_class(p11, ConstClass(W_IntObject), descr=<Guard7f476b030638>) [p1, p0, p11, p2, p3, p4, i5, p6, p13, p15, p17]
++279: guard_value(i5, 0, descr=<Guard7f476b0305c0>) [i5, p1, p0, p2, p3, p4, p6, p11, p13, p17]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #12 LOAD_CONST')
++289: guard_value(p4, ConstPtr(ptr22), descr=<Guard7f476b030548>) [p1, p0, p4, p2, p3, p6, p11, p13, p17]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #15 COMPARE_OP')
++308: i23 = getfield_gc_pure(p11, descr=<FieldS pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
++312: i25 = int_lt(i23, 10)
+guard_true(i25, descr=<Guard7f476b0304d0>) [p1, p0, p11, p2, p3, p6, p13]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #18 POP_JUMP_IF_FALSE')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #21 LOAD_CONST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #24 STORE_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #27 LOAD_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #30 LOAD_CONST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #33 INPLACE_ADD')
++322: i27 = int_add(i23, 1)
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #34 STORE_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #37 JUMP_ABSOLUTE')
++327: guard_not_invalidated(descr=<Guard7f476b030458>) [p1, p0, p2, p3, p6, i27]
++327: i29 = getfield_raw(52008256, descr=<FieldS pypysig_long_struct.c_value 0>)
++335: i31 = int_lt(i29, 0)
+guard_false(i31, descr=<Guard7f476b0303e0>) [p1, p0, p2, p3, p6, i27]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #9 LOAD_FAST')
++345: label(p0, p1, p2, p3, p6, i27, descr=TargetToken(139944714371192))
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #9 LOAD_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #12 LOAD_CONST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #15 COMPARE_OP')
++376: i32 = int_lt(i27, 10)
+guard_true(i32, descr=<Guard7f476b030368>) [p1, p0, p2, p3, p6, i27]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #18 POP_JUMP_IF_FALSE')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #21 LOAD_CONST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #24 STORE_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #27 LOAD_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #30 LOAD_CONST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #33 INPLACE_ADD')
++386: i33 = int_add(i27, 1)
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #34 STORE_FAST')
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #37 JUMP_ABSOLUTE')
++390: guard_not_invalidated(descr=<Guard7f476b0302f0>) [p1, p0, p2, p3, p6, i33, None]
++390: i35 = getfield_raw(52008256, descr=<FieldS pypysig_long_struct.c_value 0>)
++398: i36 = int_lt(i35, 0)
+guard_false(i36, descr=<Guard7f476b030278>) [p1, p0, p2, p3, p6, i33, None]
+debug_merge_point(0, 0, '<code object g. file 'x.py'. line 8> #9 LOAD_FAST')
++408: jump(p0, p1, p2, p3, p6, i33, descr=TargetToken(139944714371192))
++416: --end of the loop--
+[3304dc0f6eb] jit-log-opt-loop}
+[3304ddc81da] {jit-backend
+[3304dec8bed] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b827 +0  50FFFFFF
-[1f600775c76] jit-backend-dump}
-[1f600776a38] {jit-backend-dump
+CODE_DUMP @7f476a7d6128 +0  4881EC9800000048896C24604889FD48895C24684C896424704C896C24784C89B424800000004C89BC2488000000488B0425709619034829E0483B042550B90403760D49BBD65B7D6A477F000041FFD349BBD8905D6D477F00004D8B3B4D8D770149BBD8905D6D477F00004D89334C8BB5380100004D8BBE800000004D8B6E504D8B66704D0FB6968E0000004D8B4E604D8B4678498B7E58498B7668488B5E10488B5618488B4620488B4E284C89BD480100004C89AD500100004C898D580100004889BD6001000048899D6801000048898D7001000049BB38915D6D477F0000498B0B488D590149BB38915D6D477F000049891B4983F8030F85000000008138704500000F85000000004C8B40104D85C00F8400000000488B5808498B48108139005305000F8500000000498B48084C8B4108488B79104C8B49184883FB000F8C000000004C39CB0F8D000000004889D9480FAFDF4D89C54901D8488D5901488958084983FA000F85000000004C8B521041813A909403000F85000000004C8B5208498B4A084C8D79014C8985600100004C89A56801000048898D700100004C898D78010000488985800100004C8995880100004889BD90010000488995980100004C89D74C89FE49BB88607D6A477F00004C895D2041BB0055730041FFD3F6450401740D49BBFD517D6A477F000041FFD348C745200000000048833C25C0021903000F8500000000488B9588010000488B7A104C8B9560010000488B85700100004C8954C710488B0425409519034883F8000F8C00000000488B856801000049BB588C026B477F00004C39D80F850000000049BB50915D6D477F00004D8B13498D420149BB50915D6D477F0000498903483B9D780100000F8D000000004889D8480FAF9D900100004D89EA4901DD488D5801488B4208488D780148899560010000488985680100004C8995700100004889FE4889D749BBE8607D6A477F00004C895D2041BB0055730041FFD3F6450401740D49BBFD517D6A477F000041FFD348C74520000000004C8B958001000049895A0848833C25C0021903000F8500000000488B8560010000488B5010488BBD680100004C896CFA10488B3C25409519034883FF000F8C000000004C89AD600100004C8995800100004C8BAD700100004889C2E90BFFFFFF49BBA0D6496D477F0000415349BB08607D6A477F0000415349BB00507D6A477F000041FFE349BB708A4D6D477F0000415349BB18607D6A477F0000415349BB00507D6A477F000041FFE349BBF8894D6D477F0000415349BB28607D6A477F0000415349BB00507D6A477F000041FFE349BB80894D6D477F0000415349BB38607D6A477F0000415349BB00507D6A477F000041FFE349BB08894D6D477F0000415349BB48607D6A477F0000415349BB00507D6A477F000041FFE349BB90884D6D477F0000415349BB58607D6A477F0000415349BB00507D6A477F000041FFE349BB18884D6D477F0000415349BB68607D6A477F0000415349BB00507D6A477F000041FFE349BBA0874D6D477F0000415349BB78607D6A477F0000415349BB00507D6A477F000041FFE349BB28874D6D477F0000415349BB98607D6A477F0000415349BB85507D6A477F000041FFE349BBB0864D6D477F0000415349BBA8607D6A477F0000415349BB00507D6A477F000041FFE349BB38864D6D477F0000415349BBB8607D6A477F0000415349BB00507D6A477F000041FFE349BBC0854D6D477F0000415349BBC8607D6A477F0000415349BB00507D6A477F000041FFE349BB48854D6D477F0000415349BBD8607D6A477F0000415349BB00507D6A477F000041FFE349BBD0844D6D477F0000415349BBF8607D6A477F0000415349BB85507D6A477F000041FFE349BB58844D6D477F0000415349BB08617D6A477F0000415349BB00507D6A477F000041FFE349BBE0834D6D477F0000415349BB18617D6A477F0000415349BB00507D6A477F000041FFE3
+[3304dedb0c9] jit-backend-dump}
+[3304dedb9eb] {jit-backend-addr
+Loop 1 (<code object h, file 'x.py', line 14> #13 FOR_ITER) has address 0x7f476a7d6178 to 0x7f476a7d6470 (bootstrap 0x7f476a7d6128)
+[3304dedcbfe] jit-backend-addr}
+[3304dedd31e] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b8c6 +0  95000000
-[1f600778112] jit-backend-dump}
-[1f600778b8c] {jit-backend-dump
+CODE_DUMP @7f476a7d6222 +0  4A020000
+[3304dede364] jit-backend-dump}
+[3304dede8d3] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b8d7 +0  9B000000
-[1f60077a04a] jit-backend-dump}
-[1f60077aa6a] {jit-backend-dump
+CODE_DUMP @7f476a7d622e +0  63020000
+[3304dedf2ce] jit-backend-dump}
+[3304dedf728] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b8f9 +0  91000000
-[1f60077bf10] jit-backend-dump}
-[1f60077cc24] jit-backend}
-[1f60077e094] {jit-log-opt-loop
-# Loop 2 : loop with 25 ops
-[p0, p1, p2, p3, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #12 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
-+166: i6 = int_lt(i4, 10000)
-guard_true(i6, descr=<Guard13>) [p1, p0, p2, p3, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #18 POP_JUMP_IF_FALSE')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #21 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #24 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #27 BINARY_AND')
-+179: i8 = int_and(i4, 2)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #28 POP_JUMP_IF_FALSE')
-+186: i9 = int_is_true(i8)
-guard_false(i9, descr=<Guard14>) [p1, p0, p2, p3, i8, i4]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #44 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #47 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #50 INPLACE_ADD')
-+196: i11 = int_add(i4, 3)
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #51 STORE_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #54 JUMP_ABSOLUTE')
-+200: i13 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+208: i15 = int_sub(i13, 2)
-+212: setfield_raw(40588192, i15, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+220: i17 = int_lt(i15, 0)
-guard_false(i17, descr=<Guard15>) [p1, p0, p2, p3, i11, None, None]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-+230: jump(p0, p1, p2, p3, i11, descr=<Loop2>)
-+238: --end of the loop--
-[1f6007a567c] jit-log-opt-loop}
-[1f600802cd6] {jit-backend
-[1f600862dd8] {jit-backend-dump
+CODE_DUMP @7f476a7d623b +0  7B020000
+[3304dedffef] jit-backend-dump}
+[3304dee040e] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b9b7 +0  488DA50000000049BB48B00C0A897F00004D8B3B4983C70149BB48B00C0A897F00004D893B4D89F74983C6010F80000000004C8B3C25A0536B024983EF014C893C25A0536B024983FF000F8C00000000488B0425704F3D01488D5010483B1425784F3D01761A49BB10B2A007897F000041FFD349BB8EB2A007897F000041FFD348C7009807000048891425704F3D014C89700848898550FFFFFF4C8BBD70FFFFFF4C8BB568FFFFFF4C8BAD60FFFFFF49BBA8F0B407897F00004D89DC49C7C2000000004C8B8D58FFFFFF49C7C00100000048C7C709000000488BB550FFFFFF48C7C30000000048C7C20000000049BB31B6A007897F000041FFE349BB00B0A007897F000041FFD3444039484C3D031000000049BB00B0A007897F000041FFD34440484C39070311000000
-[1f60086ba5a] jit-backend-dump}
-[1f60086d36e] {jit-backend-addr
-Bridge out of guard 4 has address 7f8907a0b9b7 to 7f8907a0bab1
-[1f60086ffd2] jit-backend-addr}
-[1f600870dca] {jit-backend-dump
+CODE_DUMP @7f476a7d624f +0  8C020000
+[3304dee0d4e] jit-backend-dump}
+[3304dee115b] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b9ba +0  C0FEFFFF
-[1f60087281c] jit-backend-dump}
-[1f600873506] {jit-backend-dump
+CODE_DUMP @7f476a7d6269 +0  97020000
+[3304dee1a98] jit-backend-dump}
+[3304dee1e9f] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b3d5 +0  C8000000
-[1f600874b44] jit-backend-dump}
-[1f6008754d4] {jit-backend-dump
+CODE_DUMP @7f476a7d6272 +0  B3020000
+[3304dee2789] jit-backend-dump}
+[3304dee2bb1] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0ba03 +0  C2000000
-[1f600876956] jit-backend-dump}
-[1f600877b1a] {jit-backend-dump
+CODE_DUMP @7f476a7d6291 +0  B9020000
+[3304dee34bf] jit-backend-dump}
+[3304dee38cc] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b495 +0  1E050000
-[1f600878f4e] jit-backend-dump}
-[1f600884c12] jit-backend}
-[1f60088780a] {jit-log-opt-bridge
-# bridge out of Guard 4 with 16 ops
-[p0, p1, p2, p3, i4, i5]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #31 LOAD_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #34 LOAD_CONST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #37 INPLACE_ADD')
-+37: i7 = int_add_ovf(i5, 1)
-guard_no_overflow(, descr=<Guard16>) [p0, p1, i7, p2, p3, i5]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #38 STORE_FAST')
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #41 JUMP_ABSOLUTE')
-+50: i9 = getfield_raw(40588192, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+58: i11 = int_sub(i9, 1)
-+62: setfield_raw(40588192, i11, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
-+70: i13 = int_lt(i11, 0)
-guard_false(i13, descr=<Guard17>) [p0, p1, p2, p3, i7, None]
-debug_merge_point(0, '<code object f. file 'x.py'. line 2> #9 LOAD_FAST')
-+80: p16 = new_with_vtable(ConstClass(W_IntObject))
-+143: setfield_gc(p16, i7, descr=<SignedFieldDescr pypy.objspace.std.intobject.W_IntObject.inst_intval 8>)
-+147: jump(p1, p0, p2, ConstPtr(ptr17), 0, p3, 1, 9, p16, ConstPtr(ptr21), ConstPtr(ptr22), descr=<Loop1>)
-+250: --end of the loop--
-[1f6008aa976] jit-log-opt-bridge}
-[1f600912c98] {jit-backend-counts
-0:1982
-1:1985
-2:0
-3:1782
-[1f600916544] jit-backend-counts}
+CODE_DUMP @7f476a7d62a2 +0  CD020000
+[3304dee41c5] jit-backend-dump}
+[3304dee45e1] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d632d +0  67020000
+[3304dee4ec5] jit-backend-dump}
+[3304dee543c] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d635d +0  81020000
+[3304dee5d03] jit-backend-dump}
+[3304dee6139] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d6377 +0  8C020000
+[3304dee69fa] jit-backend-dump}
+[3304dee6e10] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d63a2 +0  86020000
+[3304dee9db8] jit-backend-dump}
+[3304deea2e6] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d6426 +0  27020000
+[3304deeac17] jit-backend-dump}
+[3304deeb092] {jit-backend-dump
+BACKEND x86_64
+SYS_EXECUTABLE python
+CODE_DUMP @7f476a7d644f +0  48020000
+[3304deeb97f] jit-backend-dump}
+[3304deec304] jit-backend}
+[3304deed1f1] {jit-log-opt-loop
+# Loop 1 (<code object h, file 'x.py', line 14> #13 FOR_ITER) : loop with 82 ops
+[p0, p1]
++110: p2 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_w_f_trace 128>)
++124: p3 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_last_exception 80>)
++128: p4 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_pycode 112>)
++132: i5 = getfield_gc(p0, descr=<FieldU pypy.interpreter.pyframe.PyFrame.inst_is_being_profiled 142>)
++140: p6 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_lastblock 96>)
++144: i7 = getfield_gc(p0, descr=<FieldS pypy.interpreter.pyframe.PyFrame.inst_valuestackdepth 120>)
++148: i8 = getfield_gc(p0, descr=<FieldS pypy.interpreter.pyframe.PyFrame.inst_last_instr 88>)
++152: p9 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_locals_stack_w 104>)
++156: p11 = getarrayitem_gc(p9, 0, descr=<ArrayP 8>)
++160: p13 = getarrayitem_gc(p9, 1, descr=<ArrayP 8>)
++164: p15 = getarrayitem_gc(p9, 2, descr=<ArrayP 8>)
++168: p17 = getarrayitem_gc(p9, 3, descr=<ArrayP 8>)
++172: p18 = getfield_gc(p0, descr=<FieldP pypy.interpreter.pyframe.PyFrame.inst_cells 40>)
++172: label(p0, p1, p2, p3, p4, i5, p6, i7, i8, p11, p13, p15, p17, descr=TargetToken(139944753096184))
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #13 FOR_ITER')
++244: guard_value(i7, 3, descr=<Guard7f476d49d6a0>) [i7, p1, p0, p2, p3, p4, i5, p6, i8, p11, p13, p15, p17]
++254: guard_class(p15, 25719440, descr=<Guard7f476d4d8a70>) [p1, p0, p15, p2, p3, p4, i5, p6, p11, p13, p17]
++266: p21 = getfield_gc(p15, descr=<FieldP pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_w_seq 16>)
++270: guard_nonnull(p21, descr=<Guard7f476d4d89f8>) [p1, p0, p15, p21, p2, p3, p4, i5, p6, p11, p13, p17]
++279: i22 = getfield_gc(p15, descr=<FieldS pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
++283: p23 = getfield_gc(p21, descr=<FieldP pypy.objspace.std.listobject.W_ListObject.inst_strategy 16>)
++287: guard_class(p23, 26050592, descr=<Guard7f476d4d8980>) [p1, p0, p15, i22, p23, p21, p2, p3, p4, i5, p6, p11, p13, p17]
++299: p25 = getfield_gc(p21, descr=<FieldP pypy.objspace.std.listobject.W_ListObject.inst_lstorage 8>)
++303: i26 = getfield_gc_pure(p25, descr=<FieldS tuple3.item0 8>)
++307: i27 = getfield_gc_pure(p25, descr=<FieldS tuple3.item1 16>)
++311: i28 = getfield_gc_pure(p25, descr=<FieldS tuple3.item2 24>)
++315: i30 = int_lt(i22, 0)
+guard_false(i30, descr=<Guard7f476d4d8908>) [p1, p0, p15, i22, i28, i27, i26, p2, p3, p4, i5, p6, p11, p13, p17]
++325: i31 = int_ge(i22, i28)
+guard_false(i31, descr=<Guard7f476d4d8890>) [p1, p0, p15, i22, i27, i26, p2, p3, p4, i5, p6, p11, p13, p17]
++334: i32 = int_mul(i22, i27)
++341: i33 = int_add(i26, i32)
++347: i35 = int_add(i22, 1)
++351: setfield_gc(p15, i35, descr=<FieldS pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
++355: guard_value(i5, 0, descr=<Guard7f476d4d8818>) [i5, p1, p0, p2, p3, p4, p6, p11, p13, p15, i33]
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #16 STORE_FAST')
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #19 LOAD_FAST')
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #22 LIST_APPEND')
++365: p37 = getfield_gc(p13, descr=<FieldP pypy.objspace.std.listobject.W_ListObject.inst_strategy 16>)
++369: guard_class(p37, 25936304, descr=<Guard7f476d4d87a0>) [p1, p0, p37, p13, p2, p3, p4, p6, p15, i33]
++382: p39 = getfield_gc(p13, descr=<FieldP pypy.objspace.std.listobject.W_ListObject.inst_lstorage 8>)
++386: i40 = getfield_gc(p39, descr=<FieldS list.length 8>)
++390: i42 = int_add(i40, 1)
++394: p43 = getfield_gc(p39, descr=<FieldP list.items 16>)
++394: i44 = arraylen_gc(p43, descr=<ArrayS 8>)
++394: call(ConstClass(_ll_list_resize_ge_trampoline__v921___simple_call__function__), p39, i42, descr=<Callv 0 ri EF=4>)
++506: guard_no_exception(descr=<Guard7f476d4d8728>) [p1, p0, i40, i33, p39, p2, p3, p4, p6, p13, p15, None]
++521: p47 = getfield_gc(p39, descr=<FieldP list.items 16>)
++532: setarrayitem_gc(p47, i40, i33, descr=<ArrayS 8>)
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #25 JUMP_ABSOLUTE')
++551: guard_not_invalidated(descr=<Guard7f476d4d86b0>) [p1, p0, p2, p3, p4, p6, p13, p15, i33]
++551: i49 = getfield_raw(52008256, descr=<FieldS pypysig_long_struct.c_value 0>)
++559: i51 = int_lt(i49, 0)
+guard_false(i51, descr=<Guard7f476d4d8638>) [p1, p0, p2, p3, p4, p6, p13, p15, i33]
++569: guard_value(p4, ConstPtr(ptr52), descr=<Guard7f476d4d85c0>) [p1, p0, p4, p2, p3, p6, p13, p15, i33]
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #13 FOR_ITER')
++595: label(p0, p1, p2, p3, p6, i33, p13, p15, i35, i28, i27, i26, p39, descr=TargetToken(139944753096272))
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #13 FOR_ITER')
++625: i53 = int_ge(i35, i28)
+guard_false(i53, descr=<Guard7f476d4d8548>) [p1, p0, p15, i35, i27, i26, p2, p3, p6, p13, i33]
++638: i54 = int_mul(i35, i27)
++649: i55 = int_add(i26, i54)
++655: i56 = int_add(i35, 1)
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #16 STORE_FAST')
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #19 LOAD_FAST')
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #22 LIST_APPEND')
++659: i57 = getfield_gc(p39, descr=<FieldS list.length 8>)
++663: i58 = int_add(i57, 1)
++667: p59 = getfield_gc(p39, descr=<FieldP list.items 16>)
++667: i60 = arraylen_gc(p59, descr=<ArrayS 8>)
++667: call(ConstClass(_ll_list_resize_ge_trampoline__v921___simple_call__function__), p39, i58, descr=<Callv 0 ri EF=4>)
++744: setfield_gc(p15, i56, descr=<FieldS pypy.objspace.std.iterobject.W_AbstractSeqIterObject.inst_index 8>)
++755: guard_no_exception(descr=<Guard7f476d4d84d0>) [p1, p0, i57, i55, p39, p2, p3, p6, p13, p15, None]
++770: p61 = getfield_gc(p39, descr=<FieldP list.items 16>)
++781: setarrayitem_gc(p61, i57, i55, descr=<ArrayS 8>)
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #25 JUMP_ABSOLUTE')
++793: guard_not_invalidated(descr=<Guard7f476d4d8458>) [p1, p0, p2, p3, p6, p13, p15, i55, None]
++793: i62 = getfield_raw(52008256, descr=<FieldS pypysig_long_struct.c_value 0>)
++801: i63 = int_lt(i62, 0)
+guard_false(i63, descr=<Guard7f476d4d83e0>) [p1, p0, p2, p3, p6, p13, p15, i55, None]
+debug_merge_point(0, 0, '<code object h. file 'x.py'. line 14> #13 FOR_ITER')
++811: jump(p0, p1, p2, p3, p6, i55, p13, p15, i56, i28, i27, i26, p39, descr=TargetToken(139944753096272))
++840: --end of the loop--
+[3304df359fe] jit-log-opt-loop}
+[3304df6aed1] {jit-backend-counts
+entry 0:1
+TargetToken(139944714371104):1
+TargetToken(139944714371192):4
+entry 1:1
+TargetToken(139944753096184):1
+TargetToken(139944753096272):4
+[3304df6da3a] jit-backend-counts}
diff --git a/pypy/tool/jitlogparser/test/test_parser.py b/pypy/tool/jitlogparser/test/test_parser.py
--- a/pypy/tool/jitlogparser/test/test_parser.py
+++ b/pypy/tool/jitlogparser/test/test_parser.py
@@ -106,13 +106,13 @@
     fname = str(py.path.local(__file__).join('..', 'x.py'))
     ops = parse('''
     [i0, i1]
-    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #0 LOAD_FAST")
-    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #3 LOAD_FAST")
-    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #6 BINARY_ADD")
-    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 2> #7 RETURN_VALUE")
+    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #0 LOAD_FAST")
+    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #3 LOAD_FAST")
+    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #6 BINARY_ADD")
+    debug_merge_point(0, 0, "<code object f. file '%(fname)s'. line 5> #7 RETURN_VALUE")
     ''' % locals())
     res = Function.from_operations(ops.operations, LoopStorage())
-    assert res.chunks[1].lineno == 3
+    assert res.chunks[1].lineno == 6
 
 def test_linerange():
     if sys.version_info > (2, 6):
@@ -150,7 +150,7 @@
     ''')
     main.count = 10
     bridge = parse('''
-    # bridge out of Guard 18 with 13 ops
+    # bridge out of Guard 0x18 with 13 ops
     [i0, i1]
     int_add(i0, i1)
     ''')
@@ -172,7 +172,7 @@
     guard_true(v0, descr=<Guard5>)
     ''')
     bridge = parse('''
-    # bridge out of Guard 1a
+    # bridge out of Guard 0x1a
     []
     int_add(0, 1)
     ''')
@@ -287,9 +287,7 @@
                                                            'logtest2.log')))
     for loop in loops:
         loop.force_asm()
-    assert 'cmp' in loops[1].operations[1].asm
-    # bridge
-    assert 'jo' in loops[3].operations[3].asm
+    assert 'cmp' in loops[1].operations[2].asm
 
 def test_Op_repr_is_pure():
     op = Op('foobar', ['a', 'b'], 'c', 'mydescr')
@@ -331,15 +329,15 @@
     i113 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
     ''')
     bridge = parse('''
-    # bridge out of Guard 2 with 1 ops
+    # bridge out of Guard 0xaf with 1 ops
     []
     i0 = int_lt(1, 2)
     finish(i0)
     ''')
-    bridge.comment = 'bridge out of Guard af with 1 ops'
+    bridge.comment = 'bridge out of Guard 0xaf with 1 ops'
     loop.comment = 'Loop 0'
     loops = split_trace(loop) + split_trace(bridge)
-    input = ['grrr:123\nasb:12\nbridge af:1234']
+    input = ['grrr:123\nasb:12\nbridge 175:1234']
     parse_log_counts(input, loops)
     assert loops[-1].count == 1234
     assert loops[1].count == 123
@@ -349,10 +347,8 @@
     loop = parse("""
     []
     debug_merge_point(0, 0, 'random')
-    debug_merge_point(0, 0, '<code object f. file 'x.py'. line 2> #15 COMPARE_OP')
     """)
     f = Function.from_operations(loop.operations, LoopStorage())
-    assert f.chunks[-1].filename == 'x.py'
     assert f.filename is None
 
 def test_parse_2_levels_up():
diff --git a/pypy/tool/jitlogparser/test/x.py b/pypy/tool/jitlogparser/test/x.py
--- a/pypy/tool/jitlogparser/test/x.py
+++ b/pypy/tool/jitlogparser/test/x.py
@@ -1,3 +1,6 @@
+
+import pypyjit
+pypyjit.set_param(threshold=3)
 
 def f(a, b):
     return a + b
@@ -10,3 +13,6 @@
 
 def h():
     [x for x in range(10)]
+
+g()
+h()
diff --git a/pypy/tool/release/package.py b/pypy/tool/release/package.py
--- a/pypy/tool/release/package.py
+++ b/pypy/tool/release/package.py
@@ -146,6 +146,10 @@
         else:
             archive = str(builddir.join(name + '.tar.bz2'))
             if sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
+                print >>sys.stderr, """Warning: tar on current platform does not suport overriding the uid and gid
+for its contents. The tarball will contain your uid and gid. If you are
+building the actual release for the PyPy website, you may want to be
+using another platform..."""
                 e = os.system('tar --numeric-owner -cvjf ' + archive + " " + name)
             elif sys.platform == 'cygwin':
                 e = os.system('tar --owner=Administrator --group=Administrators --numeric-owner -cvjf ' + archive + " " + name)
diff --git a/pypy/tool/release/test/test_package.py b/pypy/tool/release/test/test_package.py
--- a/pypy/tool/release/test/test_package.py
+++ b/pypy/tool/release/test/test_package.py
@@ -45,8 +45,11 @@
             assert exe.mode == 0755
             assert exe.uname == ''
             assert exe.gname == ''
-            assert exe.uid == 0
-            assert exe.gid == 0
+            # The tar program on MacOSX or the FreeBSDs does not support
+            # setting the numeric uid and gid when creating a tar file.
+            if not(sys.platform == 'darwin' or sys.platform.startswith('freebsd')):
+                assert exe.uid == 0
+                assert exe.gid == 0
 
         # the headers file could be not there, because they are copied into
         # trunk/include only during translation
diff --git a/rpython/jit/backend/arm/assembler.py b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -13,7 +13,7 @@
     operations as regalloc_operations,
     operations_with_guard as regalloc_operations_with_guard)
 from rpython.jit.backend.llsupport import jitframe
-from rpython.jit.backend.llsupport.assembler import DEBUG_COUNTER
+from rpython.jit.backend.llsupport.assembler import DEBUG_COUNTER, debug_bridge
 from rpython.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
 from rpython.jit.backend.model import CompiledLoopToken
 from rpython.jit.codewriter.effectinfo import EffectInfo
@@ -709,11 +709,7 @@
         self.update_frame_depth(frame_depth)
         self.teardown()
 
-        debug_start("jit-backend-addr")
-        debug_print("bridge out of Guard %d has address 0x%x to 0x%x" %
-                    (descr_number, r_uint(rawstart),
-                     r_uint(rawstart + codeendpos)))
-        debug_stop("jit-backend-addr")
+        debug_bridge(descr_number, rawstart, codeendpos)
 
         return AsmInfo(ops_offset, startpos + rawstart, codeendpos - startpos)
 
diff --git a/rpython/jit/backend/arm/test/test_calling_convention.py b/rpython/jit/backend/arm/test/test_calling_convention.py
--- a/rpython/jit/backend/arm/test/test_calling_convention.py
+++ b/rpython/jit/backend/arm/test/test_calling_convention.py
@@ -1,13 +1,13 @@
 from rpython.rtyper.annlowlevel import llhelper
 from rpython.jit.metainterp.history import JitCellToken
-from rpython.jit.backend.test.calling_convention_test import TestCallingConv, parse
+from rpython.jit.backend.test.calling_convention_test import CallingConvTests, parse
 from rpython.rtyper.lltypesystem import lltype
 from rpython.jit.codewriter.effectinfo import EffectInfo
 
 from rpython.jit.backend.arm.test.support import skip_unless_run_slow_tests
 skip_unless_run_slow_tests()
 
-class TestARMCallingConvention(TestCallingConv):
+class TestARMCallingConvention(CallingConvTests):
     # ../../test/calling_convention_test.py
 
     def test_call_argument_spilling(self):
diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py
--- a/rpython/jit/backend/llgraph/runner.py
+++ b/rpython/jit/backend/llgraph/runner.py
@@ -35,7 +35,7 @@
         self.operations = []
         for op in operations:
             if op.getdescr() is not None:
-                if op.is_guard():
+                if op.is_guard() or op.getopnum() == rop.FINISH:
                     newdescr = op.getdescr()
                 else:
                     newdescr = WeakrefDescr(op.getdescr())
diff --git a/rpython/jit/backend/llsupport/assembler.py b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -5,7 +5,8 @@
     ConstInt, BoxInt)
 from rpython.jit.metainterp.resoperation import ResOperation, rop
 from rpython.rlib import rgc
-from rpython.rlib.debug import debug_start, debug_stop, have_debug_prints
+from rpython.rlib.debug import (debug_start, debug_stop, have_debug_prints,
+                                debug_print)
 from rpython.rlib.rarithmetic import r_uint
 from rpython.rtyper.annlowlevel import cast_instance_to_gcref
 from rpython.rtyper.lltypesystem import rffi, lltype
@@ -224,3 +225,12 @@
                ResOperation(rop.SETFIELD_RAW, [c_adr, box2],
                             None, descr=self.debug_counter_descr)]
         operations.extend(ops)
+
+
+def debug_bridge(descr_number, rawstart, codeendpos):
+    debug_start("jit-backend-addr")
+    debug_print("bridge out of Guard 0x%x has address 0x%x to 0x%x" %
+                (r_uint(descr_number), r_uint(rawstart),
+                    r_uint(rawstart + codeendpos)))
+    debug_stop("jit-backend-addr")
+
diff --git a/rpython/jit/backend/test/calling_convention_test.py b/rpython/jit/backend/test/calling_convention_test.py
--- a/rpython/jit/backend/test/calling_convention_test.py
+++ b/rpython/jit/backend/test/calling_convention_test.py
@@ -10,6 +10,7 @@
 from rpython.jit.backend.detect_cpu import getcpuclass
 from rpython.jit.backend.test.runner_test import Runner
 import py
+import sys
 
 def boxfloat(x):
     return BoxFloat(longlong.getfloatstorage(x))
@@ -381,6 +382,8 @@
         raise NotImplementedError
 
     def test_call_aligned_explicit_check(self):
+        if sys.maxint == 2 ** 31 - 1:
+            py.test.skip("libffi on 32bit is broken")
         cpu = self.cpu
         if not cpu.supports_floats:
             py.test.skip('requires floats')
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -2,7 +2,8 @@
 import os
 
 from rpython.jit.backend.llsupport import symbolic, jitframe
-from rpython.jit.backend.llsupport.assembler import GuardToken, BaseAssembler, DEBUG_COUNTER
+from rpython.jit.backend.llsupport.assembler import (GuardToken, BaseAssembler,
+                                                DEBUG_COUNTER, debug_bridge)
 from rpython.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
 from rpython.jit.backend.llsupport.gcmap import allocate_gcmap
 from rpython.jit.metainterp.history import Const, Box
@@ -553,11 +554,7 @@
         rawstart = self.materialize_loop(original_loop_token)
         self.patch_stack_checks(frame_depth_no_fixed_size + JITFRAME_FIXED_SIZE,
                                 rawstart)
-        debug_start("jit-backend-addr")
-        debug_print("bridge out of Guard 0x%x has address 0x%x to 0x%x" %
-                    (r_uint(descr_number), r_uint(rawstart),
-                     r_uint(rawstart + codeendpos)))
-        debug_stop("jit-backend-addr")
+        debug_bridge(descr_number, rawstart, codeendpos)
         self.patch_pending_failure_recoveries(rawstart)
         # patch the jump from original guard
         self.patch_jump_for_descr(faildescr, rawstart)
diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -43,7 +43,7 @@
         else:
             debug_start("jit-log-opt-bridge")
             debug_print("# bridge out of Guard",
-                        "%x" % compute_unique_id(descr),
+                        "0x%x" % compute_unique_id(descr),
                         "with", len(operations), "ops")
             logops = self._log_operations(inputargs, operations, ops_offset)
             debug_stop("jit-log-opt-bridge")
@@ -134,7 +134,7 @@
             descr = op.getdescr()
             if is_guard and self.guard_number:
                 hash = compute_unique_id(descr)
-                r = "<Guard%x>" % hash
+                r = "<Guard0x%x>" % hash
             else:
                 r = self.repr_of_descr(descr)
             if args:
diff --git a/rpython/jit/metainterp/test/test_logger.py b/rpython/jit/metainterp/test/test_logger.py
--- a/rpython/jit/metainterp/test/test_logger.py
+++ b/rpython/jit/metainterp/test/test_logger.py
@@ -166,7 +166,7 @@
         loop = pure_parse(inp, namespace=namespace)
         logger = Logger(self.make_metainterp_sd(), guard_number=True)
         output = logger.log_loop(loop)
-        assert re.match("guard_true\(i0, descr=<Guard[\da-f]+>\) \[i0\]", output.splitlines()[-1])
+        assert re.match("guard_true\(i0, descr=<Guard0x[\da-f]+>\) \[i0\]", output.splitlines()[-1])
         pure_parse(output)
 
         logger = Logger(self.make_metainterp_sd(), guard_number=False)
@@ -200,7 +200,7 @@
     def test_intro_bridge(self):
         bare_logger = logger.Logger(self.make_metainterp_sd())
         output = capturing(bare_logger.log_bridge, [], [], 3)
-        assert re.match("# bridge out of Guard [\da-f]+ with 0 ops",
+        assert re.match("# bridge out of Guard 0x[\da-f]+ with 0 ops",
                         output.splitlines()[0])
         pure_parse(output)
 
diff --git a/rpython/rlib/rstacklet.py b/rpython/rlib/rstacklet.py
--- a/rpython/rlib/rstacklet.py
+++ b/rpython/rlib/rstacklet.py
@@ -47,6 +47,10 @@
     def get_null_handle(self):
         return self._gcrootfinder.get_null_handle()
 
+    def _freeze_(self):
+        raise Exception("StackletThread instances must not be seen during"
+                        " translation.")
+
 
 class StackletThreadDeleter(object):
     # quick hack: the __del__ is on another object, so that
diff --git a/rpython/rlib/unicodedata/CompositionExclusions-6.0.0.txt b/rpython/rlib/unicodedata/CompositionExclusions-6.0.0.txt
new file mode 100644
--- /dev/null
+++ b/rpython/rlib/unicodedata/CompositionExclusions-6.0.0.txt
@@ -0,0 +1,206 @@
+# CompositionExclusions-6.0.0.txt
+# Date: 2010-06-25, 14:34:00 PDT [KW]
+#
+# This file lists the characters for the Composition Exclusion Table
+# defined in UAX #15, Unicode Normalization Forms.
+#
+# This file is a normative contributory data file in the
+# Unicode Character Database.
+#
+# Copyright (c) 1991-2010 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+#
+# For more information, see
+# http://www.unicode.org/unicode/reports/tr15/#Primary_Exclusion_List_Table
+#
+# For a full derivation of composition exclusions, see the derived property
+# Full_Composition_Exclusion in DerivedNormalizationProps.txt
+#
+
+# ================================================
+# (1) Script Specifics
+#
+# This list of characters cannot be derived from the UnicodeData.txt file.
+# ================================================
+
+0958    #  DEVANAGARI LETTER QA
+0959    #  DEVANAGARI LETTER KHHA
+095A    #  DEVANAGARI LETTER GHHA
+095B    #  DEVANAGARI LETTER ZA
+095C    #  DEVANAGARI LETTER DDDHA
+095D    #  DEVANAGARI LETTER RHA
+095E    #  DEVANAGARI LETTER FA
+095F    #  DEVANAGARI LETTER YYA
+09DC    #  BENGALI LETTER RRA
+09DD    #  BENGALI LETTER RHA
+09DF    #  BENGALI LETTER YYA
+0A33    #  GURMUKHI LETTER LLA
+0A36    #  GURMUKHI LETTER SHA
+0A59    #  GURMUKHI LETTER KHHA
+0A5A    #  GURMUKHI LETTER GHHA
+0A5B    #  GURMUKHI LETTER ZA
+0A5E    #  GURMUKHI LETTER FA
+0B5C    #  ORIYA LETTER RRA
+0B5D    #  ORIYA LETTER RHA
+0F43    #  TIBETAN LETTER GHA
+0F4D    #  TIBETAN LETTER DDHA
+0F52    #  TIBETAN LETTER DHA
+0F57    #  TIBETAN LETTER BHA
+0F5C    #  TIBETAN LETTER DZHA
+0F69    #  TIBETAN LETTER KSSA
+0F76    #  TIBETAN VOWEL SIGN VOCALIC R
+0F78    #  TIBETAN VOWEL SIGN VOCALIC L
+0F93    #  TIBETAN SUBJOINED LETTER GHA
+0F9D    #  TIBETAN SUBJOINED LETTER DDHA
+0FA2    #  TIBETAN SUBJOINED LETTER DHA
+0FA7    #  TIBETAN SUBJOINED LETTER BHA
+0FAC    #  TIBETAN SUBJOINED LETTER DZHA
+0FB9    #  TIBETAN SUBJOINED LETTER KSSA
+FB1D    #  HEBREW LETTER YOD WITH HIRIQ
+FB1F    #  HEBREW LIGATURE YIDDISH YOD YOD PATAH
+FB2A    #  HEBREW LETTER SHIN WITH SHIN DOT
+FB2B    #  HEBREW LETTER SHIN WITH SIN DOT
+FB2C    #  HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT
+FB2D    #  HEBREW LETTER SHIN WITH DAGESH AND SIN DOT
+FB2E    #  HEBREW LETTER ALEF WITH PATAH
+FB2F    #  HEBREW LETTER ALEF WITH QAMATS
+FB30    #  HEBREW LETTER ALEF WITH MAPIQ
+FB31    #  HEBREW LETTER BET WITH DAGESH
+FB32    #  HEBREW LETTER GIMEL WITH DAGESH
+FB33    #  HEBREW LETTER DALET WITH DAGESH
+FB34    #  HEBREW LETTER HE WITH MAPIQ
+FB35    #  HEBREW LETTER VAV WITH DAGESH
+FB36    #  HEBREW LETTER ZAYIN WITH DAGESH
+FB38    #  HEBREW LETTER TET WITH DAGESH
+FB39    #  HEBREW LETTER YOD WITH DAGESH
+FB3A    #  HEBREW LETTER FINAL KAF WITH DAGESH
+FB3B    #  HEBREW LETTER KAF WITH DAGESH
+FB3C    #  HEBREW LETTER LAMED WITH DAGESH
+FB3E    #  HEBREW LETTER MEM WITH DAGESH
+FB40    #  HEBREW LETTER NUN WITH DAGESH
+FB41    #  HEBREW LETTER SAMEKH WITH DAGESH
+FB43    #  HEBREW LETTER FINAL PE WITH DAGESH
+FB44    #  HEBREW LETTER PE WITH DAGESH
+FB46    #  HEBREW LETTER TSADI WITH DAGESH
+FB47    #  HEBREW LETTER QOF WITH DAGESH
+FB48    #  HEBREW LETTER RESH WITH DAGESH
+FB49    #  HEBREW LETTER SHIN WITH DAGESH
+FB4A    #  HEBREW LETTER TAV WITH DAGESH
+FB4B    #  HEBREW LETTER VAV WITH HOLAM
+FB4C    #  HEBREW LETTER BET WITH RAFE
+FB4D    #  HEBREW LETTER KAF WITH RAFE
+FB4E    #  HEBREW LETTER PE WITH RAFE
+
+# Total code points: 67
+
+# ================================================
+# (2) Post Composition Version precomposed characters
+#
+# These characters cannot be derived solely from the UnicodeData.txt file
+# in this version of Unicode.
+#
+# Note that characters added to the standard after the
+# Composition Version and which have canonical decomposition mappings
+# are not automatically added to this list of Post Composition
+# Version precomposed characters.
+# ================================================
+
+2ADC    #  FORKING
+1D15E   #  MUSICAL SYMBOL HALF NOTE
+1D15F   #  MUSICAL SYMBOL QUARTER NOTE
+1D160   #  MUSICAL SYMBOL EIGHTH NOTE
+1D161   #  MUSICAL SYMBOL SIXTEENTH NOTE
+1D162   #  MUSICAL SYMBOL THIRTY-SECOND NOTE
+1D163   #  MUSICAL SYMBOL SIXTY-FOURTH NOTE
+1D164   #  MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
+1D1BB   #  MUSICAL SYMBOL MINIMA
+1D1BC   #  MUSICAL SYMBOL MINIMA BLACK
+1D1BD   #  MUSICAL SYMBOL SEMIMINIMA WHITE
+1D1BE   #  MUSICAL SYMBOL SEMIMINIMA BLACK
+1D1BF   #  MUSICAL SYMBOL FUSA WHITE
+1D1C0   #  MUSICAL SYMBOL FUSA BLACK
+
+# Total code points: 14
+
+# ================================================
+# (3) Singleton Decompositions
+#
+# These characters can be derived from the UnicodeData.txt file
+# by including all canonically decomposable characters whose
+# canonical decomposition consists of a single character.
+#
+# These characters are simply quoted here for reference.
+# See also Full_Composition_Exclusion in DerivedNormalizationProps.txt
+# ================================================
+
+# 0340..0341       [2] COMBINING GRAVE TONE MARK..COMBINING ACUTE TONE MARK
+# 0343                 COMBINING GREEK KORONIS
+# 0374                 GREEK NUMERAL SIGN
+# 037E                 GREEK QUESTION MARK
+# 0387                 GREEK ANO TELEIA
+# 1F71                 GREEK SMALL LETTER ALPHA WITH OXIA
+# 1F73                 GREEK SMALL LETTER EPSILON WITH OXIA
+# 1F75                 GREEK SMALL LETTER ETA WITH OXIA
+# 1F77                 GREEK SMALL LETTER IOTA WITH OXIA
+# 1F79                 GREEK SMALL LETTER OMICRON WITH OXIA
+# 1F7B                 GREEK SMALL LETTER UPSILON WITH OXIA
+# 1F7D                 GREEK SMALL LETTER OMEGA WITH OXIA
+# 1FBB                 GREEK CAPITAL LETTER ALPHA WITH OXIA
+# 1FBE                 GREEK PROSGEGRAMMENI
+# 1FC9                 GREEK CAPITAL LETTER EPSILON WITH OXIA
+# 1FCB                 GREEK CAPITAL LETTER ETA WITH OXIA
+# 1FD3                 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
+# 1FDB                 GREEK CAPITAL LETTER IOTA WITH OXIA
+# 1FE3                 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
+# 1FEB                 GREEK CAPITAL LETTER UPSILON WITH OXIA
+# 1FEE..1FEF       [2] GREEK DIALYTIKA AND OXIA..GREEK VARIA
+# 1FF9                 GREEK CAPITAL LETTER OMICRON WITH OXIA
+# 1FFB                 GREEK CAPITAL LETTER OMEGA WITH OXIA
+# 1FFD                 GREEK OXIA
+# 2000..2001       [2] EN QUAD..EM QUAD
+# 2126                 OHM SIGN
+# 212A..212B       [2] KELVIN SIGN..ANGSTROM SIGN
+# 2329                 LEFT-POINTING ANGLE BRACKET
+# 232A                 RIGHT-POINTING ANGLE BRACKET
+# F900..FA0D     [270] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA0D
+# FA10                 CJK COMPATIBILITY IDEOGRAPH-FA10
+# FA12                 CJK COMPATIBILITY IDEOGRAPH-FA12
+# FA15..FA1E      [10] CJK COMPATIBILITY IDEOGRAPH-FA15..CJK COMPATIBILITY IDEOGRAPH-FA1E
+# FA20                 CJK COMPATIBILITY IDEOGRAPH-FA20
+# FA22                 CJK COMPATIBILITY IDEOGRAPH-FA22
+# FA25..FA26       [2] CJK COMPATIBILITY IDEOGRAPH-FA25..CJK COMPATIBILITY IDEOGRAPH-FA26
+# FA2A..FA2D       [4] CJK COMPATIBILITY IDEOGRAPH-FA2A..CJK COMPATIBILITY IDEOGRAPH-FA2D
+# FA30..FA6D      [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+# FA70..FAD9     [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
+# 2F800..2FA1D   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
+
+# Total code points: 1033
+
+# ================================================
+# (4) Non-Starter Decompositions
+#
+# These characters can be derived from the UnicodeData file
+# by including each expanding canonical decomposition
+# (i.e., those which canonically decompose to a sequence
+# of characters instead of a single character), such that:
+#
+# A. The character is not a Starter.
+#
+# OR (inclusive)
+#
+# B. The character's canonical decomposition begins
+# with a character that is not a Starter.
+#
+# Note that a "Starter" is any character with a zero combining class.
+#
+# These characters are simply quoted here for reference.
+# See also Full_Composition_Exclusion in DerivedNormalizationProps.txt
+# ================================================
+
+# 0344                 COMBINING GREEK DIALYTIKA TONOS
+# 0F73                 TIBETAN VOWEL SIGN II
+# 0F75                 TIBETAN VOWEL SIGN UU
+# 0F81                 TIBETAN VOWEL SIGN REVERSED II
+
+# Total code points: 4
+
diff --git a/rpython/rlib/unicodedata/DerivedCoreProperties-6.0.0.txt b/rpython/rlib/unicodedata/DerivedCoreProperties-6.0.0.txt
new file mode 100644
--- /dev/null
+++ b/rpython/rlib/unicodedata/DerivedCoreProperties-6.0.0.txt
@@ -0,0 +1,9482 @@
+# DerivedCoreProperties-6.0.0.txt
+# Date: 2010-08-19, 00:48:05 GMT [MD]
+#
+# Unicode Character Database
+# Copyright (c) 1991-2010 Unicode, Inc.
+# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For documentation, see http://www.unicode.org/reports/tr44/
+
+# ================================================
+
+# Derived Property: Math
+#  Generated from: Sm + Other_Math
+
+002B          ; Math # Sm       PLUS SIGN
+003C..003E    ; Math # Sm   [3] LESS-THAN SIGN..GREATER-THAN SIGN
+005E          ; Math # Sk       CIRCUMFLEX ACCENT
+007C          ; Math # Sm       VERTICAL LINE
+007E          ; Math # Sm       TILDE
+00AC          ; Math # Sm       NOT SIGN
+00B1          ; Math # Sm       PLUS-MINUS SIGN
+00D7          ; Math # Sm       MULTIPLICATION SIGN
+00F7          ; Math # Sm       DIVISION SIGN
+03D0..03D2    ; Math # L&   [3] GREEK BETA SYMBOL..GREEK UPSILON WITH HOOK SYMBOL
+03D5          ; Math # L&       GREEK PHI SYMBOL
+03F0..03F1    ; Math # L&   [2] GREEK KAPPA SYMBOL..GREEK RHO SYMBOL
+03F4..03F5    ; Math # L&   [2] GREEK CAPITAL THETA SYMBOL..GREEK LUNATE EPSILON SYMBOL
+03F6          ; Math # Sm       GREEK REVERSED LUNATE EPSILON SYMBOL
+0606..0608    ; Math # Sm   [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
+2016          ; Math # Po       DOUBLE VERTICAL LINE
+2032..2034    ; Math # Po   [3] PRIME..TRIPLE PRIME
+2040          ; Math # Pc       CHARACTER TIE
+2044          ; Math # Sm       FRACTION SLASH
+2052          ; Math # Sm       COMMERCIAL MINUS SIGN
+2061..2064    ; Math # Cf   [4] FUNCTION APPLICATION..INVISIBLE PLUS
+207A..207C    ; Math # Sm   [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
+207D          ; Math # Ps       SUPERSCRIPT LEFT PARENTHESIS
+207E          ; Math # Pe       SUPERSCRIPT RIGHT PARENTHESIS
+208A..208C    ; Math # Sm   [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
+208D          ; Math # Ps       SUBSCRIPT LEFT PARENTHESIS
+208E          ; Math # Pe       SUBSCRIPT RIGHT PARENTHESIS
+20D0..20DC    ; Math # Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
+20E1          ; Math # Mn       COMBINING LEFT RIGHT ARROW ABOVE
+20E5..20E6    ; Math # Mn   [2] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING DOUBLE VERTICAL STROKE OVERLAY
+20EB..20EF    ; Math # Mn   [5] COMBINING LONG DOUBLE SOLIDUS OVERLAY..COMBINING RIGHT ARROW BELOW
+2102          ; Math # L&       DOUBLE-STRUCK CAPITAL C
+2107          ; Math # L&       EULER CONSTANT
+210A..2113    ; Math # L&  [10] SCRIPT SMALL G..SCRIPT SMALL L
+2115          ; Math # L&       DOUBLE-STRUCK CAPITAL N
+2118          ; Math # Sm       SCRIPT CAPITAL P
+2119..211D    ; Math # L&   [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
+2124          ; Math # L&       DOUBLE-STRUCK CAPITAL Z
+2128          ; Math # L&       BLACK-LETTER CAPITAL Z
+2129          ; Math # So       TURNED GREEK SMALL LETTER IOTA
+212C..212D    ; Math # L&   [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
+212F..2131    ; Math # L&   [3] SCRIPT SMALL E..SCRIPT CAPITAL F
+2133..2134    ; Math # L&   [2] SCRIPT CAPITAL M..SCRIPT SMALL O
+2135..2138    ; Math # Lo   [4] ALEF SYMBOL..DALET SYMBOL
+213C..213F    ; Math # L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
+2140..2144    ; Math # Sm   [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
+2145..2149    ; Math # L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
+214B          ; Math # Sm       TURNED AMPERSAND
+2190..2194    ; Math # Sm   [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
+2195..2199    ; Math # So   [5] UP DOWN ARROW..SOUTH WEST ARROW
+219A..219B    ; Math # Sm   [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
+219C..219F    ; Math # So   [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
+21A0          ; Math # Sm       RIGHTWARDS TWO HEADED ARROW
+21A1..21A2    ; Math # So   [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
+21A3          ; Math # Sm       RIGHTWARDS ARROW WITH TAIL
+21A4..21A5    ; Math # So   [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
+21A6          ; Math # Sm       RIGHTWARDS ARROW FROM BAR
+21A7          ; Math # So       DOWNWARDS ARROW FROM BAR
+21A9..21AD    ; Math # So   [5] LEFTWARDS ARROW WITH HOOK..LEFT RIGHT WAVE ARROW
+21AE          ; Math # Sm       LEFT RIGHT ARROW WITH STROKE
+21B0..21B1    ; Math # So   [2] UPWARDS ARROW WITH TIP LEFTWARDS..UPWARDS ARROW WITH TIP RIGHTWARDS
+21B6..21B7    ; Math # So   [2] ANTICLOCKWISE TOP SEMICIRCLE ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
+21BC..21CD    ; Math # So  [18] LEFTWARDS HARPOON WITH BARB UPWARDS..LEFTWARDS DOUBLE ARROW WITH STROKE
+21CE..21CF    ; Math # Sm   [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
+21D0..21D1    ; Math # So   [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
+21D2          ; Math # Sm       RIGHTWARDS DOUBLE ARROW
+21D3          ; Math # So       DOWNWARDS DOUBLE ARROW
+21D4          ; Math # Sm       LEFT RIGHT DOUBLE ARROW
+21D5..21DB    ; Math # So   [7] UP DOWN DOUBLE ARROW..RIGHTWARDS TRIPLE ARROW
+21DD          ; Math # So       RIGHTWARDS SQUIGGLE ARROW
+21E4..21E5    ; Math # So   [2] LEFTWARDS ARROW TO BAR..RIGHTWARDS ARROW TO BAR
+21F4..22FF    ; Math # Sm [268] RIGHT ARROW WITH SMALL CIRCLE..Z NOTATION BAG MEMBERSHIP
+2308..230B    ; Math # Sm   [4] LEFT CEILING..RIGHT FLOOR
+2320..2321    ; Math # Sm   [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
+237C          ; Math # Sm       RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
+239B..23B3    ; Math # Sm  [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
+23B4..23B5    ; Math # So   [2] TOP SQUARE BRACKET..BOTTOM SQUARE BRACKET
+23B7          ; Math # So       RADICAL SYMBOL BOTTOM
+23D0          ; Math # So       VERTICAL LINE EXTENSION
+23DC..23E1    ; Math # Sm   [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
+23E2          ; Math # So       WHITE TRAPEZIUM
+25A0..25A1    ; Math # So   [2] BLACK SQUARE..WHITE SQUARE
+25AE..25B6    ; Math # So   [9] BLACK VERTICAL RECTANGLE..BLACK RIGHT-POINTING TRIANGLE
+25B7          ; Math # Sm       WHITE RIGHT-POINTING TRIANGLE
+25BC..25C0    ; Math # So   [5] BLACK DOWN-POINTING TRIANGLE..BLACK LEFT-POINTING TRIANGLE
+25C1          ; Math # Sm       WHITE LEFT-POINTING TRIANGLE
+25C6..25C7    ; Math # So   [2] BLACK DIAMOND..WHITE DIAMOND
+25CA..25CB    ; Math # So   [2] LOZENGE..WHITE CIRCLE
+25CF..25D3    ; Math # So   [5] BLACK CIRCLE..CIRCLE WITH UPPER HALF BLACK
+25E2          ; Math # So       BLACK LOWER RIGHT TRIANGLE
+25E4          ; Math # So       BLACK UPPER LEFT TRIANGLE
+25E7..25EC    ; Math # So   [6] SQUARE WITH LEFT HALF BLACK..WHITE UP-POINTING TRIANGLE WITH DOT
+25F8..25FF    ; Math # Sm   [8] UPPER LEFT TRIANGLE..LOWER RIGHT TRIANGLE
+2605..2606    ; Math # So   [2] BLACK STAR..WHITE STAR
+2640          ; Math # So       FEMALE SIGN
+2642          ; Math # So       MALE SIGN
+2660..2663    ; Math # So   [4] BLACK SPADE SUIT..BLACK CLUB SUIT
+266D..266E    ; Math # So   [2] MUSIC FLAT SIGN..MUSIC NATURAL SIGN
+266F          ; Math # Sm       MUSIC SHARP SIGN
+27C0..27C4    ; Math # Sm   [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
+27C5          ; Math # Ps       LEFT S-SHAPED BAG DELIMITER
+27C6          ; Math # Pe       RIGHT S-SHAPED BAG DELIMITER
+27C7..27CA    ; Math # Sm   [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
+27CC          ; Math # Sm       LONG DIVISION
+27CE..27E5    ; Math # Sm  [24] SQUARED LOGICAL AND..WHITE SQUARE WITH RIGHTWARDS TICK
+27E6          ; Math # Ps       MATHEMATICAL LEFT WHITE SQUARE BRACKET
+27E7          ; Math # Pe       MATHEMATICAL RIGHT WHITE SQUARE BRACKET
+27E8          ; Math # Ps       MATHEMATICAL LEFT ANGLE BRACKET
+27E9          ; Math # Pe       MATHEMATICAL RIGHT ANGLE BRACKET
+27EA          ; Math # Ps       MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
+27EB          ; Math # Pe       MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
+27EC          ; Math # Ps       MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
+27ED          ; Math # Pe       MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
+27EE          ; Math # Ps       MATHEMATICAL LEFT FLATTENED PARENTHESIS
+27EF          ; Math # Pe       MATHEMATICAL RIGHT FLATTENED PARENTHESIS
+27F0..27FF    ; Math # Sm  [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
+2900..2982    ; Math # Sm [131] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..Z NOTATION TYPE COLON
+2983          ; Math # Ps       LEFT WHITE CURLY BRACKET
+2984          ; Math # Pe       RIGHT WHITE CURLY BRACKET
+2985          ; Math # Ps       LEFT WHITE PARENTHESIS
+2986          ; Math # Pe       RIGHT WHITE PARENTHESIS
+2987          ; Math # Ps       Z NOTATION LEFT IMAGE BRACKET
+2988          ; Math # Pe       Z NOTATION RIGHT IMAGE BRACKET
+2989          ; Math # Ps       Z NOTATION LEFT BINDING BRACKET
+298A          ; Math # Pe       Z NOTATION RIGHT BINDING BRACKET
+298B          ; Math # Ps       LEFT SQUARE BRACKET WITH UNDERBAR
+298C          ; Math # Pe       RIGHT SQUARE BRACKET WITH UNDERBAR
+298D          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
+298E          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+298F          ; Math # Ps       LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
+2990          ; Math # Pe       RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
+2991          ; Math # Ps       LEFT ANGLE BRACKET WITH DOT
+2992          ; Math # Pe       RIGHT ANGLE BRACKET WITH DOT
+2993          ; Math # Ps       LEFT ARC LESS-THAN BRACKET
+2994          ; Math # Pe       RIGHT ARC GREATER-THAN BRACKET
+2995          ; Math # Ps       DOUBLE LEFT ARC GREATER-THAN BRACKET
+2996          ; Math # Pe       DOUBLE RIGHT ARC LESS-THAN BRACKET
+2997          ; Math # Ps       LEFT BLACK TORTOISE SHELL BRACKET
+2998          ; Math # Pe       RIGHT BLACK TORTOISE SHELL BRACKET
+2999..29D7    ; Math # Sm  [63] DOTTED FENCE..BLACK HOURGLASS
+29D8          ; Math # Ps       LEFT WIGGLY FENCE
+29D9          ; Math # Pe       RIGHT WIGGLY FENCE
+29DA          ; Math # Ps       LEFT DOUBLE WIGGLY FENCE
+29DB          ; Math # Pe       RIGHT DOUBLE WIGGLY FENCE
+29DC..29FB    ; Math # Sm  [32] INCOMPLETE INFINITY..TRIPLE PLUS
+29FC          ; Math # Ps       LEFT-POINTING CURVED ANGLE BRACKET
+29FD          ; Math # Pe       RIGHT-POINTING CURVED ANGLE BRACKET
+29FE..2AFF    ; Math # Sm [258] TINY..N-ARY WHITE VERTICAL BAR
+2B30..2B44    ; Math # Sm  [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
+2B47..2B4C    ; Math # Sm   [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
+FB29          ; Math # Sm       HEBREW LETTER ALTERNATIVE PLUS SIGN
+FE61          ; Math # Po       SMALL ASTERISK
+FE62          ; Math # Sm       SMALL PLUS SIGN
+FE63          ; Math # Pd       SMALL HYPHEN-MINUS
+FE64..FE66    ; Math # Sm   [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
+FE68          ; Math # Po       SMALL REVERSE SOLIDUS
+FF0B          ; Math # Sm       FULLWIDTH PLUS SIGN
+FF1C..FF1E    ; Math # Sm   [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
+FF3C          ; Math # Po       FULLWIDTH REVERSE SOLIDUS
+FF3E          ; Math # Sk       FULLWIDTH CIRCUMFLEX ACCENT
+FF5C          ; Math # Sm       FULLWIDTH VERTICAL LINE
+FF5E          ; Math # Sm       FULLWIDTH TILDE
+FFE2          ; Math # Sm       FULLWIDTH NOT SIGN
+FFE9..FFEC    ; Math # Sm   [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
+1D400..1D454  ; Math # L&  [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
+1D456..1D49C  ; Math # L&  [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
+1D49E..1D49F  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
+1D4A2         ; Math # L&       MATHEMATICAL SCRIPT CAPITAL G
+1D4A5..1D4A6  ; Math # L&   [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
+1D4A9..1D4AC  ; Math # L&   [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
+1D4AE..1D4B9  ; Math # L&  [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
+1D4BB         ; Math # L&       MATHEMATICAL SCRIPT SMALL F
+1D4BD..1D4C3  ; Math # L&   [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
+1D4C5..1D505  ; Math # L&  [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
+1D507..1D50A  ; Math # L&   [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
+1D50D..1D514  ; Math # L&   [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
+1D516..1D51C  ; Math # L&   [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
+1D51E..1D539  ; Math # L&  [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
+1D53B..1D53E  ; Math # L&   [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
+1D540..1D544  ; Math # L&   [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
+1D546         ; Math # L&       MATHEMATICAL DOUBLE-STRUCK CAPITAL O
+1D54A..1D550  ; Math # L&   [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
+1D552..1D6A5  ; Math # L& [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
+1D6A8..1D6C0  ; Math # L&  [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
+1D6C1         ; Math # Sm       MATHEMATICAL BOLD NABLA
+1D6C2..1D6DA  ; Math # L&  [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
+1D6DB         ; Math # Sm       MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
+1D6DC..1D6FA  ; Math # L&  [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
+1D6FB         ; Math # Sm       MATHEMATICAL ITALIC NABLA
+1D6FC..1D714  ; Math # L&  [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
+1D715         ; Math # Sm       MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
+1D716..1D734  ; Math # L&  [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
+1D735         ; Math # Sm       MATHEMATICAL BOLD ITALIC NABLA
+1D736..1D74E  ; Math # L&  [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
+1D74F         ; Math # Sm       MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
+1D750..1D76E  ; Math # L&  [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
+1D76F         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD NABLA
+1D770..1D788  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
+1D789         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
+1D78A..1D7A8  ; Math # L&  [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
+1D7A9         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
+1D7AA..1D7C2  ; Math # L&  [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
+1D7C3         ; Math # Sm       MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
+1D7C4..1D7CB  ; Math # L&   [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
+1D7CE..1D7FF  ; Math # Nd  [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+
+# Total code points: 2165
+
+# ================================================
+
+# Derived Property: Alphabetic
+#  Generated from: Lu+Ll+Lt+Lm+Lo+Nl + Other_Alphabetic
+
+0041..005A    ; Alphabetic # L&  [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
+0061..007A    ; Alphabetic # L&  [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
+00AA          ; Alphabetic # L&       FEMININE ORDINAL INDICATOR
+00B5          ; Alphabetic # L&       MICRO SIGN
+00BA          ; Alphabetic # L&       MASCULINE ORDINAL INDICATOR
+00C0..00D6    ; Alphabetic # L&  [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
+00D8..00F6    ; Alphabetic # L&  [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
+00F8..01BA    ; Alphabetic # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
+01BB          ; Alphabetic # Lo       LATIN LETTER TWO WITH STROKE
+01BC..01BF    ; Alphabetic # L&   [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
+01C0..01C3    ; Alphabetic # Lo   [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
+01C4..0293    ; Alphabetic # L& [208] LATIN CAPITAL LETTER DZ WITH CARON..LATIN SMALL LETTER EZH WITH CURL
+0294          ; Alphabetic # Lo       LATIN LETTER GLOTTAL STOP
+0295..02AF    ; Alphabetic # L&  [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
+02B0..02C1    ; Alphabetic # Lm  [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
+02C6..02D1    ; Alphabetic # Lm  [12] MODIFIER LETTER CIRCUMFLEX ACCENT..MODIFIER LETTER HALF TRIANGULAR COLON
+02E0..02E4    ; Alphabetic # Lm   [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
+02EC          ; Alphabetic # Lm       MODIFIER LETTER VOICING
+02EE          ; Alphabetic # Lm       MODIFIER LETTER DOUBLE APOSTROPHE
+0345          ; Alphabetic # Mn       COMBINING GREEK YPOGEGRAMMENI
+0370..0373    ; Alphabetic # L&   [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
+0374          ; Alphabetic # Lm       GREEK NUMERAL SIGN
+0376..0377    ; Alphabetic # L&   [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
+037A          ; Alphabetic # Lm       GREEK YPOGEGRAMMENI
+037B..037D    ; Alphabetic # L&   [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
+0386          ; Alphabetic # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
+0388..038A    ; Alphabetic # L&   [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
+038C          ; Alphabetic # L&       GREEK CAPITAL LETTER OMICRON WITH TONOS
+038E..03A1    ; Alphabetic # L&  [20] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK CAPITAL LETTER RHO
+03A3..03F5    ; Alphabetic # L&  [83] GREEK CAPITAL LETTER SIGMA..GREEK LUNATE EPSILON SYMBOL
+03F7..0481    ; Alphabetic # L& [139] GREEK CAPITAL LETTER SHO..CYRILLIC SMALL LETTER KOPPA
+048A..0527    ; Alphabetic # L& [158] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+0531..0556    ; Alphabetic # L&  [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
+0559          ; Alphabetic # Lm       ARMENIAN MODIFIER LETTER LEFT HALF RING
+0561..0587    ; Alphabetic # L&  [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
+05B0..05BD    ; Alphabetic # Mn  [14] HEBREW POINT SHEVA..HEBREW POINT METEG
+05BF          ; Alphabetic # Mn       HEBREW POINT RAFE
+05C1..05C2    ; Alphabetic # Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
+05C4..05C5    ; Alphabetic # Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
+05C7          ; Alphabetic # Mn       HEBREW POINT QAMATS QATAN
+05D0..05EA    ; Alphabetic # Lo  [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
+05F0..05F2    ; Alphabetic # Lo   [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
+0610..061A    ; Alphabetic # Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
+0620..063F    ; Alphabetic # Lo  [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
+0640          ; Alphabetic # Lm       ARABIC TATWEEL
+0641..064A    ; Alphabetic # Lo  [10] ARABIC LETTER FEH..ARABIC LETTER YEH
+064B..0657    ; Alphabetic # Mn  [13] ARABIC FATHATAN..ARABIC INVERTED DAMMA
+0659..065F    ; Alphabetic # Mn   [7] ARABIC ZWARAKAY..ARABIC WAVY HAMZA BELOW
+066E..066F    ; Alphabetic # Lo   [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
+0670          ; Alphabetic # Mn       ARABIC LETTER SUPERSCRIPT ALEF
+0671..06D3    ; Alphabetic # Lo  [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
+06D5          ; Alphabetic # Lo       ARABIC LETTER AE
+06D6..06DC    ; Alphabetic # Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
+06E1..06E4    ; Alphabetic # Mn   [4] ARABIC SMALL HIGH DOTLESS HEAD OF KHAH..ARABIC SMALL HIGH MADDA
+06E5..06E6    ; Alphabetic # Lm   [2] ARABIC SMALL WAW..ARABIC SMALL YEH
+06E7..06E8    ; Alphabetic # Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
+06ED          ; Alphabetic # Mn       ARABIC SMALL LOW MEEM
+06EE..06EF    ; Alphabetic # Lo   [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
+06FA..06FC    ; Alphabetic # Lo   [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
+06FF          ; Alphabetic # Lo       ARABIC LETTER HEH WITH INVERTED V
+0710          ; Alphabetic # Lo       SYRIAC LETTER ALAPH
+0711          ; Alphabetic # Mn       SYRIAC LETTER SUPERSCRIPT ALAPH
+0712..072F    ; Alphabetic # Lo  [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
+0730..073F    ; Alphabetic # Mn  [16] SYRIAC PTHAHA ABOVE..SYRIAC RWAHA
+074D..07A5    ; Alphabetic # Lo  [89] SYRIAC LETTER SOGDIAN ZHAIN..THAANA LETTER WAAVU
+07A6..07B0    ; Alphabetic # Mn  [11] THAANA ABAFILI..THAANA SUKUN
+07B1          ; Alphabetic # Lo       THAANA LETTER NAA
+07CA..07EA    ; Alphabetic # Lo  [33] NKO LETTER A..NKO LETTER JONA RA
+07F4..07F5    ; Alphabetic # Lm   [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
+07FA          ; Alphabetic # Lm       NKO LAJANYALAN
+0800..0815    ; Alphabetic # Lo  [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
+0816..0817    ; Alphabetic # Mn   [2] SAMARITAN MARK IN..SAMARITAN MARK IN-ALAF
+081A          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER EPENTHETIC YUT
+081B..0823    ; Alphabetic # Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
+0824          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER SHORT A
+0825..0827    ; Alphabetic # Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
+0828          ; Alphabetic # Lm       SAMARITAN MODIFIER LETTER I
+0829..082C    ; Alphabetic # Mn   [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+0840..0858    ; Alphabetic # Lo  [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
+0900..0902    ; Alphabetic # Mn   [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
+0903          ; Alphabetic # Mc       DEVANAGARI SIGN VISARGA
+0904..0939    ; Alphabetic # Lo  [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
+093A          ; Alphabetic # Mn       DEVANAGARI VOWEL SIGN OE
+093B          ; Alphabetic # Mc       DEVANAGARI VOWEL SIGN OOE
+093D          ; Alphabetic # Lo       DEVANAGARI SIGN AVAGRAHA
+093E..0940    ; Alphabetic # Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
+0941..0948    ; Alphabetic # Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
+0949..094C    ; Alphabetic # Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
+094E..094F    ; Alphabetic # Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
+0950          ; Alphabetic # Lo       DEVANAGARI OM
+0955..0957    ; Alphabetic # Mn   [3] DEVANAGARI VOWEL SIGN CANDRA LONG E..DEVANAGARI VOWEL SIGN UUE
+0958..0961    ; Alphabetic # Lo  [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
+0962..0963    ; Alphabetic # Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
+0971          ; Alphabetic # Lm       DEVANAGARI SIGN HIGH SPACING DOT
+0972..0977    ; Alphabetic # Lo   [6] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER UUE
+0979..097F    ; Alphabetic # Lo   [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
+0981          ; Alphabetic # Mn       BENGALI SIGN CANDRABINDU
+0982..0983    ; Alphabetic # Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
+0985..098C    ; Alphabetic # Lo   [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
+098F..0990    ; Alphabetic # Lo   [2] BENGALI LETTER E..BENGALI LETTER AI
+0993..09A8    ; Alphabetic # Lo  [22] BENGALI LETTER O..BENGALI LETTER NA
+09AA..09B0    ; Alphabetic # Lo   [7] BENGALI LETTER PA..BENGALI LETTER RA
+09B2          ; Alphabetic # Lo       BENGALI LETTER LA
+09B6..09B9    ; Alphabetic # Lo   [4] BENGALI LETTER SHA..BENGALI LETTER HA
+09BD          ; Alphabetic # Lo       BENGALI SIGN AVAGRAHA
+09BE..09C0    ; Alphabetic # Mc   [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
+09C1..09C4    ; Alphabetic # Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
+09C7..09C8    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
+09CB..09CC    ; Alphabetic # Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
+09CE          ; Alphabetic # Lo       BENGALI LETTER KHANDA TA
+09D7          ; Alphabetic # Mc       BENGALI AU LENGTH MARK
+09DC..09DD    ; Alphabetic # Lo   [2] BENGALI LETTER RRA..BENGALI LETTER RHA
+09DF..09E1    ; Alphabetic # Lo   [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
+09E2..09E3    ; Alphabetic # Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
+09F0..09F1    ; Alphabetic # Lo   [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
+0A01..0A02    ; Alphabetic # Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
+0A03          ; Alphabetic # Mc       GURMUKHI SIGN VISARGA
+0A05..0A0A    ; Alphabetic # Lo   [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
+0A0F..0A10    ; Alphabetic # Lo   [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
+0A13..0A28    ; Alphabetic # Lo  [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
+0A2A..0A30    ; Alphabetic # Lo   [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
+0A32..0A33    ; Alphabetic # Lo   [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
+0A35..0A36    ; Alphabetic # Lo   [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
+0A38..0A39    ; Alphabetic # Lo   [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
+0A3E..0A40    ; Alphabetic # Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
+0A41..0A42    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
+0A47..0A48    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
+0A4B..0A4C    ; Alphabetic # Mn   [2] GURMUKHI VOWEL SIGN OO..GURMUKHI VOWEL SIGN AU
+0A51          ; Alphabetic # Mn       GURMUKHI SIGN UDAAT
+0A59..0A5C    ; Alphabetic # Lo   [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA


More information about the pypy-commit mailing list