[pypy-svn] r22112 - in pypy/dist/pypy/translator/llvm: . module test

ericvrp at codespeak.net ericvrp at codespeak.net
Fri Jan 13 14:45:38 CET 2006


Author: ericvrp
Date: Fri Jan 13 14:45:28 2006
New Revision: 22112

Modified:
   pypy/dist/pypy/translator/llvm/build_llvm_module.py
   pypy/dist/pypy/translator/llvm/exception.py
   pypy/dist/pypy/translator/llvm/gc.py
   pypy/dist/pypy/translator/llvm/genllvm.py
   pypy/dist/pypy/translator/llvm/module/boehm.h
   pypy/dist/pypy/translator/llvm/module/excsupport.py
   pypy/dist/pypy/translator/llvm/module/genexterns.c
   pypy/dist/pypy/translator/llvm/module/support.py
   pypy/dist/pypy/translator/llvm/test/test_genllvm1.py
Log:
Fixes to be pass some tests on ia64.


Modified: pypy/dist/pypy/translator/llvm/build_llvm_module.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/build_llvm_module.py	(original)
+++ pypy/dist/pypy/translator/llvm/build_llvm_module.py	Fri Jan 13 14:45:28 2006
@@ -80,7 +80,7 @@
     #ball = str(dirpath.join('%s_all.bc' % b))
     #cmds.append("opt %s %s -f -o %s.bc" % (OPTIMIZATION_SWITCHES, ball, b))
 
-    use_gcc = sys.platform == 'linux2'
+    use_gcc = sys.platform == 'linux2' and sys.maxint == 2**31-1
     profile = False
     cleanup = False
 

Modified: pypy/dist/pypy/translator/llvm/exception.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/exception.py	(original)
+++ pypy/dist/pypy/translator/llvm/exception.py	Fri Jan 13 14:45:28 2006
@@ -168,6 +168,7 @@
         codewriter.unwind()
 
     def llc_options(self):
+    	import sys
     	if sys.platform == 'linux2' and sys.maxint == 2**63-1:
 		s = ' -enable-ia64-dag-isel'
 	else:
@@ -351,6 +352,7 @@
         codewriter.ret(returntype, self._noresult2(returntype))
 
     def llc_options(self):
+    	import sys
     	if sys.platform == 'linux2' and sys.maxint == 2**63-1:
 		s = '-enable-ia64-dag-isel'
 	else:

Modified: pypy/dist/pypy/translator/llvm/gc.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/gc.py	(original)
+++ pypy/dist/pypy/translator/llvm/gc.py	Fri Jan 13 14:45:28 2006
@@ -128,9 +128,9 @@
 %(targetvar)s = cast sbyte* %%malloc_Ptr%(cnt)s to %(type_)s
 ''' % locals()
 
-        if is_atomic:
+        if is_atomic:   #Boehm aligns on 8 byte boundaries
             t += '''
-        call ccc void %%llvm.memset(sbyte* %%malloc_Ptr%(cnt)s, ubyte 0, %(uword)s %%malloc_SizeU%(cnt)s, uint 0)
+        call ccc void %%llvm.memset(sbyte* %%malloc_Ptr%(cnt)s, ubyte 0, %(uword)s %%malloc_SizeU%(cnt)s, %(uword)s 8)
         ''' % locals()
         codewriter.write_lines(t)
 

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Fri Jan 13 14:45:28 2006
@@ -99,7 +99,12 @@
         codewriter, self.filename = self.create_codewriter()
         self._checkpoint('open file and create codewriter')        
         return codewriter
-    
+
+    def _set_wordsize(self, s):
+        s = s.replace('UWORD', self.db.get_machine_uword())
+        s = s.replace( 'WORD', self.db.get_machine_word())
+        return s
+
     def write_headers(self, codewriter):
         # write external function headers
         codewriter.header_comment('External Function Headers')
@@ -130,7 +135,7 @@
         codewriter.header_comment("Function Prototypes")
 
         # write external protos
-        codewriter.write_lines(extdeclarations)
+        codewriter.write_lines(self._set_wordsize(extdeclarations))
 
         # write node protos
         for typ_decl in self.db.getnodes():
@@ -144,7 +149,7 @@
         # write external function implementations
         codewriter.header_comment('External Function Implementation')
         codewriter.write_lines(self.llexterns_functions)
-        codewriter.write_lines(extfunctions)
+        codewriter.write_lines(self._set_wordsize(extfunctions))
         self.write_extern_impls(codewriter)
         self.write_setup_impl(codewriter)
         

Modified: pypy/dist/pypy/translator/llvm/module/boehm.h
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/boehm.h	(original)
+++ pypy/dist/pypy/translator/llvm/module/boehm.h	Fri Jan 13 14:45:28 2006
@@ -15,11 +15,11 @@
 
 #define USING_BOEHM_GC
 
-char *pypy_malloc(unsigned int size) {
+char *pypy_malloc(unsigned long size) {
   return GC_MALLOC(size);
 }
 
-char *pypy_malloc_atomic(unsigned int size) {
+char *pypy_malloc_atomic(unsigned long size) {
   return GC_MALLOC_ATOMIC(size);
 }
 

Modified: pypy/dist/pypy/translator/llvm/module/excsupport.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/excsupport.py	(original)
+++ pypy/dist/pypy/translator/llvm/module/excsupport.py	Fri Jan 13 14:45:28 2006
@@ -29,6 +29,10 @@
 }
 ''' % (RINGBUFFER_ENTRY_MAXSIZE, RINGBUFFER_OVERSIZE, RINGBUFFER_SIZE - 1)
 
+import sys
+if sys.maxint != 2**31-1: #XXX need to move the ringbuffer code to another level anyway
+	ringbuffer_decl = ringbuffer_code = ''
+
 invokeunwind_code = '''
 ccc %(returntype)s%%__entrypoint__%(entrypointname)s {
     %%result = invoke %(cconv)s %(returntype)s%%%(entrypointname)s to label %%no_exception except label %%exception

Modified: pypy/dist/pypy/translator/llvm/module/genexterns.c
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/genexterns.c	(original)
+++ pypy/dist/pypy/translator/llvm/module/genexterns.c	Fri Jan 13 14:45:28 2006
@@ -1,7 +1,7 @@
 
 // we hand craft these in module/support.ll
 char *RPyString_AsString(RPyString*);
-int RPyString_Size(RPyString*);	//XXX int->long
+long RPyString_Size(RPyString*);
 RPyString *RPyString_FromString(char *);
 int RPyExceptionOccurred(void);
 char* LLVM_RPython_StartupCode(void);
@@ -13,7 +13,7 @@
 RPyMODF_RESULT *ll_modf_result(double, double);
 RPySTAT_RESULT *ll_stat_result(int, int, int, int, int, int, int, int, int, int);
 void RPYTHON_RAISE_OSERROR(int error);
-RPyListOfString *_RPyListOfString_New(int);
+RPyListOfString *_RPyListOfString_New(long);
 void _RPyListOfString_SetItem(RPyListOfString *, int, RPyString *);
 
 // overflows/zeros/values raising operations
@@ -45,7 +45,7 @@
 }
 
 // raw malloc code
-char *raw_malloc(int size) {
+char *raw_malloc(long size) {
   return malloc(size);
 }
 
@@ -53,7 +53,7 @@
   free(ptr);
 }
 
-void raw_memcopy(char *ptr1, char *ptr2, int size) {
+void raw_memcopy(char *ptr1, char *ptr2, long size) {
   memcpy((void *) ptr2, (void *) ptr1, size);
 }
 

Modified: pypy/dist/pypy/translator/llvm/module/support.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/support.py	(original)
+++ pypy/dist/pypy/translator/llvm/module/support.py	Fri Jan 13 14:45:28 2006
@@ -4,8 +4,8 @@
 %last_exception_value = internal global %RPYTHON_EXCEPTION* null
 
 declare ccc uint %strlen(sbyte*)
-declare ccc void %llvm.memset(sbyte*, ubyte, uint, uint)
-declare ccc void %llvm.memcpy(sbyte*, sbyte*, uint, uint)
+declare ccc void %llvm.memset(sbyte*, ubyte, UWORD, UWORD)
+declare ccc void %llvm.memcpy(sbyte*, sbyte*, UWORD, UWORD)
 """
 
 extfunctions = """
@@ -15,10 +15,10 @@
     ret sbyte* %source1
 }
 
-internal fastcc int %RPyString_Size(%RPyString* %structstring) {
+internal fastcc WORD %RPyString_Size(%RPyString* %structstring) {
     %sizeptr = getelementptr %RPyString* %structstring, int 0, uint 1, uint 0
-    %size = load int* %sizeptr	;XXX int ->long
-    ret int %size
+    %size = load WORD* %sizeptr
+    ret WORD %size
 }
 
 internal fastcc int %RPyExceptionOccurred() {
@@ -30,12 +30,13 @@
 
 internal fastcc %RPyString* %RPyString_FromString(sbyte* %s) {
     %lenu      = call ccc uint %strlen(sbyte* %s)
-    %len       = cast uint %lenu to int
-    %rpy       = call fastcc %RPyString* %pypy_RPyString_New__Signed(int %len)
+    %lenuword  = cast uint %lenu to UWORD
+    %lenword   = cast uint %lenu to WORD
+    %rpy       = call fastcc %RPyString* %pypy_RPyString_New__Signed(WORD %lenword)
     %rpystrptr = getelementptr %RPyString* %rpy, int 0, uint 1, uint 1
     %rpystr    = cast [0 x sbyte]* %rpystrptr to sbyte*
 
-    call ccc void %llvm.memcpy(sbyte* %rpystr, sbyte* %s, uint %lenu, uint 0)
+    call ccc void %llvm.memcpy(sbyte* %rpystr, sbyte* %s, UWORD %lenuword, UWORD 0)
 
     ret %RPyString* %rpy
 }

Modified: pypy/dist/pypy/translator/llvm/test/test_genllvm1.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/test_genllvm1.py	(original)
+++ pypy/dist/pypy/translator/llvm/test/test_genllvm1.py	Fri Jan 13 14:45:28 2006
@@ -54,13 +54,17 @@
         assert shr(42,2) == llvmsnippet.shiftright(42,2)
 
 class TestFloat(object):
+    def _almost_equal(self, a, b):
+        _epsilon = 0.0000001
+        return a >= b - _epsilon and a <= b + _epsilon
+
     def test_float_f1(self):
         f = compile_function(llvmsnippet.float_f1, [float])
-        assert f(1.0) == 2.2
+        assert self._almost_equal(f(1.0), 2.2)
 
     def test_float_int_bool(self):
         f = compile_function(llvmsnippet.float_int_bool, [float])
-        assert f(3.0) == 9.0
+        assert self._almost_equal(f(3.0), 9.0)
 
 
 class TestString(object):



More information about the Pypy-commit mailing list