diff options
Diffstat (limited to 'private/mvdm/softpc.new/base/ccpu386/btr.c')
-rw-r--r-- | private/mvdm/softpc.new/base/ccpu386/btr.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/private/mvdm/softpc.new/base/ccpu386/btr.c b/private/mvdm/softpc.new/base/ccpu386/btr.c new file mode 100644 index 000000000..5d00cde29 --- /dev/null +++ b/private/mvdm/softpc.new/base/ccpu386/btr.c @@ -0,0 +1,55 @@ +/*[ + +btr.c + +LOCAL CHAR SccsID[]="@(#)btr.c 1.5 02/09/94"; + +BTR 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 <btr.h> + + +/* + ===================================================================== + EXTERNAL FUNCTIONS START HERE. + ===================================================================== + */ + + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +/* Generic - one size fits all 'btr'. */ +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +GLOBAL VOID +BTR + +IFN3( + IU32 *, pop1, /* pntr to lsrc/dst operand */ + IU32, op2, /* rsrc (ie bit nr.) operand */ + IUM8, op_sz /* 16 or 32-bit */ + ) + + + { + IU32 bit_mask; + + op2 = op2 % op_sz; /* take bit nr. modulo operand size */ + bit_mask = 1 << op2; /* form mask for bit */ + SET_CF((*pop1 & bit_mask) != 0); /* set CF to given bit */ + *pop1 = *pop1 & ~bit_mask; /* Set Bit = 0 */ + } |