Author: Richard Plangger <planri...@gmail.com> Branch: ppc-vsx-support Changeset: r85176:ebfa9b3a75d6 Date: 2016-06-15 14:48 +0200 http://bitbucket.org/pypy/pypy/changeset/ebfa9b3a75d6/
Log: detect altivec at runtime on linux diff --git a/rpython/jit/backend/ppc/detect_feature.py b/rpython/jit/backend/ppc/detect_feature.py new file mode 100644 --- /dev/null +++ b/rpython/jit/backend/ppc/detect_feature.py @@ -0,0 +1,37 @@ +import sys +import struct +import platform +from rpython.rtyper.lltypesystem import lltype, rffi +from rpython.rtyper.tool import rffi_platform +from rpython.rlib.rmmap import alloc, free +from rpython.rlib.rstruct.runpack import runpack + +AT_HWCAP = rffi_platform.getconstantinteger('AT_HWCAP', '#include "linux/auxvec.h"') +AT_NULL = rffi_platform.getconstantinteger('AT_NULL', '#include "linux/auxvec.h"') +PPC_FEATURE_HAS_ALTIVEC = rffi_platform.getconstantinteger('PPC_FEATURE_HAS_ALTIVEC', + '#include "asm/cputable.h"') +SYSTEM = platform.system() + +def detect_vsx_linux(): + with open('/proc/self/auxv', 'rb') as fd: + while True: + buf = fd.read(16) + if not buf: + break + key, value = runpack("LL", buf) + if key == AT_HWCAP: + if value & PPC_FEATURE_HAS_ALTIVEC: + return True + if key == AT_NULL: + return False + return False + +def detect_vsx(): + if SYSTEM == 'Linux': + return detect_vsx_linux() + return False + +if __name__ == '__main__': + print 'The following extensions are supported:' + if detect_vsx(): + print ' - AltiVec' diff --git a/rpython/jit/backend/ppc/runner.py b/rpython/jit/backend/ppc/runner.py --- a/rpython/jit/backend/ppc/runner.py +++ b/rpython/jit/backend/ppc/runner.py @@ -11,6 +11,10 @@ class PPC_CPU(AbstractLLCPU): + vector_extension = False # may be set to true in setup + vector_register_size = 16 + vector_horizontal_operations = False + supports_floats = True # missing: supports_singlefloats @@ -38,6 +42,9 @@ def setup(self): self.assembler = AssemblerPPC(self) + if detect_vsx(): + self.vector_extension = True + # ??? self.vector_horizontal_operations = True @rgc.no_release_gil def setup_once(self): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit