[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