*/
#ifdef MEM_WRITE
+#if MEM_WRITE == 0
+
+#if DATA_BITS == 8
+#define MEM_SUFFIX b_raw
+#elif DATA_BITS == 16
+#define MEM_SUFFIX w_raw
+#elif DATA_BITS == 32
+#define MEM_SUFFIX l_raw
+#endif
+
+#elif MEM_WRITE == 1
+
+#if DATA_BITS == 8
+#define MEM_SUFFIX b_kernel
+#elif DATA_BITS == 16
+#define MEM_SUFFIX w_kernel
+#elif DATA_BITS == 32
+#define MEM_SUFFIX l_kernel
+#endif
+
+#elif MEM_WRITE == 2
+
#if DATA_BITS == 8
-#define MEM_SUFFIX b_mem
+#define MEM_SUFFIX b_user
#elif DATA_BITS == 16
-#define MEM_SUFFIX w_mem
+#define MEM_SUFFIX w_user
#elif DATA_BITS == 32
-#define MEM_SUFFIX l_mem
+#define MEM_SUFFIX l_user
+#endif
+
+#else
+
+#error invalid MEM_WRITE
+
#endif
#else
T0 &= DATA_MASK;
T0 = (T0 << count) | (T0 >> (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#else
/* gcc 3.2 workaround. This is really a bug in gcc. */
asm volatile("" : : "r" (T0));
T0 &= DATA_MASK;
T0 = (T0 >> count) | (T0 << (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#else
/* gcc 3.2 workaround. This is really a bug in gcc. */
asm volatile("" : : "r" (T0));
T0 &= DATA_MASK;
T0 = (T0 << count) | (T0 >> (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
}
FORCE_RET();
T0 &= DATA_MASK;
T0 = (T0 >> count) | (T0 << (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
}
FORCE_RET();
res |= T0 >> (DATA_BITS + 1 - count);
T0 = res;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = (eflags & ~(CC_C | CC_O)) |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
res |= T0 << (DATA_BITS + 1 - count);
T0 = res;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = (eflags & ~(CC_C | CC_O)) |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
src = (DATA_TYPE)T0 << (count - 1);
T0 = T0 << count;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = src;
CC_DST = T0;
src = T0 >> (count - 1);
T0 = T0 >> count;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = src;
CC_DST = T0;
T0 = src >> count;
src = src >> (count - 1);
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = src;
CC_DST = T0;
res |= T1 << (count - 16);
T0 = res >> 16;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
res |= T1 << (count - 16);
T0 = res >> 16;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
res |= T1 << (32 - count);
T0 = res;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
res |= T1 << (32 - count);
T0 = res;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
tmp = T0 << (count - 1);
T0 = (T0 << count) | (T1 >> (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
tmp = T0 << (count - 1);
T0 = (T0 << count) | (T1 >> (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
tmp = T0 >> (count - 1);
T0 = (T0 >> count) | (T1 << (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
tmp = T0 >> (count - 1);
T0 = (T0 >> count) | (T1 << (DATA_BITS - count));
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = tmp;
CC_DST = T0;
cf = cc_table[CC_OP].compute_c();
T0 = T0 + T1 + cf;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = T1;
CC_DST = T0;
cf = cc_table[CC_OP].compute_c();
T0 = T0 - T1 - cf;
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = T1;
CC_DST = T0;
EAX = (EAX & ~DATA_MASK) | (T0 & DATA_MASK);
}
#ifdef MEM_WRITE
- glue(st, SUFFIX)((uint8_t *)A0, T0);
+ glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
#endif
CC_SRC = src;
CC_DST = dst;