// 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 // // 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_2; IMPL_START_1(lea) { v1 = p2->addr; } IMPL_OUT; IMPL_START_2(cmpxchg) { if (rax == v1) { flg |= ZF; v1 = v2; } else { flg &= ~ZF; rax = v1; } } IMPL_OUT; IMPL_START_1(gco) { v1 = cr1; } IMPL_OUT; IMPL_START_1(gcd) { v1 = cr2; } IMPL_OUT;