|
|
| version 1.2, 2004/02/20 16:09:04 | version 1.9, 2011/01/15 17:17:23 |
|---|---|
| Line 1 | Line 1 |
| /* $Id$ */ | |
| /* | /* |
| * Copyright (c) 2003 NONAKA Kimihiro | * Copyright (c) 2003 NONAKA Kimihiro |
| * All rights reserved. | * All rights reserved. |
| Line 12 | Line 10 |
| * 2. Redistributions in binary form must reproduce the above copyright | * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the | * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. | * documentation and/or other materials provided with the distribution. |
| * 3. The name of the author may not be used to endorse or promote products | |
| * derived from this software without specific prior written permission. | |
| * | * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| Line 30 | Line 26 |
| #ifndef IA32_CPU_IA32XC_MCR__ | #ifndef IA32_CPU_IA32XC_MCR__ |
| #define IA32_CPU_IA32XC_MCR__ | #define IA32_CPU_IA32XC_MCR__ |
| #if defined(IA32_CROSS_CHECK) && defined(__GNUC__) && (defined(i386) || defined(__i386__)) | #if defined(IA32_CROSS_CHECK) && defined(GCC_CPU_ARCH_IA32) |
| #define IA32_CPU_ENABLE_XC | #define IA32_CPU_ENABLE_XC |
| Line 247 do { \ | Line 243 do { \ |
| UINT32 __s = (s); \ | UINT32 __s = (s); \ |
| UINT32 __d = (d); \ | UINT32 __d = (d); \ |
| UINT32 __r = __d; \ | UINT32 __r = __d; \ |
| DWORD __R; \ | UINT32 __R; \ |
| UINT8 __f; \ | UINT8 __f; \ |
| UINT8 __o; \ | UINT8 __o; \ |
| \ | \ |
| Line 1337 do { \ | Line 1333 do { \ |
| : "=m" (__r), "=m" (__h), "=m" (__f), "=m" (__o) \ | : "=m" (__r), "=m" (__h), "=m" (__f), "=m" (__o) \ |
| : "m" (__d), "m" (__s) \ | : "m" (__d), "m" (__s) \ |
| : "eax", "edx"); \ | : "eax", "edx"); \ |
| if (((DWORD)__R != __r) || \ | if (((UINT32)__R != __r) || \ |
| ((DWORD)(__R >> 32) != __h) || \ | ((UINT32)(__R >> 32) != __h) || \ |
| (((__f ^ CPU_FLAGL) & C_FLAG) != 0) || \ | (((__f ^ CPU_FLAGL) & C_FLAG) != 0) || \ |
| (!CPU_OV != !__o)) { \ | (!CPU_OV != !__o)) { \ |
| ia32_warning("XC_DWORD_IMUL: __s = %08x, __d = %08x",__s, __d);\ | ia32_warning("XC_DWORD_IMUL: __s = %08x, __d = %08x",__s, __d);\ |
| ia32_warning("XC_DWORD_IMUL: __Rl = %08x, __r = %08x", \ | ia32_warning("XC_DWORD_IMUL: __Rl = %08x, __r = %08x", \ |
| (DWORD)__R, __r); \ | (UINT32)__R, __r); \ |
| ia32_warning("XC_DWORD_IMUL: __Rh == %08x, __h == %08x", \ | ia32_warning("XC_DWORD_IMUL: __Rh == %08x, __h == %08x", \ |
| (DWORD)(__R >> 32), __h); \ | (UINT32)(__R >> 32), __h); \ |
| ia32_warning("XC_DWORD_IMUL: CPU_FLAGL = %02x, __f = %02x, " \ | ia32_warning("XC_DWORD_IMUL: CPU_FLAGL = %02x, __f = %02x, " \ |
| "mask = %02x", CPU_FLAGL, __f, C_FLAG); \ | "mask = %02x", CPU_FLAGL, __f, C_FLAG); \ |
| ia32_warning("XC_DWORD_IMUL: CPU_OV = %s, __o = %s", \ | ia32_warning("XC_DWORD_IMUL: CPU_OV = %s, __o = %s", \ |
| CPU_OV ? "OV" : "NV", __o ? "OV" : "NV"); \ | CPU_OV ? "OV" : "NV", __o ? "OV" : "NV"); \ |
| assert((DWORD)__R == __r); \ | assert((UINT32)__R == __r); \ |
| assert((DWORD)(__R >> 32) == __h); \ | assert((UINT32)(__R >> 32) == __h); \ |
| assert(((__f ^ CPU_FLAGL) & C_FLAG) == 0); \ | assert(((__f ^ CPU_FLAGL) & C_FLAG) == 0); \ |
| assert(!CPU_OV == !__o); \ | assert(!CPU_OV == !__o); \ |
| } \ | } \ |
| Line 1599 do { \ | Line 1595 do { \ |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| #define ADD_BYTE(r, d, s) XC_ADD_BYTE(r, d, s) | #define BYTE_ADD(r, d, s) XC_ADD_BYTE(r, d, s) |
| #define ADD_WORD(r, d, s) XC_ADD_WORD(r, d, s) | #define WORD_ADD(r, d, s) XC_ADD_WORD(r, d, s) |
| #define ADD_DWORD(r, d, s) XC_ADD_DWORD(r, d, s) | #define DWORD_ADD(r, d, s) XC_ADD_DWORD(r, d, s) |
| #define OR_BYTE(d, s) XC_OR_BYTE(d, s) | #define BYTE_OR(d, s) XC_OR_BYTE(d, s) |
| #define OR_WORD(d, s) XC_OR_WORD(d, s) | #define WORD_OR(d, s) XC_OR_WORD(d, s) |
| #define OR_DWORD(d, s) XC_OR_DWORD(d, s) | #define DWORD_OR(d, s) XC_OR_DWORD(d, s) |
| #define ADC_BYTE(r, d, s) XC_ADC_BYTE(r, d, s) | #define BYTE_ADC(r, d, s) XC_ADC_BYTE(r, d, s) |
| #define ADC_WORD(r, d, s) XC_ADC_WORD(r, d, s) | #define WORD_ADC(r, d, s) XC_ADC_WORD(r, d, s) |
| #define ADC_DWORD(r, d, s) XC_ADC_DWORD(r, d, s) | #define DWORD_ADC(r, d, s) XC_ADC_DWORD(r, d, s) |
| #define BYTE_SBB(r, d, s) XC_BYTE_SBB(r, d, s) | #define BYTE_SBB(r, d, s) XC_BYTE_SBB(r, d, s) |
| #define WORD_SBB(r, d, s) XC_WORD_SBB(r, d, s) | #define WORD_SBB(r, d, s) XC_WORD_SBB(r, d, s) |
| #define DWORD_SBB(r, d, s) XC_DWORD_SBB(r, d, s) | #define DWORD_SBB(r, d, s) XC_DWORD_SBB(r, d, s) |
| #define AND_BYTE(d, s) XC_AND_BYTE(d, s) | #define BYTE_AND(d, s) XC_AND_BYTE(d, s) |
| #define AND_WORD(d, s) XC_AND_WORD(d, s) | #define WORD_AND(d, s) XC_AND_WORD(d, s) |
| #define AND_DWORD(d, s) XC_AND_DWORD(d, s) | #define DWORD_AND(d, s) XC_AND_DWORD(d, s) |
| #define BYTE_SUB(r, d, s) XC_BYTE_SUB(r, d, s) | #define BYTE_SUB(r, d, s) XC_BYTE_SUB(r, d, s) |
| #define WORD_SUB(r, d, s) XC_WORD_SUB(r, d, s) | #define WORD_SUB(r, d, s) XC_WORD_SUB(r, d, s) |
| #define DWORD_SUB(r, d, s) XC_DWORD_SUB(r, d, s) | #define DWORD_SUB(r, d, s) XC_DWORD_SUB(r, d, s) |
| Line 1636 do { \ | Line 1632 do { \ |
| #define WORD_DEC(s) XC_WORD_DEC(s) | #define WORD_DEC(s) XC_WORD_DEC(s) |
| #define DWORD_DEC(s) XC_DWORD_DEC(s) | #define DWORD_DEC(s) XC_DWORD_DEC(s) |
| #define ADD_BYTE(r, d, s) XC_ADD_BYTE(r, d, s) | |
| #define ADD_WORD(r, d, s) XC_ADD_WORD(r, d, s) | |
| #define ADD_DWORD(r, d, s) XC_ADD_DWORD(r, d, s) | |
| #define OR_BYTE(d, s) XC_OR_BYTE(d, s) | |
| #define OR_WORD(d, s) XC_OR_WORD(d, s) | |
| #define OR_DWORD(d, s) XC_OR_DWORD(d, s) | |
| #define ADC_BYTE(r, d, s) XC_ADC_BYTE(r, d, s) | |
| #define ADC_WORD(r, d, s) XC_ADC_WORD(r, d, s) | |
| #define ADC_DWORD(r, d, s) XC_ADC_DWORD(r, d, s) | |
| #define AND_BYTE(d, s) XC_AND_BYTE(d, s) | |
| #define AND_WORD(d, s) XC_AND_WORD(d, s) | |
| #define AND_DWORD(d, s) XC_AND_DWORD(d, s) | |
| #define XC_STORE_FLAGL() UINT8 __xc_flagl = CPU_FLAGL | #define XC_STORE_FLAGL() UINT8 __xc_flagl = CPU_FLAGL |
| #elif defined(IA32_CROSS_CHECK) && defined(_MSC_VER) | |
| #include "ia32xc_msc.mcr" | |
| #else /* !(IA32_CROSS_CHECK && __GNUC__ && (i386) || __i386__)) */ | #else /* !(IA32_CROSS_CHECK && __GNUC__ && (i386) || __i386__)) */ |
| #define ADD_BYTE(r, d, s) _ADD_BYTE(r, d, s) | #define BYTE_ADD(r, d, s) _ADD_BYTE(r, d, s) |
| #define ADD_WORD(r, d, s) _ADD_WORD(r, d, s) | #define WORD_ADD(r, d, s) _ADD_WORD(r, d, s) |
| #define ADD_DWORD(r, d, s) _ADD_DWORD(r, d, s) | #define DWORD_ADD(r, d, s) _ADD_DWORD(r, d, s) |
| #define OR_BYTE(d, s) _OR_BYTE(d, s) | #define BYTE_OR(d, s) _OR_BYTE(d, s) |
| #define OR_WORD(d, s) _OR_WORD(d, s) | #define WORD_OR(d, s) _OR_WORD(d, s) |
| #define OR_DWORD(d, s) _OR_DWORD(d, s) | #define DWORD_OR(d, s) _OR_DWORD(d, s) |
| #define ADC_BYTE(r, d, s) _ADC_BYTE(r, d, s) | #define BYTE_ADC(r, d, s) _ADC_BYTE(r, d, s) |
| #define ADC_WORD(r, d, s) _ADC_WORD(r, d, s) | #define WORD_ADC(r, d, s) _ADC_WORD(r, d, s) |
| #define ADC_DWORD(r, d, s) _ADC_DWORD(r, d, s) | #define DWORD_ADC(r, d, s) _ADC_DWORD(r, d, s) |
| #define BYTE_SBB(r, d, s) _BYTE_SBB(r, d, s) | #define BYTE_SBB(r, d, s) _BYTE_SBB(r, d, s) |
| #define WORD_SBB(r, d, s) _WORD_SBB(r, d, s) | #define WORD_SBB(r, d, s) _WORD_SBB(r, d, s) |
| #define DWORD_SBB(r, d, s) _DWORD_SBB(r, d, s) | #define DWORD_SBB(r, d, s) _DWORD_SBB(r, d, s) |
| #define AND_BYTE(d, s) _AND_BYTE(d, s) | #define BYTE_AND(d, s) _AND_BYTE(d, s) |
| #define AND_WORD(d, s) _AND_WORD(d, s) | #define WORD_AND(d, s) _AND_WORD(d, s) |
| #define ANDDWORD(d, s) _AND_DWORD(d, s) | #define DWORD_AND(d, s) _AND_DWORD(d, s) |
| #define BYT_E_SUB(r, d, s) _BYTE_SUB(r, d, s) | #define BYTE_SUB(r, d, s) _BYTE_SUB(r, d, s) |
| #define WORD_SUB(r, d, s) _WORD_SUB(r, d, s) | #define WORD_SUB(r, d, s) _WORD_SUB(r, d, s) |
| #define DWORD_SUB(r, d, s) _DWORD_SUB(r, d, s) | #define DWORD_SUB(r, d, s) _DWORD_SUB(r, d, s) |
| #define BYTE_XOR(d, s) _BYTE_XOR(d, s) | #define BYTE_XOR(d, s) _BYTE_XOR(d, s) |
| Line 1677 do { \ | Line 1690 do { \ |
| #define WORD_DEC(s) _WORD_DEC(s) | #define WORD_DEC(s) _WORD_DEC(s) |
| #define DWORD_DEC(s) _DWORD_DEC(s) | #define DWORD_DEC(s) _DWORD_DEC(s) |
| #define ADD_BYTE(r, d, s) _ADD_BYTE(r, d, s) | |
| #define ADD_WORD(r, d, s) _ADD_WORD(r, d, s) | |
| #define ADD_DWORD(r, d, s) _ADD_DWORD(r, d, s) | |
| #define OR_BYTE(d, s) _OR_BYTE(d, s) | |
| #define OR_WORD(d, s) _OR_WORD(d, s) | |
| #define OR_DWORD(d, s) _OR_DWORD(d, s) | |
| #define ADC_BYTE(r, d, s) _ADC_BYTE(r, d, s) | |
| #define ADC_WORD(r, d, s) _ADC_WORD(r, d, s) | |
| #define ADC_DWORD(r, d, s) _ADC_DWORD(r, d, s) | |
| #define AND_BYTE(d, s) _AND_BYTE(d, s) | |
| #define AND_WORD(d, s) _AND_WORD(d, s) | |
| #define AND_DWORD(d, s) _AND_DWORD(d, s) | |
| #define XC_STORE_FLAGL() | #define XC_STORE_FLAGL() |
| #endif /* IA32_CROSS_CHECK && __GNUC__ && (i386) || __i386__) */ | #endif /* IA32_CROSS_CHECK && GCC_CPU_ARCH_IA32 */ |
| #endif /* IA32_CPU_IA32_MCR__ */ | #endif /* IA32_CPU_IA32_MCR__ */ |