Hi Daniel,

Could you split the patch into two:

1) Older solaris support

I think an #if based soultion could work here:

#if defined(old_solaris)
  asm for old solaris
#else
  original code
#endif

Or it would be even better, if you could find a system call for cache flush, 
and get rid the assembly code in the old solaris case. This may be supported 
there:

http://man-wiki.net/index.php/2:cacheflush

(The typos could be added to this patch, it should be the smaller)

2) Intel C compiler

The cpuid on 64 bit should be look like this:

#if defined (__MSC_VER)
#if _MSC_VER >= 1400
__cpuid();
#else
#error An implementation of CPUID is required.
#endif
#elif GCC, IntelC etc.
AT&T syntax with __asm__
#endif

The ABI is the Application Binary Interface. It tells how a binary function 
calls another. Which registers are saved, which are not, how the arguments are 
passed (these are called calling conventions).

On x86/32 many calling conventions are used. stdcall, ccall, fastcall. SLJIT 
supports two types: the stdcall and the GCC style fastcall (when 
SLJIT_X86_32_FASTCALL is defined), which is also used by msvc. E.g. borland C 
compiler uses another type of fastcall, but it supports MS style fast calls, so 
SLJIT_CALL is defined as __msfastcall, and SLJIT_X86_32_FASTCALL is defined as 
1. (Fast call is usually faster than standard call, since it passes the first 
two arguments in ecx:edx). Thus, getting rid of __stdcall just cause crashes. 
You need to find which calling types are supported by ICC, and use either the 
standard or the GCC style fastcall type. 

Regards,
Zoltan


-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to