// 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_2(not) { v1 = ~v2; } IMPL_OUT; IMPL_START_2(test) { rfx &= ~(CF|OF); SET_ZSF(v1 & v2); } IMPL_END; //----------------------------------------------------------------------------// #define LOGIC_IMPL(name, op) \ IMPL_START_2(name) \ { \ ALU_GET_SRCS(); \ v1 = op; \ } \ IMPL_OUT; LOGIC_IMPL(and, src1 & src2); LOGIC_IMPL(andn, src1 & ~src2); LOGIC_IMPL(nand, ~(src1 & src2)); LOGIC_IMPL(or, src1 | src2); LOGIC_IMPL(orn, src1 | ~src2); LOGIC_IMPL(nor, ~(src1 | src2)); LOGIC_IMPL(xor, src1 ^ src2); LOGIC_IMPL(xorn, src1 ^ ~src2); LOGIC_IMPL(xnor, ~(src1 ^ src2)); LOGIC_IMPL(shl, src1 << src2); LOGIC_IMPL(shr, src1 >> src2); //-------------------------------------------------------------------------- IMPL_START_2(sal) { ALU_GET_SRCS(); long w1 = src1; long w2 = src2; w1 <<= w2; v1 = (ulong)w1; } IMPL_OUT; IMPL_START_2(sar) { ALU_GET_SRCS(); long w1 = src1; long w2 = src2; w1 >>= w2; v1 = (ulong)w1; } IMPL_OUT; //----------------------------------------------------------------------------//