Files
mercury/bytecode/Mmakefile
Levi Cameron 49438027b7 Major changes to bytecode interpreter.
Estimated hours taken: 200

Major changes to bytecode interpreter.
Beginnings of native code integration

bytecode/bytecode.c:
bytecode/bytecode.h:
bytecode/dict.c:
bytecode/dict.h:
bytecode/disasm.c:
bytecode/disasm.h:
bytecode/machine.c:
bytecode/machine.h:
bytecode/mbi_main.c:
bytecode/mdb.m:
bytecode/mem.c:
bytecode/mem.h:
bytecode/slist.c:
bytecode/slist.h:
bytecode/template.c:
bytecode/template.h:
bytecode/util.c:
bytecode/util.h:
        Removed. These are all the old bytecode files from
        before I started. Any parts that were useful have already
        been salvaged and used in the new interpreter.

bytecode/*:
	Added MB_Bytecode_Addr and MB_Native_Addr types to remove abiguity
	as to what type of code an instruction pointer points to, and
	provide compiler help for erroneously mixing pointer types.

bytecode/Mmakefile:
bytecode/Mmake.params:
        Makefile for test bytecode program. Note that any library
        functions that are called from bytecode must be compiled
        with trace information. (So their entry labels can be
        looked up)

bytecode/mb_basetypes.h:
        Added. Contains basic type definitions.

bytecode/mb_bytecode.c:
bytecode/mb_bytecode.h:
        Better error messages.
        Changed var_lists to direct pointers rather than
        lookups through data stacks (much simpler but stop you
        using realloc() on the bytecode argument data)
        Label addresses are computed at module load time rather
        than being looked up each jump
        Added endof_negation_goal
        Temporary stack slot numbers are translated to variable
        numbers (now there is no distinction between temps & vars)
        MB_read_cstring return value convention changed (see comments
	for how to now free the returned memory)
        Added distinction between functions and predicates
        Added enter_else
        Code addresses are all pointers rather than simple ints
	Added MB_Code_Addr type for pred_const and call instructions

bytecode/mb_disasm.c:
bytecode/mb_disasm.h:
        Added endof_negation_goal & enter_else
        Output strings are now easier to read
        MB_listing does not display anything for invalid addresses
        MB_listing takes line length argument

bytecode/mb_interface.c:
bytecode/mb_interface.h:
bytecode/mb_interface_stub.m:
        Interfacing between native/bytecode

bytecode/mb_machine.c:
bytecode/mb_machine.h:
bytecode/mb_machine_def.h:
        Large sections of code branched off into mb_module.?
        Most instructions completed, but not integrated with native
        code.
        Most of mb_machine_def has been removed as the native
        code functions provide the same functionality.

bytecode/mb_machine_show.c:
bytecode/mb_machine_show.h:
        Completely changed. Less information now as a lot of what
        was being displayed before cannot be determined as easily
        now that it is stored in the mercury runtime.

bytecode/mb_mem.c:
bytecode/mb_mem.h:
        Added routines for garbage collected memory

bytecode/mb_module.c:
bytecode/mb_module.h:
        Loading & accessing bytecode. Argument data indexes & id are now
        stored in a single word. (see MB_BCID_xxx macros).
        Call & label addresses are now calculated at load time.

bytecode/mb_stack.c:
bytecode/mb_stack.h:
        Added options for garbage collection of MB_Stack memory

bytecode/mb_util.c:
bytecode/mb_util.h:
        Miscellaneous string functions added and SAY() for debugging

bytecode/simple01.m:
        Added. Simple test program. (replace with whatever
        program is being tested at the time).
2001-02-01 05:20:32 +00:00

136 lines
3.4 KiB
Plaintext

#-----------------------------------------------------------------------------#
# Copyright (C) 1998-2001 The University of Melbourne.
# This file may only be copied under the terms of the GNU General
# Public License - see the file COPYING in the Mercury distribution.
#-----------------------------------------------------------------------------#
# Mmake - Mmake file for the bytecode interpreter
MAIN_TARGET=all
MERCURY_DIR=..
include $(MERCURY_DIR)/Mmake.common
-include ../Mmake.params
#-----------------------------------------------------------------------------#
# NOTE: any library functions that called from bytecode must be compiled
# with trace information. (So their entry labels can be looked up)
#-----------------------------------------------------------------------------#
MERCURY_SYSTEM = \
$(RUNTIME_DIR)/*.c $(RUNTIME_DIR)/*.h \
$(RUNTIME_DIR)/machdeps/*.c $(RUNTIME_DIR)/machdeps/*.h\
$(TRACE_DIR)/*.h $(TRACE_DIR)/*.c \
$(BROWSER_DIR)/*.h $(BROWSER_DIR)/*.c \
$(BOEHM_GC_DIR)/*.h $(BOEHM_GC_DIR)/include/*.h
MERCURY_INC = \
-I$(LIBRARY_DIR) \
-I$(RUNTIME_DIR) \
-I$(BOEHM_GC_DIR) \
-I$(BOEHM_GC_DIR)/include \
-I$(TRACE_DIR)
#-----------------------------------------------------------------------------#
CFLAGS = $(MERCURY_INC) -DMR_BYTECODE_CALLABLE -g
MGNUCFLAGS-mb_disasm = --no-ansi
MCFLAGS = --trace shallow --generate-bytecode -O 0
C2INITFLAGS = --trace
MLFLAGS = --trace
#-----------------------------------------------------------------------------#
# keep these lists in alphabetical order, please
# bytecode headers
MB_HDRS = \
mb_basetypes.h \
mb_bytecode.h \
mb_disasm.h \
mb_interface.h \
mb_machine.h \
mb_machine_def.h \
mb_machine_show.h \
mb_mem.h \
mb_module.h \
mb_stack.h \
mb_util.h
# bytecode c files
MB_CFILES = \
mb_bytecode.c \
mb_disasm.c \
mb_interface.c \
mb_interface_stub.c \
mb_machine.c \
mb_machine_show.c \
mb_mem.c \
mb_module.c \
mb_stack.c \
mb_util.c
# bytecode mercury files
MB_MFILES = \
# mb_interface_stub.m
# bytecode object files
MB_OBJS = $(MB_MFILES:%.m=%.o) $(MB_CFILES:%.c=%.o)
$(MB_OBJS): $(MB_HDRS)
#-----------------------------------------------------------------------------#
# The actual program (as distinct from bytecode interpreter)
HDRS =
CFILES =
MFILES = simple01.m
OBJS = simple01_init.o $(MFILES:%.m=%.o) $(CFILES:%.c=%.o)
$(OBJS): $(HDRS) $(MB_HDRS)
#-----------------------------------------------------------------------------#
ALL_HDRS = $(HDRS) $(MB_HDRS)
ALL_MFILES = $(MFILES) $(MB_MFILES)
ALL_CFILES = $(CFILES) $(MB_CFILES)
ALL_OBJS = $(OBJS) $(MB_OBJS)
ALL_DEPENDS=$(ALL_MFILES:%=%.depend)
#-----------------------------------------------------------------------------#
.PHONY: all
all: check
MLOBJS = $(MB_OBJS)
.PHONY: check
check: simple01
#-----------------------------------------------------------------------------#
# tags actually depends on $(MERCURY_SYSTEM) too but since changes to that
# hardly ever have an effect, just ignore them
tags: $(ALL_MFILES) $(ALL_CFILES) $(ALL_HDRS)
ctags $(TAGFLAGS) $(ALL_MFILES) $(ALL_CFILES) $(ALL_HDRS) $(MERCURY_SYSTEM)
.PHONY: depend
depend: $(ALL_DEPENDS)
.PHONY: clean_local
clean_local:
rm -f $(ALL_MFILES:%.m=%.mbc)
rm -f $(ALL_MFILES:%.m=%.bytedebug)
rm -f $(ALL_OBJS)
.PHONY: realclean_local
realclean_local:
rm -f tags test
#-----------------------------------------------------------------------------#