/* This file is part of GNU epsilon, a functional language implementation

Copyright (C) 2003 Luca Saiu

GNU epsilon is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2, or (at your
option) any later version.

GNU epsilon is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with epsilon; see the file COPYING.  If not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */


/* Code for the s_neqs instruction */

const integer_t size_of_undertop = ((integer_t*)UNDERTOP)[0];
const integer_t size_of_top = ((integer_t*)top)[0];
integer_t i;

if(size_of_undertop != size_of_top)
  top = (word_t)1;
else{
  integer_t are_they_different = 0; /* initially assume that UNDERTOP =s top */
  for(i = 1; i <= size_of_top; i++){
    if( ((integer_t*)UNDERTOP)[i] != ((integer_t*)top)[i] ){
      are_they_different = 1; /* UNDERTOP =/=s top */
      break;
    }
    /* else do nothing: iterate again */
  }
  top = (word_t)are_they_different;
}

/* We already put the result into top: now decrease the stack pointer: */
undertop_stack_pointer--;
