// 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_START_1(lea) { v1 = p2->addr; } IMPL_OUT; //----------------------------------------------------------------------------// IMPL_START_2_ONLY(mov) { v1 = v2; } IMPL_OUT; //----------------------------------------------------------------------------// IMPL_START_2_ONLY(movsxb) { v1 = (ulong)(long)(char)(v2 & 0xFF); } IMPL_OUT; IMPL_START_2_ONLY(movsxw) { v1 = (ulong)(long)(short)(v2 & 0xFFFF); } IMPL_OUT; IMPL_START_2_ONLY(movsxl) { v1 = (ulong)(long)(int)(v2 & 0xFFFFFFFF); } IMPL_OUT; //----------------------------------------------------------------------------// IMPL_START_1(movzx) { DECVZX(v2, p2); v1 = v2; } IMPL_OUT; //----------------------------------------------------------------------------// IMPL_START_2(xchg) { ulong t = v1; v1 = v2; v2 = t; } IMPL_OUT_2; IMPL_START_2(cmpxchg) { if (rax == v1) { rfx |= ZF; v1 = v2; } else { rfx &= ~ZF; rax = v1; } } IMPL_OUT; //----------------------------------------------------------------------------// IMPL_START_3(rotl) { ulong tmp = v1; v1 = v2; v2 = v3; v3 = tmp; } IMPL_OUT_3; IMPL_START_3(rotr) { ulong tmp = v3; v3 = v2; v2 = v1; v1 = tmp; } IMPL_OUT_3; //----------------------------------------------------------------------------// IMPL_START_2_ONLY(ldarg) { if (v2 < 16) v1 = R(AX0 + v2); else _except(ctx, E_ILL, "ldarg: value out of range: %lu", v2); } IMPL_OUT; //----------------------------------------------------------------------------//