--- gforth/Attic/386.h 1995/10/26 22:48:38 1.10 +++ gforth/Attic/386.h 1997/03/04 17:49:45 1.15 @@ -1,7 +1,23 @@ /* - Copyright 1992 by the ANSI figForth Development Group - This is the machine-specific part for Intel 386 compatible processors + + Copyright (C) 1995 Free Software Foundation, Inc. + + This file is part of Gforth. + + Gforth 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 + of the License, or (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "32bit.h" @@ -40,11 +56,16 @@ /* this is the point where the does code starts if label points to the * jump dodoes */ -#define DOES_HANDLER_SIZE 8 -#define DOES_CODE(label) ((Xt *)(CODE_ADDRESS(label)+DOES_HANDLER_SIZE)) +#define DOES_CODE(xt) \ +({ long _xt = (long)(xt); \ + long _ca = (long)(CODE_ADDRESS(_xt)); \ + ((((*(unsigned char *)_xt) == CALL) \ + && ((*(unsigned char *)_ca) == JMP) \ + && ((long)(CODE_ADDRESS(_ca)) == (long)&&dodoes)) \ + ? _ca+DOES_HANDLER_SIZE : 0L); }) /* this is a special version of DOES_CODE for use in dodoes */ -#define DOES_CODE1(label) DOES_CODE(label) +#define DOES_CODE1(label) (CODE_ADDRESS(label)+DOES_HANDLER_SIZE) /* this stores a jump dodoes at addr */ #define MAKE_DOES_CF(addr,doesp) ({long _addr = (long)(addr); \