diff options
Diffstat (limited to 'code')
| -rw-r--r-- | code/qcommon/vm_x86.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/code/qcommon/vm_x86.c b/code/qcommon/vm_x86.c index 7dee658..64c2ed4 100644 --- a/code/qcommon/vm_x86.c +++ b/code/qcommon/vm_x86.c @@ -176,9 +176,15 @@ _asm {  #else //!_MSC_VER  #if defined(__MINGW32__) || defined(MACOS_X) // _ is prepended to compiled symbols -#	define CMANG(sym) "_"#sym +#define CMANGVAR(sym) "_"#sym +#define CMANGFUNC(sym) "_"#sym  #else -#	define CMANG(sym) #sym +#if defined(__ICC) && (__ICC >= 1000) +#define CMANGVAR(sym) #sym".0" +#define CMANGFUNC(sym) #sym +#else +#define CMANGVAR(sym) #sym +#define CMANGFUNC(sym) #sym  #endif  static void __attribute__((cdecl, used)) CallAsmCall(int const syscallNum, @@ -199,18 +205,18 @@ __asm__(  	".text\n\t"  	".p2align 4,,15\n\t"  #if defined __ELF__ -	".type " CMANG(AsmCall) ", @function\n" +	".type " CMANGFUNC(AsmCall) ", @function\n"  #endif -	CMANG(AsmCall) ":\n\t" +	CMANGFUNC(AsmCall) ":\n\t"  	"movl  (%edi), %eax\n\t"  	"subl  $4, %edi\n\t"  	"testl %eax, %eax\n\t"  	"jl    0f\n\t"  	"shll  $2, %eax\n\t" -	"addl  " CMANG(instructionPointers) ", %eax\n\t" +	"addl  " CMANGVAR(instructionPointers) ", %eax\n\t"  	"call  *(%eax)\n\t"  	"movl  (%edi), %eax\n\t" -	"andl  " CMANG(callMask) ", %eax\n\t" +	"andl  " CMANGVAR(callMask) ", %eax\n\t"  	"ret\n"  	"0:\n\t" // system call  	"notl  %eax\n\t" @@ -221,7 +227,7 @@ __asm__(  	"pushl %edi\n\t" // opStack  	"pushl %esi\n\t" // programStack  	"pushl %eax\n\t" // syscallNum -	"call  " CMANG(CallAsmCall) "\n\t" +	"call  " CMANGFUNC(CallAsmCall) "\n\t"  	"addl  $12, %esp\n\t"  	"popl  %ecx\n\t"  	"movl  %ebp, %esp\n\t" @@ -229,7 +235,7 @@ __asm__(  	"addl  $4, %edi\n\t"  	"ret\n\t"  #if defined __ELF__ -	".size " CMANG(AsmCall)", .-" CMANG(AsmCall) +	".size " CMANGFUNC(AsmCall)", .-" CMANGFUNC(AsmCall)  #endif  );  | 
