[pypy-svn] r66860 - in pypy/branch/pyjitpl5/pypy/translator/c/gcc: . test test/darwin

pedronis at codespeak.net pedronis at codespeak.net
Sun Aug 16 19:00:00 CEST 2009


Author: pedronis
Date: Sun Aug 16 18:59:59 2009
New Revision: 66860

Modified:
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py
   pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py
Log:
WIP mainly deal with static functions properly and ignore our own handcrafted assembler



Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track0.s	Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_clear_large_memory_chunk
 _pypy_g_clear_large_memory_chunk:
 L80:
 	pushl	%ebp

Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track1.s	Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_clear_large_memory_chunk
 _pypy_g_clear_large_memory_chunk:
 L137:
 	pushl	%ebp

Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track2.s	Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_populate
 _pypy_g_populate:
 L2135:
 	subl	$76, %esp

Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/darwin/track8.s	Sun Aug 16 18:59:59 2009
@@ -1,4 +1,3 @@
-.globl _pypy_g_foo
 _pypy_g_foo:
 L1506:
 	subl	$140, %esp

Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/test/test_trackgcroot.py	Sun Aug 16 18:59:59 2009
@@ -76,8 +76,12 @@
 \t.align 4,0x90
 .globl _pypy_g_ll_str__StringR_Ptr_GcStruct_rpy_strin_rpy_strin
 _pypy_g_ll_str__StringR_Ptr_GcStruct_rpy_strin_rpy_strin:
+L0:
 \tFOO
 \t.align 4,0x90
+_static:
+\tSTATIC
+\t.align 4,0x90
 .globl _pypy_g_ll_issubclass__object_vtablePtr_object_vtablePtr
 _pypy_g_ll_issubclass__object_vtablePtr_object_vtablePtr:
 \tBAR
@@ -92,13 +96,14 @@
 """
     lines = source.splitlines(True)
     parts = list(GcRootTracker(format='darwin').find_functions(iter(lines)))
-    assert len(parts) == 6
-    assert parts[0] == (False, lines[:2])
-    assert parts[1] == (True,  lines[2:6])
-    assert parts[2] == (True,  lines[6:9])
-    assert parts[3] == (False, lines[9:13])
-    assert parts[4] == (True,  lines[13:16])
-    assert parts[5] == (False, lines[16:])
+    assert len(parts) == 7
+    assert parts[0] == (False, lines[:3])
+    assert parts[1] == (True,  lines[3:7])
+    assert parts[2] == (True,  lines[7:11])
+    assert parts[3] == (True,  lines[11:13])
+    assert parts[4] == (False, lines[13:18])
+    assert parts[5] == (True,  lines[18:20])
+    assert parts[6] == (False, lines[20:])
  
 def test_computegcmaptable():
     tests = []

Modified: pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py	(original)
+++ pypy/branch/pyjitpl5/pypy/translator/c/gcc/trackgcroot.py	Sun Aug 16 18:59:59 2009
@@ -7,14 +7,14 @@
 
 # darwin
 r_textstart            = re.compile(r"\t.text\s*$")
-r_sectionstart         = re.compile(r"\t.(section|cstring|data).*$")
-r_functionstart_darwin = re.compile(r".globl\s+(\w+)\s*$")
+r_sectionstart         = re.compile(r"\t.(section|cstring|const|data).*$")
+r_functionstart_darwin = re.compile(r"_(\w+):\s*$")
 
 # inside functions
 r_label         = re.compile(r"([.]?\w+)[:]\s*$")
 r_globl         = re.compile(r"\t[.]globl\t(\w+)\s*$")
 r_insn          = re.compile(r"\t([a-z]\w*)\s")
-r_jump          = re.compile(r"\tj\w+\s+([.]?\w+)\s*$")
+r_jump          = re.compile(r"\tj\w+\s+([.]?[\w$]+)\s*$")
 OPERAND         =           r'(?:[-\w$%+.:@"]+(?:[(][\w%,]+[)])?|[(][\w%,]+[)])'
 r_unaryinsn     = re.compile(r"\t[a-z]\w*\s+("+OPERAND+")\s*$")
 r_unaryinsn_star= re.compile(r"\t[a-z]\w*\s+([*]"+OPERAND+")\s*$")
@@ -140,9 +140,9 @@
         functionlines = []
         in_text = False
         in_function = False
-        for line in iterlines:
+        for n, line in enumerate(iterlines):
             if r_textstart.match(line):
-                assert not in_text, "unexpected repeated .text start"
+                assert not in_text, "unexpected repeated .text start: %d" % n
                 in_text = True
             elif r_sectionstart.match(line):
                 if in_function:
@@ -160,6 +160,8 @@
             yield in_function, functionlines
 
     def process(self, iterlines, newfile, entrypoint='main', filename='?'):
+        if self.format == 'darwin':
+            entrypoint = '_' + entrypoint
         for in_function, lines in self.find_functions(iterlines):
             if in_function:
                 lines = self.process_function(lines, entrypoint, filename)
@@ -170,6 +172,7 @@
     def process_function(self, lines, entrypoint, filename):
         tracker = FunctionGcRootTracker(lines, filetag=getidentifier(filename),
                                         format=self.format)
+        print >> sys.stderr, entrypoint
         tracker.is_main = tracker.funcname == entrypoint
         if self.verbose == 1:
             sys.stderr.write('.')
@@ -200,7 +203,7 @@
             assert funcname == match.group(2)
         elif format == 'darwin':
             match = r_functionstart_darwin.match(lines[0])
-            funcname = match.group(1)
+            funcname = '_'+match.group(1)
         else:
             assert False, "unknown format: %s" % format
  
@@ -280,13 +283,13 @@
 
     def parse_instructions(self):
         self.insns = [InsnFunctionStart()]
-        in_APP = False
+        ignore_insns = False
         for lineno, line in enumerate(self.lines):
             self.currentlineno = lineno
             insn = []
             match = r_insn.match(line)
             if match:
-                if not in_APP:
+                if not ignore_insns:
                     opname = match.group(1)
                     try:
                         meth = getattr(self, 'visit_' + opname)
@@ -295,10 +298,10 @@
                     insn = meth(line)
             elif r_gcroot_marker.match(line):
                 insn = self._visit_gcroot_marker(line)
-            elif line == '#APP\n':
-                in_APP = True
-            elif line == '#NO_APP\n':
-                in_APP = False
+            elif line == '\t/* ignore_in_trackgcroot */\n':
+                ignore_insns = True
+            elif line == '\t/* end_ignore_in_trackgcroot */\n':
+                ignore_insns = False
             else:
                 match = r_label.match(line)
                 if match:
@@ -478,7 +481,7 @@
         'rep', 'movs', 'lods', 'stos', 'scas', 'cwtl', 'prefetch',
         # floating-point operations cannot produce GC pointers
         'f',
-        'cvt',  # sse2
+        'cvt', 'ucomi', 'subs', 'subp' , 'xorp', 'movap', # sse2
         # arithmetic operations should not produce GC pointers
         'inc', 'dec', 'not', 'neg', 'or', 'and', 'sbb', 'adc',
         'shl', 'shr', 'sal', 'sar', 'rol', 'ror', 'mul', 'imul', 'div', 'idiv',
@@ -1070,7 +1073,11 @@
             output_raw_table = True
         else:
             break
-    tracker = GcRootTracker(verbose=verbose, shuffle=shuffle)
+    if sys.platform == 'darwin':
+        format = 'darwin'
+    else:
+        format = 'elf'
+    tracker = GcRootTracker(verbose=verbose, shuffle=shuffle, format=format)
     for fn in sys.argv[1:]:
         tmpfn = fn + '.TMP'
         f = open(fn, 'r')



More information about the Pypy-commit mailing list