mirror of
https://github.com/UberGames/ioef.git
synced 2024-12-01 00:21:19 +00:00
Added Intel CC compatibility to vm_x86.c's inline asm.
Fixes Bugzilla #3338.
This commit is contained in:
parent
d56a093317
commit
bccd80e523
1 changed files with 14 additions and 8 deletions
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue