// The OS/K Team licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #include "instrs.h" #include "arch_i.h" // // Jump instructions // IMPL_START_1(jmp) { JUMP(v1); } IMPL_END; IMPL_START_1(loop) { if (ctx->r[RCX].val > 0) { ctx->r[RCX].val--; JUMP(v1); } } IMPL_END; IMPL_START_1(jz) { if (ctx->r[FLG].val & ZF) JUMP(v1); } IMPL_END; IMPL_START_1(jnz) { if (!(ctx->r[FLG].val & ZF)) JUMP(v1); } IMPL_END; IMPL_START_1(je) { if (ctx->r[FLG].val & ZF) JUMP(v1); } IMPL_END; IMPL_START_1(jne) { if (!(ctx->r[FLG].val & ZF)) JUMP(v1); } IMPL_END; IMPL_START_1(ja) { if (!(ctx->r[FLG].val & ZF) && !(ctx->r[FLG].val & CF)) JUMP(v1); } IMPL_END; IMPL_START_1(jae) { if (!(ctx->r[FLG].val & CF)) JUMP(v1); } IMPL_END; IMPL_START_1(jb) { if (!(ctx->r[FLG].val & ZF) && ctx->r[FLG].val & CF) JUMP(v1); } IMPL_END; IMPL_START_1(jbe) { if (ctx->r[FLG].val & CF) JUMP(v1); } IMPL_END; IMPL_START_1(jcxz) { if (!ctx->r[RCX].val) JUMP(v1); } IMPL_END;