Added Intel CC compatibility to vm_x86.c's inline asm.

Fixes Bugzilla #3338.
This commit is contained in:
Ryan C. Gordon 2009-09-15 03:42:29 +00:00
parent d56a093317
commit bccd80e523

View file

@ -176,9 +176,15 @@ _asm {
#else //!_MSC_VER #else //!_MSC_VER
#if defined(__MINGW32__) || defined(MACOS_X) // _ is prepended to compiled symbols #if defined(__MINGW32__) || defined(MACOS_X) // _ is prepended to compiled symbols
# define CMANG(sym) "_"#sym #define CMANGVAR(sym) "_"#sym
#define CMANGFUNC(sym) "_"#sym
#else #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 #endif
static void __attribute__((cdecl, used)) CallAsmCall(int const syscallNum, static void __attribute__((cdecl, used)) CallAsmCall(int const syscallNum,
@ -199,18 +205,18 @@ __asm__(
".text\n\t" ".text\n\t"
".p2align 4,,15\n\t" ".p2align 4,,15\n\t"
#if defined __ELF__ #if defined __ELF__
".type " CMANG(AsmCall) ", @function\n" ".type " CMANGFUNC(AsmCall) ", @function\n"
#endif #endif
CMANG(AsmCall) ":\n\t" CMANGFUNC(AsmCall) ":\n\t"
"movl (%edi), %eax\n\t" "movl (%edi), %eax\n\t"
"subl $4, %edi\n\t" "subl $4, %edi\n\t"
"testl %eax, %eax\n\t" "testl %eax, %eax\n\t"
"jl 0f\n\t" "jl 0f\n\t"
"shll $2, %eax\n\t" "shll $2, %eax\n\t"
"addl " CMANG(instructionPointers) ", %eax\n\t" "addl " CMANGVAR(instructionPointers) ", %eax\n\t"
"call *(%eax)\n\t" "call *(%eax)\n\t"
"movl (%edi), %eax\n\t" "movl (%edi), %eax\n\t"
"andl " CMANG(callMask) ", %eax\n\t" "andl " CMANGVAR(callMask) ", %eax\n\t"
"ret\n" "ret\n"
"0:\n\t" // system call "0:\n\t" // system call
"notl %eax\n\t" "notl %eax\n\t"
@ -221,7 +227,7 @@ __asm__(
"pushl %edi\n\t" // opStack "pushl %edi\n\t" // opStack
"pushl %esi\n\t" // programStack "pushl %esi\n\t" // programStack
"pushl %eax\n\t" // syscallNum "pushl %eax\n\t" // syscallNum
"call " CMANG(CallAsmCall) "\n\t" "call " CMANGFUNC(CallAsmCall) "\n\t"
"addl $12, %esp\n\t" "addl $12, %esp\n\t"
"popl %ecx\n\t" "popl %ecx\n\t"
"movl %ebp, %esp\n\t" "movl %ebp, %esp\n\t"
@ -229,7 +235,7 @@ __asm__(
"addl $4, %edi\n\t" "addl $4, %edi\n\t"
"ret\n\t" "ret\n\t"
#if defined __ELF__ #if defined __ELF__
".size " CMANG(AsmCall)", .-" CMANG(AsmCall) ".size " CMANGFUNC(AsmCall)", .-" CMANGFUNC(AsmCall)
#endif #endif
); );