![]() ![]() | ![]() |
Reorganized configuration: configure is now created by autoconf from configure.in; I still left it in the CVS repository because not everyone has autoconf. decstation.h renamed to mips.h and apollo68k to m68k. Added general 32bit.h description, which the other machine descriptions use. Created/copied replacement files install-sh memcmp.c memmove.c select.c (carved out from ecvt.c) strtol.c strtoul.c. Bytesex is now handled by configure. Deciding the threading method is now done in machine.h, this should also be done for USE_TOS and USE_FTOS.
1: /* 2: Copyright 1992 by the ANSI figForth Development Group 3: 4: This is the machine-specific part for Intel 386 compatible processors 5: */ 6: 7: #include "32bit.h" 8: 9: /* indirect threading is faster on the 486, on the 386 direct 10: threading is probably faster. Therefore we leave defining 11: DIRECT_THREADED to configure */ 12: 13: /* define this if the processor cannot exploit instruction-level 14: parallelism (no pipelining or too few registers) */ 15: #define CISC_NEXT 16: 17: #ifdef DIRECT_THREADED 18: /* PFA gives the parameter field address corresponding to a cfa */ 19: #define PFA(cfa) (((Cell *)cfa)+2) 20: /* PFA1 is a special version for use just after a NEXT1 */ 21: #define PFA1(cfa) PFA(cfa) 22: /* CODE_ADDRESS is the address of the code jumped to through the code field */ 23: #define CODE_ADDRESS(cfa) \ 24: ({long _cfa = (long)(cfa); (Label)(_cfa+*((long *)(_cfa+1))+5);}) 25: /* MAKE_CF creates an appropriate code field at the cfa; ca is the code address */ 26: #define MAKE_CF(cfa,ca) ({long _cfa = (long)(cfa); \ 27: long _ca = (long)(ca); \ 28: *(char *)_cfa = 0xe9; /* jmp */ \ 29: *(long *)(_cfa+1) = _ca-(_cfa+5);}) 30: 31: /* this is the point where the does code starts if label points to the 32: * jump dodoes */ 33: #define DOES_HANDLER_SIZE 8 34: #define DOES_CODE(label) ((Xt *)(CODE_ADDRESS(label)+DOES_HANDLER_SIZE)) 35: 36: /* this is a special version of DOES_CODE for use in dodoes */ 37: #define DOES_CODE1(label) DOES_CODE(label) 38: 39: /* this stores a jump dodoes at addr */ 40: #define MAKE_DOES_HANDLER(addr) MAKE_CF(addr,symbols[DODOES]) 41: 42: #define MAKE_DOES_CF(addr,doesp) MAKE_CF(addr,((int)(doesp)-8)) 43: #endif 44: 45: #ifdef FORCE_REG 46: #define IPREG asm("%esi") 47: #define SPREG asm("%edi") 48: #ifdef USE_TOS 49: #define CFAREG asm("%ecx") 50: #else 51: #define CFAREG asm("%edx") 52: #endif 53: #endif /* FORCE_REG */