#include "forth.h"
/* Logical operators. */

PRIMITIVE ("and", Fand, Sand, NON_IMMEDIATE, ( n1 n2 -- mask ) )
{
  sp[2] &= sp[0];
  POP;
}


PRIMITIVE ("or", For, Sor, NON_IMMEDIATE, ( n1 n2 -- mask ) )
{
  sp[2] |= sp[0];
  POP;
}


PRIMITIVE ("xor", Fxor, Sxor, NON_IMMEDIATE, ( n1 n2 -- mask ) )
{
  sp[2] ^= sp[0];
  POP;
}


PRIMITIVE ("~", Ftwiddle, Stwiddle, NON_IMMEDIATE, ( n1 n2 -- mask ) )
{
  sp[0] = ~(sp[0]);
}


PRIMITIVE ("not", Fnot, Snot, NON_IMMEDIATE, ( n1 n2 -- mask ) )
{
  /* I swear it was an accident.  I hadn't even thought of "not" when
   * I decided on the F<word> S<word> convention, really!
   */
  sp[0] = !(sp[0]);
}
