On 08/09/2015 01:13 PM, Laurent Vivier wrote:
@@ -168,46 +209,66 @@ void cpu_m68k_flush_flags(CPUM68KState *env, int cc_op)
case CC_OP_FLAGS:
flags = dest;
break;
+ case CC_OP_LOGICB:
+ SET_NZ(dest, int8_t);
+ goto set_x;
+ break;
+ case CC_OP_LOGICW:
+ SET_NZ(dest, int16_t);
+ goto set_x;
+ break;
case CC_OP_LOGIC:
- SET_NZ(dest);
+ SET_NZ(dest, int32_t);
+set_x:
Drop the break after goto.
+ if (!m68k_feature(env, M68K_FEATURE_M68000)) {
+ /* Unlike m68k, coldfire always clears the overflow bit. */
+ env->cc_x = 0;
+ }
Err.. that's not the overflow bit.
But yes, it's different between CF and m68k.
+#define SET_CC_OP(opsize, op) do { \
+ switch (opsize) { \
+ case OS_BYTE: \
+ s->cc_op = CC_OP_##op##B; break; \
+ case OS_WORD: \
+ s->cc_op = CC_OP_##op##W; break; \
+ case OS_LONG: \
+ s->cc_op = CC_OP_##op; break; \
+ default: \
+ abort(); \
+ } \
+} while (0)
+
If OS_BYTE == 0, then this can just be CC_OP_##op##B + opsize.
r~