// 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 IMPL_COND(lea); IMPL_COND(mov); IMPL_COND(movb); IMPL_COND(movw); IMPL_COND(movl); IMPL_COND(movt); IMPL_COND(xchg); IMPL_COND(cmpxchg); /* IMPL_COND(xchgb); IMPL_COND(xchgw); IMPL_COND(xchgl); IMPL_COND(xchgt); */ // // Movement instructions // IMPL_START_2(mov) { v1 = v2; } IMPL_OUT; IMPL_START_2(movb) { v1 = (v1 & 0xFFFFFFFFFFFFFF00) | (v2 & 0x00000000000000FF); } IMPL_OUT; IMPL_START_2(movw) { v1 = (v1 & 0xFFFFFFFFFFFF0000) | (v2 & 0x000000000000FFFF); } IMPL_OUT; IMPL_START_2(movl) { v1 = (v1 & 0xFFFFFFFF00000000) | (v2 & 0x00000000FFFFFFFF); } IMPL_OUT; IMPL_START_2(movt) { v1 = (v1 & 0xFFFF000000000000) | (v2 & 0x0000FFFFFFFFFFFF); } IMPL_OUT; IMPL_START_2(xchg) { ulong t = v1; v1 = v2; v2 = t; } IMPL_OUT; IMPL_START_1(lea) { v1 = (p2->type == A_REG ? R(p2->val) : p2->val) + p2->off; } IMPL_OUT; IMPL_START_1(gcs) { v1 = cr1; } IMPL_OUT; IMPL_START_2(cmpxchg) { if (rax == v1) { flg |= ZF; v1 = v2; } else { flg &= ~ZF; rax = v1; } } IMPL_OUT;