--- np2/i286c/i286c_sf.mcr 2003/10/16 17:57:44 1.1 +++ np2/i286c/i286c_sf.mcr 2003/12/11 04:03:35 1.8 @@ -2,16 +2,16 @@ #define BYTE_ROL1(d, s) { \ - DWORD tmp = ((s) >> 7); \ - (d) = ((s) << 1) | tmp; \ + UINT tmp = ((s) >> 7); \ + (d) = ((s) << 1) + tmp; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ I286_OV = ((s) ^ (d)) & 0x80; \ } #define BYTE_ROR1(d, s) { \ - DWORD tmp = ((s) & 1); \ - (d) = ((tmp << 8) | (s)) >> 1; \ + UINT tmp = ((s) & 1); \ + (d) = ((tmp << 8) + (s)) >> 1; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ I286_OV = ((s) ^ (d)) & 0x80; \ @@ -32,31 +32,37 @@ #define BYTE_SHL1(d, s) \ (d) = (s) << 1; \ I286_OV = ((s) ^ (d)) & 0x80; \ - I286_FLAGL = szpcflag[(d)] | A_FLAG; + I286_FLAGL = BYTESZPCF(d) | A_FLAG; #define BYTE_SHR1(d, s) \ (d) = (s) >> 1; \ I286_OV = (s) & 0x80; \ - I286_FLAGL = (BYTE)(szpcflag[(d)] | A_FLAG | ((s) & 1)); + I286_FLAGL = (BYTE)(BYTESZPF(d) | A_FLAG | ((s) & 1)); +#if 1 #define BYTE_SAR1(d, s) \ - (d) = (BYTE)(((char)s) >> 1); \ + (d) = ((s) & 0x80) + ((s) >> 1); \ I286_OV = 0; \ - I286_FLAGL = (BYTE)(szpcflag[(d)] | A_FLAG | ((s) & 1)); - + I286_FLAGL = (BYTE)(BYTESZPF(d) | A_FLAG | ((s) & 1)); +#else // eVC3/4 compiler bug +#define BYTE_SAR1(d, s) \ + (d) = (BYTE)(((SINT8)(s)) >> 1); \ + I286_OV = 0; \ + I286_FLAGL = (BYTE)(BYTESZPF(d) | A_FLAG | ((s) & 1)); +#endif #define WORD_ROL1(d, s) { \ - DWORD tmp = ((s) >> 15); \ - (d) = ((s) << 1) | tmp; \ + UINT32 tmp = ((s) >> 15); \ + (d) = ((s) << 1) + tmp; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ I286_OV = ((s) ^ (d)) & 0x8000; \ } #define WORD_ROR1(d, s) { \ - DWORD tmp = ((s) & 1); \ - (d) = ((tmp << 16) | (s)) >> 1; \ + UINT32 tmp = ((s) & 1); \ + (d) = ((tmp << 16) + (s)) >> 1; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ I286_OV = ((s) ^ (d)) & 0x8000; \ @@ -69,7 +75,7 @@ I286_OV = ((s) ^ (d)) & 0x8000; #define WORD_RCR1(d, s) \ - (d) = (((I286_FLAGL & 1) << 16) | (s)) >> 1; \ + (d) = (((I286_FLAGL & 1) << 16) + (s)) >> 1; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= ((s) & 1); \ I286_OV = ((s) ^ (d)) & 0x8000; @@ -77,18 +83,24 @@ #define WORD_SHL1(d, s) \ (d) = (s) << 1; \ I286_OV = ((s) ^ (d)) & 0x8000; \ - I286_FLAGL = (BYTE)(szpflag_w[(d) & 0xffff] | A_FLAG | ((d) >> 16)); + I286_FLAGL = WORDSZPCF(d) + A_FLAG; #define WORD_SHR1(d, s) \ (d) = (s) >> 1; \ I286_OV = (s) & 0x8000; \ - I286_FLAGL = (BYTE)(szpflag_w[(d)] | A_FLAG | ((s) & 1)); + I286_FLAGL = (BYTE)(WORDSZPF(d) | A_FLAG | ((s) & 1)); +#if 1 #define WORD_SAR1(d, s) \ - (d) = (WORD)(((short)s) >> 1); \ + (d) = ((s) & 0x8000) + ((s) >> 1); \ I286_OV = 0; \ - I286_FLAGL = (BYTE)(szpflag_w[(d)] | A_FLAG | ((s) & 1)); - + I286_FLAGL = (BYTE)(WORDSZPF(d) | A_FLAG | ((s) & 1)); +#else // eVC3/4 compiler bug +#define WORD_SAR1(d, s) \ + (d) = (UINT16)(((SINT16)(s)) >> 1); \ + I286_OV = 0; \ + I286_FLAGL = (BYTE)(WORDSZPF(d) | A_FLAG | ((s) & 1)); +#endif @@ -123,7 +135,7 @@ #define BYTE_RCLCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT tmp; \ tmp = I286_FLAGL & C_FLAG; \ I286_FLAGL &= ~C_FLAG; \ while((c)--) { \ @@ -138,7 +150,7 @@ #define BYTE_RCRCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT tmp; \ tmp = I286_FLAGL & C_FLAG; \ I286_FLAGL &= ~C_FLAG; \ while((c)--) { \ @@ -160,7 +172,7 @@ } \ (s) <<= (c); \ (s) &= 0x1ff; \ - I286_FLAGL = szpcflag[(s)] | A_FLAG; \ + I286_FLAGL = BYTESZPCF(s) + A_FLAG; \ I286_OV = ((s) ^ ((s) >> 1)) & 0x80; \ } \ (d) = (s); @@ -176,18 +188,18 @@ I286_FLAGL = (BYTE)((s) & 1); \ (s) >>= 1; \ I286_OV = ((s) ^ ((s) >> 1)) & 0x40; \ - I286_FLAGL |= szpcflag[(s)] | A_FLAG; \ + I286_FLAGL |= BYTESZPF(s) + A_FLAG; \ } \ (d) = (s); #define BYTE_SARCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - (s) = ((char)(s)) >> ((c) - 1); \ + (s) = ((SINT8)(s)) >> ((c) - 1); \ I286_FLAGL = (BYTE)((s) & 1); \ - (s) = (BYTE)(((char)s) >> 1); \ + (s) = (BYTE)(((SINT8)s) >> 1); \ I286_OV = 0; \ - I286_FLAGL |= szpcflag[(s)] | A_FLAG; \ + I286_FLAGL |= BYTESZPF(s) | A_FLAG; \ } \ (d) = (s); @@ -195,19 +207,18 @@ #define WORD_ROLCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT tmp; \ (c)--; \ if (c) { \ (c) &= 0x0f; \ (s) = ((s) << (c)) | ((s) >> (16 - (c))); \ (s) &= 0xffff; \ - I286_OV = 0; \ } \ else { \ I286_OV = ((s) + 0x4000) & 0x8000; \ } \ tmp = ((s) >> 15); \ - (s) = ((s) << 1) | tmp; \ + (s) = ((s) << 1) + tmp; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ } \ @@ -216,19 +227,18 @@ #define WORD_RORCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT32 tmp; \ (c)--; \ if (c) { \ (c) &= 0x0f; \ (s) = ((s) >> (c)) | ((s) << (16 - (c))); \ (s) &= 0xffff; \ - I286_OV = 0; \ } \ else { \ I286_OV = ((s) >> 15) ^ ((s) & 1); \ } \ - tmp = ((s) & 1); \ - (s) = ((tmp << 16) | (s)) >> 1; \ + tmp = (s) & 1; \ + (s) = ((tmp << 16) + (s)) >> 1; \ I286_FLAGL &= ~C_FLAG; \ I286_FLAGL |= tmp; \ } \ @@ -237,15 +247,14 @@ #define WORD_RCLCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT tmp; \ tmp = I286_FLAGL & C_FLAG; \ I286_FLAGL &= ~C_FLAG; \ - I286_OV = 0; \ - if (((c) == 1) || ((c) == 1+17)) { \ + if ((c) == 1) { \ I286_OV = ((s) + 0x4000) & 0x8000; \ } \ while((c)--) { \ - (s) = (((s) << 1) | tmp) & 0x1ffff; \ + (s) = (((s) << 1) + tmp) & 0x1ffff; \ tmp = (s) >> 16; \ } \ I286_FLAGL |= tmp; \ @@ -255,11 +264,10 @@ #define WORD_RCRCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - DWORD tmp; \ + UINT32 tmp; \ tmp = I286_FLAGL & C_FLAG; \ I286_FLAGL &= ~C_FLAG; \ - I286_OV = 0; \ - if (((c) == 1) || ((c) == 1+17)) { \ + if ((c) == 1) { \ I286_OV = ((s) >> 15) ^ tmp; \ } \ while((c)--) { \ @@ -280,8 +288,7 @@ } \ (s) <<= (c); \ (s) &= 0x1ffff; \ - I286_FLAGL = szpflag_w[(s) & 0xffff]; \ - I286_FLAGL |= (WORD)((s) >> 16); \ + I286_FLAGL = WORDSZPCF(s); \ } \ (d) = (s); @@ -298,18 +305,33 @@ } \ I286_FLAGL = (BYTE)((s) & 1); \ (s) >>= 1; \ - I286_FLAGL |= szpflag_w[(s)]; \ + I286_FLAGL |= WORDSZPF(s); \ } \ (d) = (s); +#if !defined(_WIN32_WCE) || (_WIN32_WCE < 300) #define WORD_SARCL(d, s, c) \ (c) &= 0x1f; \ if (c) { \ - (s) = ((short)(s)) >> ((c) - 1); \ + (s) = ((SINT16)(s)) >> ((c) - 1); \ I286_FLAGL = (BYTE)((s) & 1); \ - (s) = (WORD)(((short)s) >> 1); \ + (s) = (UINT16)(((SINT16)s) >> 1); \ + I286_OV = 0; \ + I286_FLAGL |= WORDSZPF(s); \ + } \ + (d) = (s); +#else // eVC¡Á +#define WORD_SARCL(d, s, c) \ + (c) &= 0x1f; \ + if (c) { \ + SINT32 tmp; \ + tmp = (s) << 16; \ + tmp = tmp >> (16 + (c) - 1); \ + I286_FLAGL = (BYTE)(tmp & 1); \ + (s) = (UINT16)(tmp >> 1); \ I286_OV = 0; \ - I286_FLAGL |= szpflag_w[(s)]; \ + I286_FLAGL |= WORDSZPF(s); \ } \ (d) = (s); +#endif