diff options
Diffstat (limited to 'private/mvdm/softpc.new/base/ccpu386/or.c')
-rw-r--r-- | private/mvdm/softpc.new/base/ccpu386/or.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/private/mvdm/softpc.new/base/ccpu386/or.c b/private/mvdm/softpc.new/base/ccpu386/or.c new file mode 100644 index 000000000..3c08e4751 --- /dev/null +++ b/private/mvdm/softpc.new/base/ccpu386/or.c @@ -0,0 +1,59 @@ +/*[ + +or.c + +LOCAL CHAR SccsID[]="@(#)or.c 1.5 02/09/94"; + +OR CPU functions. +----------------- + +]*/ + + +#include <insignia.h> + +#include <host_def.h> +#include <xt.h> +#include <c_main.h> +#include <c_addr.h> +#include <c_bsic.h> +#include <c_prot.h> +#include <c_seg.h> +#include <c_stack.h> +#include <c_xcptn.h> +#include <c_reg.h> +#include <or.h> + + +/* + ===================================================================== + EXTERNAL FUNCTIONS START HERE. + ===================================================================== + */ + + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +/* Generic - one size fits all 'or'. */ +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +GLOBAL VOID +OR + +IFN3( + IU32 *, pop1, /* pntr to dst/lsrc operand */ + IU32, op2, /* rsrc operand */ + IUM8, op_sz /* 8, 16 or 32-bit */ + ) + + + { + IU32 result; + + result = *pop1 | op2; /* Do operation */ + SET_CF(0); /* Determine flags */ + SET_OF(0); + SET_AF(0); + SET_PF(pf_table[result & BYTE_MASK]); + SET_ZF(result == 0); + SET_SF((result & SZ2MSB(op_sz)) != 0); /* SF = MSB */ + *pop1 = result; /* Return answer */ + } |