--- np2/i386c/ia32/instructions/shift_rotate.mcr 2003/12/08 00:55:32 1.1 +++ np2/i386c/ia32/instructions/shift_rotate.mcr 2004/03/10 23:01:08 1.8 @@ -1,4 +1,4 @@ -/* $Id: shift_rotate.mcr,v 1.1 2003/12/08 00:55:32 yui Exp $ */ +/* $Id: shift_rotate.mcr,v 1.8 2004/03/10 23:01:08 yui Exp $ */ /* * Copyright (c) 2003 NONAKA Kimihiro @@ -30,46 +30,51 @@ #ifndef IA32_CPU_SHIFT_ROTATE_MCR__ #define IA32_CPU_SHIFT_ROTATE_MCR__ +/* Pentium!!! - シフトカウント != 1の場合はOVは不変らすい */ + /* * SAR */ #define _BYTE_SAR1(d, s) \ do { \ - (d) = (BYTE)(((SBYTE)(s)) >> 1); \ + (d) = (UINT8)(((SINT8)(s)) >> 1); \ CPU_OV = 0; \ - CPU_FLAGL = (BYTE)(szpcflag[(BYTE)(d)] | A_FLAG | ((s) & 1)); \ + CPU_FLAGL = (UINT8)(szpcflag[(UINT8)(d)] | A_FLAG | ((s) & 1)); \ } while (/*CONSTCOND*/ 0) #define _WORD_SAR1(d, s) \ do { \ - (d) = (WORD)(((SWORD)(s)) >> 1); \ + (d) = (UINT16)(((SINT16)(s)) >> 1); \ CPU_OV = 0; \ - CPU_FLAGL = (BYTE)(szpflag_w[(WORD)(d)] | A_FLAG | ((s) & 1)); \ + CPU_FLAGL = (UINT8)(szpflag_w[(UINT16)(d)] | A_FLAG | ((s) & 1)); \ } while (/*CONSTCOND*/ 0) #define _DWORD_SAR1(d, s) \ do { \ - (d) = (DWORD)(((SDWORD)(s)) >> 1); \ + (d) = (UINT32)(((SINT32)(s)) >> 1); \ CPU_OV = 0; \ - CPU_FLAGL = (BYTE)(A_FLAG | ((s) & 1)); /* C_FLAG */ \ + CPU_FLAGL = (UINT8)(A_FLAG | ((s) & 1)); /* C_FLAG */ \ if ((d) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((d) & 0x80000000) { \ + } else if ((d) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ - CPU_FLAGL |= (szpcflag[(BYTE)(d)] & P_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(d)] & P_FLAG); \ } while (/*CONSTCOND*/ 0) #define _BYTE_SARCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ - (s) = ((SBYTE)(s)) >> ((c) - 1); \ - CPU_FLAGL = (BYTE)((s) & 1); /* C_FLAG */ \ - (s) = (BYTE)(((SBYTE)(s)) >> 1); \ - CPU_OV = 0; \ - CPU_FLAGL |= (szpcflag[(BYTE)(s)] | A_FLAG); \ + if ((c)) { \ + (c)--; \ + if ((c)) { \ + (s) = ((SINT8)(s)) >> (c); \ + } else { \ + CPU_OV = 0; \ + } \ + CPU_FLAGL = (UINT8)((s) & 1); /* C_FLAG */ \ + (s) = (UINT8)(((SINT8)(s)) >> 1); \ + CPU_FLAGL |= (szpcflag[(UINT8)(s)] | A_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -77,12 +82,16 @@ do { \ #define _WORD_SARCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ - (s) = ((SWORD)(s)) >> ((c) - 1); \ - CPU_FLAGL = (BYTE)((s) & 1); /* C_FLAG */ \ - (s) = (WORD)(((SWORD)(s)) >> 1); \ - CPU_OV = 0; \ - CPU_FLAGL |= szpflag_w[(WORD)(s)]; \ + if ((c)) { \ + (c)--; \ + if ((c)) { \ + (s) = ((SINT16)(s)) >> (c); \ + } else { \ + CPU_OV = 0; \ + } \ + CPU_FLAGL = (UINT8)((s) & 1); /* C_FLAG */ \ + (s) = (UINT16)(((SINT16)(s)) >> 1); \ + CPU_FLAGL |= szpflag_w[(UINT16)(s)]; \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -91,17 +100,20 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - (s) = ((SDWORD)(s)) >> ((c) - 1); \ - CPU_FLAGL = (BYTE)((s) & 1); /* C_FLAG */ \ - (s) = (DWORD)(((SDWORD)(s)) >> 1); \ - CPU_OV = 0; \ + (c)--; \ + if ((c)) { \ + (s) = ((SINT32)(s)) >> (c); \ + } else { \ + CPU_OV = 0; \ + } \ + CPU_FLAGL = (UINT8)((s) & 1); /* C_FLAG */ \ + (s) = (UINT32)(((SINT32)(s)) >> 1); \ if ((s) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((s) & 0x80000000) { \ + } else if ((s) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ - CPU_FLAGL |= (szpcflag[(BYTE)(s)] & P_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(s)] & P_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -113,43 +125,40 @@ do { \ do { \ (d) = (s) >> 1; \ CPU_OV = (s) & 0x80; \ - CPU_FLAGL = (BYTE)(szpcflag[(BYTE)(d)] | A_FLAG | ((s) & 1)); \ + CPU_FLAGL = (UINT8)(szpcflag[(UINT8)(d)] | A_FLAG | ((s) & 1)); \ } while (/*CONSTCOND*/ 0) #define _WORD_SHR1(d, s) \ do { \ (d) = (s) >> 1; \ CPU_OV = (s) & 0x8000; \ - CPU_FLAGL = (BYTE)(szpflag_w[(WORD)(d)] | A_FLAG | ((s) & 1)); \ + CPU_FLAGL = (UINT8)(szpflag_w[(UINT16)(d)] | A_FLAG | ((s) & 1)); \ } while (/*CONSTCOND*/ 0) #define _DWORD_SHR1(d, s) \ do { \ (d) = (s) >> 1; \ CPU_OV = (s) & 0x80000000; \ - CPU_FLAGL = (BYTE)(A_FLAG | ((s) & 1)); \ + CPU_FLAGL = (UINT8)(A_FLAG | ((s) & 1)); \ if ((d) == 0) { \ CPU_FLAGL |= Z_FLAG; \ } \ - if ((d) & 0x80000000) { \ - CPU_FLAGL |= S_FLAG; \ - } \ - CPU_FLAGL |= (szpcflag[(BYTE)(d)] & P_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(d)] & P_FLAG); \ } while (/*CONSTCOND*/ 0) #define _BYTE_SHRCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ - if ((c) >= 0x10) { \ - (c) &= 7; \ - (c) |= 8; \ + if ((c)) { \ + (c)--; \ + if ((c)) { \ + (s) >>= (c); \ + } else { \ + CPU_OV = (s) & 0x80; \ } \ - (s) >>= (c) - 1; \ - CPU_FLAGL = (BYTE)((s) & 1); \ + CPU_FLAGL = (UINT8)((s) & 1); \ (s) >>= 1; \ - CPU_OV = ((s) ^ ((s) >> 1)) & 0x40; \ - CPU_FLAGL |= (szpcflag[(BYTE)(s)] | A_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(s)] | A_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -157,17 +166,16 @@ do { \ #define _WORD_SHRCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ + if ((c)) { \ (c)--; \ - if (c) { \ + if ((c)) { \ (s) >>= (c); \ - CPU_OV = 0; \ } else { \ CPU_OV = (s) & 0x8000; \ } \ - CPU_FLAGL = (BYTE)((s) & 1); \ + CPU_FLAGL = (UINT8)((s) & 1); \ (s) >>= 1; \ - CPU_FLAGL |= szpflag_w[(WORD)(s)]; \ + CPU_FLAGL |= szpflag_w[(UINT16)(s)]; \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -175,23 +183,19 @@ do { \ #define _DWORD_SHRCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ + if ((c)) { \ (c)--; \ - if (c) { \ + if ((c)) { \ (s) >>= (c); \ - CPU_OV = 0; \ } else { \ CPU_OV = (s) & 0x80000000; \ } \ - CPU_FLAGL = (BYTE)((s) & 1); \ + CPU_FLAGL = (UINT8)((s) & 1); \ (s) >>= 1; \ if ((s) == 0) { \ CPU_FLAGL |= Z_FLAG; \ } \ - if ((s) & 0x80000000) { \ - CPU_FLAGL |= S_FLAG; \ - } \ - CPU_FLAGL |= (szpcflag[(BYTE)(s)] & P_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(s)] & P_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -203,28 +207,27 @@ do { \ do { \ (d) = (s) << 1; \ CPU_OV = ((s) ^ (d)) & 0x80; \ - CPU_FLAGL = szpcflag[(d) & 0x1ff] | A_FLAG; \ + CPU_FLAGL = (UINT8)(szpcflag[(d) & 0x1ff] | A_FLAG); \ } while (/*CONSTCOND*/ 0) #define _WORD_SHL1(d, s) \ do { \ (d) = (s) << 1; \ CPU_OV = ((s) ^ (d)) & 0x8000; \ - CPU_FLAGL = (BYTE)(szpflag_w[(WORD)(d)] | A_FLAG | ((d) >> 16)); \ + CPU_FLAGL = (UINT8)(szpflag_w[(UINT16)(d)] | A_FLAG | ((d) >> 16)); \ } while (/*CONSTCOND*/ 0) #define _DWORD_SHL1(d, s) \ do { \ (d) = (s) << 1; \ CPU_OV = ((s) ^ (d)) & 0x80000000; \ - CPU_FLAGL = (BYTE)(A_FLAG | (szpcflag[(BYTE)(d)] & P_FLAG)); \ + CPU_FLAGL = (UINT8)(A_FLAG | (szpcflag[(UINT8)(d)] & P_FLAG)); \ if ((s) & 0x80000000) { \ CPU_FLAGL |= C_FLAG; \ } \ if ((d) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((d) & 0x80000000) { \ + } else if ((d) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ } while (/*CONSTCOND*/ 0) @@ -232,15 +235,13 @@ do { \ #define _BYTE_SHLCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ - if ((c) >= 0x10) { \ - (c) &= 7; \ - (c) |= 8; \ + if ((c)) { \ + if ((c) == 1) { \ + CPU_OV = ((s) + 0x40) & 0x80; \ } \ (s) <<= (c); \ (s) &= 0x1ff; \ - CPU_FLAGL = (szpcflag[(s) & 0x1ff] | A_FLAG); \ - CPU_OV = ((s) ^ ((s) >> 1)) & 0x80; \ + CPU_FLAGL = (UINT8)(szpcflag[(s) & 0x1ff] | A_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -248,15 +249,14 @@ do { \ #define _WORD_SHLCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ - CPU_OV = 0; \ + if ((c)) { \ if ((c) == 1) { \ CPU_OV = ((s) + 0x4000) & 0x8000; \ } \ (s) <<= (c); \ (s) &= 0x1ffff; \ - CPU_FLAGL = szpflag_w[(WORD)(s)] | A_FLAG; \ - CPU_FLAGL |= (BYTE)((s) >> 16); /* C_FLAG */ \ + CPU_FLAGL = (UINT8)(szpflag_w[(UINT16)(s)] | A_FLAG); \ + CPU_FLAGL |= (UINT8)((s) >> 16); /* C_FLAG */ \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -264,11 +264,10 @@ do { \ #define _DWORD_SHLCL(d, s, c) \ do { \ (c) &= 0x1f; \ - if (c) { \ + if ((c)) { \ (c)--; \ if ((c)) { \ (s) <<= (c); \ - CPU_OV = 0; \ } else { \ CPU_OV = ((s) + 0x40000000) & 0x80000000; \ } \ @@ -279,11 +278,10 @@ do { \ (s) <<= 1; \ if ((s) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((s) & 0x80000000) { \ + } else if ((s) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ - CPU_FLAGL |= (szpcflag[(BYTE)(s)] & P_FLAG); \ + CPU_FLAGL |= (szpcflag[(UINT8)(s)] & P_FLAG); \ } \ (d) = (s); \ } while (/*CONSTCOND*/ 0) @@ -291,121 +289,105 @@ do { \ /* * SHRD */ -#define _WORD_SHRD(d, s, c) \ +#define _WORD_SHRD(d, s, c) \ do { \ (c) &= 0x1f; \ - if ((c)) { \ - if ((c) < 16) { \ - CPU_FLAGL = (BYTE)(((d) >> ((c) - 1)) & 1); /*C_FLAG*/ \ - (d) |= (s) << 16; \ - (d) >>= (c); \ - (d) &= 0xffff; \ - CPU_FLAGL |= szpflag_w[(WORD)(d)] | A_FLAG; \ - CPU_OV = (d) & 0x8000; \ + if (((c)) && ((c) < 16)) { \ + CPU_OV = 0; \ + if ((c) == 1) { \ + CPU_OV = (((d) >> 15) ^ (s)) & 1; \ } \ - /* XXX - CPU_FLAGL = (BYTE)(((d) >> ((c) - 1)) & 1); \ + CPU_FLAGL = (UINT8)(((d) >> ((c) - 1)) & 1); /*C_FLAG*/ \ (d) |= (s) << 16; \ (d) >>= (c); \ - if ((c) > 16) { \ - (d) |= (s) << (32 - (c)); \ - } \ (d) &= 0xffff; \ - CPU_FLAGL |= (szpflag_w[(d)] | A_FLAG); \ - CPU_OV = (d) & 0x8000; \ - */ \ + CPU_FLAGL |= szpflag_w[(UINT16)(d)] | A_FLAG; \ } \ } while (/*CONSTCOND*/ 0) -#define _DWORD_SHRD(d, s, c) \ +#define _DWORD_SHRD(d, s, c) \ do { \ (c) &= 0x1f; \ if ((c)) { \ - CPU_FLAGL = (BYTE)(((d) >> ((c) - 1)) & 1); /* C_FLAG */ \ + CPU_OV = 0; \ + if ((c) == 1) { \ + CPU_OV = (((d) >> 31) ^ (s)) & 1; \ + } \ + CPU_FLAGL = (UINT8)(((d) >> ((c) - 1)) & 1); /* C_FLAG */ \ (d) >>= (c); \ (d) |= (s) << (32 - (c)); \ if ((d) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((d) & 0x80000000) { \ + } else if ((d) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ - CPU_FLAGL |= (szpcflag[(BYTE)(d)] & P_FLAG); \ - CPU_OV = (d) & 0x80000000; \ + CPU_FLAGL |= (szpcflag[(UINT8)(d)] & P_FLAG); \ } \ } while (/*CONSTCOND*/ 0) /* * SHLD */ -#define _WORD_SHLD(d, s, c) \ +#define _WORD_SHLD(d, s, c) \ do { \ (c) &= 0x1f; \ - if ((c)) { \ - if ((c) < 16) { \ - CPU_FLAGL = (BYTE)(((d) >> (16 - (c))) & 1); /*C_FLAG*/\ - (d) = ((d) << 16) | (s); \ - (d) <<= (c); \ - (d) >>= 16; \ - CPU_FLAGL |= szpflag_w[(d)] | A_FLAG; \ - CPU_OV = (d) & 0x8000; \ + if (((c)) && ((c) < 16)) { \ + CPU_OV = 0; \ + if ((c) == 1) { \ + CPU_OV = ((d) ^ ((d) << 1)) & 0x8000; \ } \ - /* XXX - CPU_FLAGL = (BYTE)(((d) >> (16 - (c))) & 1); \ + CPU_FLAGL = (UINT8)(((d) >> (16 - (c))) & 1); /*C_FLAG*/\ (d) = ((d) << 16) | (s); \ (d) <<= (c); \ - if ((c) > 16) { \ - (d) |= ((s) << ((c) - 16)); \ - } \ (d) >>= 16; \ CPU_FLAGL |= szpflag_w[(d)] | A_FLAG; \ - CPU_OV = (d) & 0x8000; \ - */ \ } \ } while (/*CONSTCOND*/ 0) -#define _DWORD_SHLD(d, s, c) \ +#define _DWORD_SHLD(d, s, c) \ do { \ (c) &= 0x1f; \ if ((c)) { \ - CPU_FLAGL = (BYTE)(((d) >> (32 - (c))) & 1); /* C_FLAG */ \ + CPU_OV = 0; \ + if ((c) == 1) { \ + CPU_OV = ((d) ^ ((d) << 1)) & 0x80000000; \ + } \ + CPU_FLAGL = (UINT8)(((d) >> (32 - (c))) & 1); /* C_FLAG */ \ (d) <<= (c); \ (d) |= ((s) >> (32 - (c))); \ if ((d) == 0) { \ CPU_FLAGL |= Z_FLAG; \ - } \ - if ((d) & 0x80000000) { \ + } else if ((d) & 0x80000000) { \ CPU_FLAGL |= S_FLAG; \ } \ - CPU_FLAGL |= (szpcflag[(BYTE)(d)] & P_FLAG); \ - CPU_OV = (d) & 0x80000000; \ + CPU_FLAGL |= (szpcflag[(UINT8)(d)] & P_FLAG); \ } \ } while (/*CONSTCOND*/ 0) /* * ROR */ -#define _BYTE_ROR1(d, s) \ +#define _BYTE_ROR1(d, s) \ do { \ - DWORD tmp = (s) & 1; \ + UINT32 tmp = (s) & 1; \ (d) = (tmp << 7) + ((s) >> 1); \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ CPU_OV = ((s) ^ (d)) & 0x80; \ } while (/*CONSTCOND*/ 0) -#define _WORD_ROR1(d, s) \ +#define _WORD_ROR1(d, s) \ do { \ - DWORD tmp = (s) & 1; \ + UINT32 tmp = (s) & 1; \ (d) = (tmp << 15) + ((s) >> 1); \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ CPU_OV = ((s) ^ (d)) & 0x8000; \ } while (/*CONSTCOND*/ 0) -#define _DWORD_ROR1(d, s) \ +#define _DWORD_ROR1(d, s) \ do { \ - DWORD tmp = (s) & 1; \ + UINT32 tmp = (s) & 1; \ (d) = (tmp << 31) + ((s) >> 1); \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ @@ -431,7 +413,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp; \ + UINT32 tmp; \ (c)--; \ if ((c)) { \ (c) &= 0x0f; \ @@ -453,7 +435,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp; \ + UINT32 tmp; \ (c)--; \ if ((c)) { \ (s) = ((s) >> (c)) | ((s) << (32 - (c))); \ @@ -474,7 +456,7 @@ do { \ */ #define _BYTE_ROL1(d, s) \ do { \ - DWORD tmp = (s) >> 7; /* C_FLAG */ \ + UINT32 tmp = (s) >> 7; /* C_FLAG */ \ (d) = ((s) << 1) + tmp; \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ @@ -483,7 +465,7 @@ do { \ #define _WORD_ROL1(d, s) \ do { \ - DWORD tmp = (s) >> 15; /* C_FLAG */ \ + UINT32 tmp = (s) >> 15; /* C_FLAG */ \ (d) = ((s) << 1) + tmp; \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ @@ -492,7 +474,7 @@ do { \ #define _DWORD_ROL1(d, s) \ do { \ - DWORD tmp = (s) >> 31; /* C_FLAG */ \ + UINT32 tmp = (s) >> 31; /* C_FLAG */ \ (d) = ((s) << 1) + tmp; \ CPU_FLAGL &= ~C_FLAG; \ CPU_FLAGL |= tmp; \ @@ -518,7 +500,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp; \ + UINT32 tmp; \ (c)--; \ if ((c)) { \ (c) &= 0x0f; \ @@ -540,7 +522,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp; \ + UINT32 tmp; \ (c)--; \ if ((c)) { \ (s) = ((s) << (c)) | ((s) >> (32 - (c))); \ @@ -587,7 +569,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ while ((c)--) { \ (s) |= (tmp << 8); \ @@ -604,7 +586,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ CPU_OV = 0; \ if ((c) == 1) { \ @@ -624,7 +606,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ CPU_OV = 0; \ if ((c) == 1) { \ @@ -642,7 +624,7 @@ do { \ /* * RCL */ -#define _BYTE_RCL1(d, s) \ +#define _BYTE_RCL1(d, s) \ do { \ (d) = ((s) << 1) | (CPU_FLAGL & C_FLAG); \ CPU_FLAGL &= ~C_FLAG; \ @@ -650,7 +632,7 @@ do { \ CPU_OV = ((s) ^ (d)) & 0x80; \ } while (/*CONSTCOND*/ 0) -#define _WORD_RCL1(d, s) \ +#define _WORD_RCL1(d, s) \ do { \ (d) = ((s) << 1) | (CPU_FLAGL & C_FLAG); \ CPU_FLAGL &= ~C_FLAG; \ @@ -658,7 +640,7 @@ do { \ CPU_OV = ((s) ^ (d)) & 0x8000; \ } while (/*CONSTCOND*/ 0) -#define _DWORD_RCL1(d, s) \ +#define _DWORD_RCL1(d, s) \ do { \ (d) = ((s) << 1) | (CPU_FLAGL & C_FLAG); \ CPU_FLAGL &= ~C_FLAG; \ @@ -670,7 +652,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ while ((c)--) { \ (s) = (((s) << 1) | tmp) & 0x1ff; \ @@ -686,7 +668,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ CPU_OV = 0; \ if ((c) == 1) { \ @@ -705,7 +687,7 @@ do { \ do { \ (c) &= 0x1f; \ if ((c)) { \ - DWORD tmp = CPU_FLAGL & C_FLAG; \ + UINT32 tmp = CPU_FLAGL & C_FLAG; \ CPU_FLAGL &= ~C_FLAG; \ CPU_OV = 0; \ if ((c) == 1) { \ @@ -772,6 +754,10 @@ do { \ #define WORD_RCLCL(d, s, c) XC_WORD_RCLCL(d, s, c) #define DWORD_RCLCL(d, s, c) XC_DWORD_RCLCL(d, s, c) +#elif defined(IA32_CROSS_CHECK) && defined(_MSC_VER) + +#include "shift_rotatexc_msc.mcr" + #else /* !(IA32_CROSS_CHECK && __GNUC__ && (i386) || __i386__)) */ #define BYTE_SAR1(d, s) _BYTE_SAR1(d, s)