summaryrefslogtreecommitdiffstats
path: root/misc/pascal
diff options
context:
space:
mode:
authorpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2008-01-05 16:05:26 +0000
committerpatacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679>2008-01-05 16:05:26 +0000
commit0c02e4d445963f74bfc757393627a832cd9e3888 (patch)
tree1fa2bf2df4c68a17bcf315d99275a1a77ee5413f /misc/pascal
parent6245ccbefa47b00dce7f9901bf7508bc2e2f7bd1 (diff)
Pascal
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@498 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'misc/pascal')
-rw-r--r--misc/pascal/insn16/Makefile82
-rw-r--r--misc/pascal/insn16/libinsn/Makefile76
-rw-r--r--misc/pascal/insn32/include/builtins.h444
-rw-r--r--misc/pascal/insn32/include/pexec.h158
-rw-r--r--misc/pascal/insn32/include/rinsn32.h216
5 files changed, 976 insertions, 0 deletions
diff --git a/misc/pascal/insn16/Makefile b/misc/pascal/insn16/Makefile
new file mode 100644
index 0000000000..4cd99082e6
--- /dev/null
+++ b/misc/pascal/insn16/Makefile
@@ -0,0 +1,82 @@
+############################################################################
+# insn16/Makefile
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+#
+# Directories
+#
+INSNDIR = ${shell pwd}
+PASCAL = $(INSNDIR)/..
+
+include $(PASCAL)/Make.config
+include $(PASCAL)/Make.defs
+
+LIBDIR = $(PASCAL)/lib
+BINDIR = $(PASCAL)/bin16
+LIBINSNDIR = $(INSNDIR)/libinsn
+POPTDIR = $(INSNDIR)/popt
+PRUNDIR = $(INSNDIR)/prun
+PLISTDIR = $(INSNDIR)/plist
+
+#
+# Objects and targets
+#
+all: libinsn popt prun plist
+PHONY: all libinsn popt prun plist clean
+
+$(LIBINSNDIR)/libinsn.a:
+ $(MAKE) -C $(LIBINSNDIR)
+
+libinsn.a: $(LIBINSNDIR)/libinsn.a
+
+$(BINDIR)/popt:
+ $(MAKE) -C $(POPTDIR)
+
+popt: $(BINDIR)/popt
+
+$(BINDIR)/prun:
+ $(MAKE) -C $(PRUNDIR)
+
+prun: $(BINDIR)/prun
+
+$(BINDIR)/plist:
+ $(MAKE) -C $(PLISTDIR)
+
+plist: $(BINDIR)/plist
+
+clean:
+ $(RM) libinsn.a core *~
+ $(MAKE) -C $(LIBINSNDIR) clean
+ $(MAKE) -C $(POPTDIR) clean
+ $(MAKE) -C $(PRUNDIR) clean
+ $(MAKE) -C $(PLISTDIR) clean
diff --git a/misc/pascal/insn16/libinsn/Makefile b/misc/pascal/insn16/libinsn/Makefile
new file mode 100644
index 0000000000..b0aa003e03
--- /dev/null
+++ b/misc/pascal/insn16/libinsn/Makefile
@@ -0,0 +1,76 @@
+############################################################################
+# insn16/libinsn/Makefile
+#
+# Copyright (C) 2008 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+#
+# Directories
+#
+LIBINSNDIR = ${shell pwd}
+INSNDIR = $(LIBINSNDIR)/..
+PASCAL = $(LIBINSNDIR)/../..
+
+include $(PASCAL)/Make.config
+include $(PASCAL)/Make.defs
+
+INCDIR = $(PASCAL)/include
+LIBDIR = $(PASCAL)/lib
+
+#
+# Tools
+#
+EXTRA_INCLUDES = -I$(INSNDIR)/include
+INCLUDES += $(EXTRA_INCLUDES)
+CFLAGS += $(EXTRA_INCLUDES)
+
+#
+# Objects and targets
+#
+LIBINSNSRCS = paddopcode.c paddtmpopcode.c pdasm.c pgen.c \
+ pgetopcode.c preloc.c
+LIBINSNOBJS = $(LIBINSNSRCS:.c=.o)
+
+OBJS = $(LIBINSNOBJS)
+
+all: libinsn.a
+.PHONY: all libinsn.a clean
+
+$(OBJS): %.o: %.c
+ $(CC) -c $(CFLAGS) $< -o $@
+
+$(LIBDIR)/libinsn.a: $(LIBINSNOBJS)
+ $(AR) $(ARFLAGS) $@ $^
+
+libinsn.a: $(LIBDIR)/libinsn.a
+
+clean:
+ $(RM) libinsn.a *.o core *~
diff --git a/misc/pascal/insn32/include/builtins.h b/misc/pascal/insn32/include/builtins.h
new file mode 100644
index 0000000000..c60e44eea2
--- /dev/null
+++ b/misc/pascal/insn32/include/builtins.h
@@ -0,0 +1,444 @@
+/***********************************************************************
+ * builtins.h
+ * Definitions of built-in function calls.
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ***********************************************************************/
+
+#ifndef __BUILTINS_H
+#define __BUILTINS_H
+
+/***********************************************************************
+ * Definitions
+ ***********************************************************************/
+
+#define MAX_BUILTIN_ARGS 3
+
+#define ILLEGAL_BUILTIN_INIT \
+ { NULL, 0, 0, { 0 }}
+
+/* SYSIO built-ins ****************y*************************************/
+
+/* boolean _xeof(fileno); */
+#define xEOF_INIT \
+ { "_xeof", sBOOLEAN_SIZE, 1, { sINT_SIZE }}
+
+/* boolean _xeoln(fileno); */
+#define xEOLN_INIT \
+ { "_xeoln", sBOOLEAN_SIZE, 1, { sINT_SIZE }}
+
+/* void _xreset(int fileno); */
+#define xRESET_INIT \
+ { "_xreset", 0, 1, { sINT_SIZE }}
+
+/* void _xrewrite(int fileno); */
+#define xREWRITE_INIT \
+ { "_xrewrite", 0, 1, { sINT_SIZE }}
+
+/* void _xreadln(int fileno); */
+#define xREADLN_INIT \
+ { "_xreadln", 0, 1, { sINT_SIZE }}
+
+#define xREAD_PAGE_INIT ILLEGAL_BUILTIN_INIT
+
+/* void _xread_binary(int fileno, char *buffer, int buffersize); */
+#define xREAD_BINARY_INIT \
+ { "_xread_binary", 0, 3, { sINT_SIZE, sPTR_SIZE, sINT_SIZE }}
+
+/* void _xread_int(int fileno, int *value); */
+#define xREAD_INT_INIT \
+ { "_xread_int", 0, 2, { sINT_SIZE, sPTR_SIZE }}
+
+/* void _xread_char(int fileno, char *value); */
+#define xREAD_CHAR_INIT \
+ { "_xread_char", 0, 2, { sINT_SIZE, sPTR_SIZE }}
+
+/* void _xread_string(int fileno, char *string, int stringsize); */
+#define xREAD_STRING_INIT \
+ { "_xread_string", 0, 3, { sINT_SIZE, sPTR_SIZE, sINT_SIZE }}
+
+/* void _xread_real(int fileno, real *value); */
+#define xREAD_REAL_INIT \
+ { "_xread_real", 0, 2, { sINT_SIZE, sPTR_SIZE }}
+
+/* void _xwriteln(int fileno); */
+#define xWRITELN_INIT \
+ { "_xwriteln", 0, 1, { sINT_SIZE }}
+
+/* void _xwrite_page(int fileno); */
+#define xWRITE_PAGE_INIT \
+ { "_xwrite_page", 0, 1, { sINT_SIZE }}
+
+/* void _write_binary(int fileno, char *buffer, int buffersize); */
+#define xWRITE_BINARY_INIT \
+ { "_xwrite_binary", 0, 3, { sINT_SIZE, sPTR_SIZE, sINT_SIZE }}
+
+/* void _write_int(int fileno, int value); */
+#define xWRITE_INT_INIT \
+ { "_xwrite_int", 0, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* void _write_char(int fileno, int value); */
+#define xWRITE_CHAR_INIT \
+ { "_xwrite_char", 0, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* void _write_string(int fileno, char *string, int stringsize); */
+#define xWRITE_STRING_INIT \
+ { "_xwrite_string", 0, 3, { sINT_SIZE, sPTR_SIZE, sINT_SIZE }}
+
+/* void _write_real(int fileno, real value); */
+#define xWRITE_REAL_INIT \
+ { "_xwrite_real", 0, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* Runtime library built-ins *******************************************/
+/* string _lbgetenv(string *name); */
+#define lbGETENV_INIT \
+ { "_lbgetenv", sRSTRING_SIZE, 1, { sRSTRING_SIZE }}
+
+/* void _lbstr2str(string src, string dest); */
+#define lbSTR2STR_INIT \
+ { "_lbstgr2str", 0, 2, { sRSTRING_SIZE, sRSTRING_SIZE }}
+
+/* void _lbcstr2str(string src, string dest); */
+#define lbCSTR2STR_INIT \
+ { "_lbcstr2str", 0, 2, { sRSTRING_SIZE, sRSTRING_SIZE }}
+
+/* void _libstr2rstr(string src, string dest); */
+#define lbSTR2RSTR_INIT \
+ { "_lbstr2rstr", 0, 2, { sRSTRING_SIZE, sRSTRING_SIZE }}
+
+/* void _lbcstr2str(string src, string dest); */
+#define lbCSTR2RSTR_INIT \
+ { "_lbcstr2rstr", 0, 2, { sRSTRING_SIZE, sRSTRING_SIZE }}
+
+/* void _lbval(const string s, int *v, int *code); */
+#define lbVAL_INIT \
+ { "_lbval", 0, 2, { sRSTRING_SIZE, sPTR_SIZE, sPTR_SIZE }}
+
+/* string _lbmkstk(void); */
+#define lbMKSTK_INIT \
+ { "_lbmkstk", sRSTRING_SIZE, 0, { 0 }}
+
+/* string mkstkstr(string name); */
+#define lbMKSTKSTR_INIT \
+ { "_lbmkstkstr", sRSTRING_SIZE, 1, { sRSTRING_SIZE }}
+
+/* string _lbmkstkc(int c); */
+#define lbMKSTKC_INIT \
+ { "_lbmkstkc", sRSTRING_SIZE, 1, { sINT_SIZE }}
+
+/* string _lbstgrcat(string name, int c); */
+#define lbSTRCAT_INIT \
+ { "_lbstrcat", sRSTRING_SIZE, 2, { sRSTRING_SIZE, sINT_SIZE }}
+
+/* string _lbstrcatc(string name, int c); */
+#define lbSTRCATC_INIT \
+ { "_lbstrcatc", sRSTRING_SIZE, 2, { sRSTRING_SIZE, sINT_SIZE }}
+
+/* int _lbstrcmp(string name1, string name2); */
+#define lbSTRCMP_INIT \
+ { "_lbstrcmp", sINT_SIZE, 2, { sRSTRING_SIZE, sRSTRING_SIZE }}
+
+/* Floating point library built-ins ************************************/
+
+/* real _fpfloat(int v); */
+#define fpFLOAT_INIT \
+ { "_fpfloat", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* int _fptrunc(real v); */
+#define fpTRUNC_INIT \
+ { "_fptrunc", sINT_SIZE, 1, { sREAL_SIZE }}
+
+/* int _fpround(real v); */
+#define fpROUND_INIT \
+ { "_fpround", sINT_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpadd_rr(real a, real b); */
+#define fpADD_RR_INIT \
+ { "_fpadd_rr", sREAL_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* real _fpadd_ri(int a, real b); */
+#define fpADD_RI_INIT \
+ { "_fpadd_ri", sREAL_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* real _fpadd_ir(real a, int b); */
+#define fpADD_IR_INIT \
+ { "_fpadd_ir", sREAL_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* real _fpadd_ii(int a, int b); */
+#define fpADD_II_INIT \
+ { "_fpadd_ii", sREAL_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* real _fpsub_rr(real a, real b); */
+#define fpSUB_RR_INIT \
+ { "_fpsub_rr", sREAL_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* real _fpsub_ri(int a, real b); */
+#define fpSUB_RI_INIT \
+ { "_fpsub_ri", sREAL_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* real _fpsub_ir(real a, int b); */
+#define fpSUB_IR_INIT \
+ { "_fpsub_ir", sREAL_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* real _fpsub_ii(int a, int b); */
+#define fpSUB_II_INIT \
+ { "_fpsub_ii", sREAL_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* real _fpmul_rr(real a, real b); */
+#define fpMUL_RR_INIT \
+ { "_fpmul_rr", sREAL_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* real _fpmul_ri(int a, real b); */
+#define fpMUL_RI_INIT \
+ { "_fpmul_ri", sREAL_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* real _fpmul_ir(real a, int b); */
+#define fpMUL_IR_INIT \
+ { "_fpmul_ir",sREAL_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* real _fpmul_ii(int a, int b); */
+#define fpMUL_II_INIT \
+ { "_fpmul_ii", sREAL_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* real _fpdiv_rr(real a, real b); */
+#define fpDIV_RR_INIT \
+ { "_fpdiv_rr", sREAL_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* real _fpdiv_ri(int a, real b); */
+#define fpDIV_RI_INIT \
+ { "_fpdiv_ri",sREAL_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* real _fpdiv_ir(real a, int b); */
+#define fpDIV_IR_INIT \
+ { "_fpdiv_ir",sREAL_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* real _fpdiv_ii(int a, int b); */
+#define fpDIV_II_INIT \
+ { "_fpdiv_ii",sREAL_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* real _fpmod_rr(real a, real b); */
+#define fpMOD_RR_INIT \
+ { "_fpmod_rr", sREAL_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* real _fpmod_ri(int a, real b); */
+#define fpMOD_RI_INIT \
+ { "_fpmod_ri", sREAL_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* real _fpmod_ir(real a, int b); */
+#define fpMOD_IR_INIT \
+ { "_fpmod_ir", sREAL_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* real _fpmod_ii(int a, int b); */
+#define fpMOD_II_INIT \
+ { "_fpmod_ii", sREAL_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fpequ_rr(real a, real b); */
+#define fpEQU_RR_INIT \
+ { "_fpequ_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fpequ_ri(int a, real b); */
+#define fpEQU_RI_INIT \
+ { "_fpequ_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fpequ_ir(real a, int b); */
+#define fpEQU_IR_INIT \
+ { "_fpequ_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fpequ_ii(int a, int b); */
+#define fpEQU_II_INIT \
+ { "_fpequ_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fpneq_rr(real a, real b); */
+#define fpNEQ_RR_INIT \
+ { "_fpneq_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fpneq_ri(int a, real b); */
+#define fpNEQ_RI_INIT \
+ { "_fpneq_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fpneq_ir(real a, int b); */
+#define fpNEQ_IR_INIT \
+ { "_fpneq_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fpneq_ii(int a, int b); */
+#define fpNEQ_II_INIT \
+ { "_fpneq_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fplt_rr(real a, real b); */
+#define fpLT_RR_INIT \
+ { "_fplt_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fplt_ri(int a, real b); */
+#define fpLT_RI_INIT \
+ { "_fplt_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fplt_ir(real a, int b); */
+#define fpLT_IR_INIT \
+ { "_fplt_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fplt_ii(int a, int b); */
+#define fpLT_II_INIT \
+ { "_fplt_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fpgte_rr(real a, real b); */
+#define fpGTE_RR_INIT \
+ { "_fpgte_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fpgte_ri(int a, real b); */
+#define fpGTE_RI_INIT \
+ { "_fpgte_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fpgte_ir(real a, int b); */
+#define fpGTE_IR_INIT \
+ { "_fpgte_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fpgte_ii(int a, int b); */
+#define fpGTE_II_INIT \
+ { "_fpgte_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fpgt_rr(real a, real b); */
+#define fpGT_RR_INIT \
+ { "_fpgt_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fpgt_ri(int a, real b); */
+#define fpGT_RI_INIT \
+ { "_fpgt_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fpgt_ir(real a, int b); */
+#define fpGT_IR_INIT \
+ { "_fpgt_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fpgt_ii(int a, int b); */
+#define fpGT_II_INIT \
+ { "_fpgt_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* boolean _fplte_rr(real a, real b); */
+#define fpLTE_RR_INIT \
+ { "_fplte_rr", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sREAL_SIZE }}
+
+/* boolean _fplte_ri(int a, real b); */
+#define fpLTE_RI_INIT \
+ { "_fplte_ri", sBOOLEAN_SIZE, 2, { sINT_SIZE, sREAL_SIZE }}
+
+/* boolean _fplte_ir(real a, int b); */
+#define fpLTE_IR_INIT \
+ { "_fplte_ir", sBOOLEAN_SIZE, 2, { sREAL_SIZE, sINT_SIZE }}
+
+/* boolean _fplte_ii(int a, int b); */
+#define fpLTE_II_INIT \
+ { "_fplte_ii", sBOOLEAN_SIZE, 2, { sINT_SIZE, sINT_SIZE }}
+
+/* real _fpneg_r(real v); */
+#define fpNEG_R_INIT \
+ { "_fpneg_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpneg_i(int v); */
+#define fpNEG_I_INIT \
+ { "_fpneg_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpabs_r(real v); */
+#define fpABS_R_INIT \
+ { "_fpabs_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpabs_i(int v); */
+#define fpABS_I_INIT \
+ { "_fpabs_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpsqr_r(real v); */
+#define fpSQR_R_INIT \
+ { "_fpsqr_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpsqr_i(int v); */
+#define fpSQR_I_INIT \
+ { "_fpsqr_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpsqrt_r(real v); */
+#define fpSQRT_R_INIT \
+ { "_fpsqrt_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpsqrt_i(int v); */
+#define fpSQRT_I_INIT \
+ { "_fpsqrt_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpsin_r(real v); */
+#define fpSIN_R_INIT \
+ { "_fpsin_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpsin_i(int v); */
+#define fpSIN_I_INIT \
+ { "_fpsin_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpcos_r(real v); */
+#define fpCOS_R_INIT \
+ { "_fpcos_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpcos_i(int v); */
+#define fpCOS_I_INIT \
+ { "_fpcos_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpatan_r(real v); */
+#define fpATAN_R_INIT \
+ { "_fpatan_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpatan_i(int v); */
+#define fpATAN_I_INIT \
+ { "_fpatan_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpln_r(real v); */
+#define fpLN_R_INIT \
+ { "_fpln_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpln_i(int v); */
+#define fpLN_I_INIT \
+ { "_fpln_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/* real _fpexp_r(real v); */
+#define fpEXP_R_INIT \
+ { "_fpexpr_r", sREAL_SIZE, 1, { sREAL_SIZE }}
+
+/* real _fpexp_i(int v); */
+#define fpEXP_I_INIT \
+ { "_fpexpr_i", sREAL_SIZE, 1, { sINT_SIZE }}
+
+/***********************************************************************
+ * Public Types
+ ***********************************************************************/
+
+struct regm_builtin_s
+{
+ const char *szName;
+ uint32 wRetSize;
+ uint32 nParms;
+ uint32 wArgSize[MAX_BUILTIN_ARGS];
+};
+
+#endif /* __BUILTINS_H */
diff --git a/misc/pascal/insn32/include/pexec.h b/misc/pascal/insn32/include/pexec.h
new file mode 100644
index 0000000000..c8b530afc3
--- /dev/null
+++ b/misc/pascal/insn32/include/pexec.h
@@ -0,0 +1,158 @@
+/****************************************************************************
+ * pexec.h
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __PEXEC_H
+#define __PEXEC_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+/****************************************************************************
+ * Definitions
+ ****************************************************************************/
+
+#define BPERI 2
+#define ITOBSTACK(i) ((i) << 1)
+#define BTOISTACK(i) ((i) >> 1)
+#define ROUNDBTOI(i) (((i) + 1) >> 1)
+
+/****************************************************************************
+ * Type Definitions
+ ****************************************************************************/
+
+typedef uint32 ustack_t; /* Stack values are 16-bits in length */
+typedef sint32 sstack_t;
+typedef uint32 addr_t; /* Addresses are 16-bits in length */
+typedef uint16 level_t; /* Limits to MAXUINT16 levels */
+
+union stack_u
+{
+ ustack_t *i;
+ ubyte *b;
+};
+typedef union stack_u stackType;
+
+/* This structure describes the parameters needed to initialize the p-code
+ * interpreter.
+ */
+
+struct pexec_attr_s
+{
+ /* Instruction space (I-Space) */
+
+ FAR ubyte *ispace; /* Allocated I-Space containing p-code data */
+ addr_t entry; /* Entry point */
+ addr_t maxpc; /* Last valid p-code address */
+
+ /* Read-only data block */
+
+ FAR ubyte *rodata; /* Address of read-only data block */
+ addr_t rosize; /* Size of read-only data block */
+
+ /* Allocate for variable storage */
+
+ addr_t varsize; /* Variable storage size */
+ addr_t strsize; /* String storage size */
+};
+
+/* This structure defines the current state of the p-code interpreter */
+
+struct pexec_s
+{
+ /* This is the emulated P-Machine stack (D-Space) */
+
+ stackType dstack;
+
+ /* This is the emulated P-Machine instruction space (I-Space) */
+
+ FAR ubyte *ispace;
+
+ /* Address of last valid P-Code */
+
+ addr_t maxpc;
+
+ /* These are the emulated P-Machine registers:
+ *
+ * spb: Base of the stack
+ * sp: The Pascal stack pointer
+ * lsp: Level stack pointer
+ * csp: The current top of the stack used to manage string
+ * storage
+ * fp: Base Register of the current stack frame. Holds the address
+ * of the base of the stack frame of the current block.
+ * fop: Pointer to section containing read-only data
+ * pc: Holds the current p-code location
+ */
+
+ addr_t spb; /* Pascal stack base */
+ addr_t sp; /* Pascal stack pointer */
+ addr_t lsp; /* Level stack pointer */
+ addr_t csp; /* Character stack pointer */
+ addr_t fp; /* Base of the current frame */
+ addr_t rop; /* Read-only data pointer */
+ addr_t pc; /* Program counter */
+
+ /* Info needed to perform a simulated reset */
+
+ addr_t strsize; /* String stack size */
+ addr_t rosize; /* Read-only stack size */
+ addr_t entry; /* Entry point */
+ addr_t stacksize; /* (debug only) */
+};
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#ifdef __cplusplus
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+EXTERN FAR struct pexec_s *pload(const char *filename, addr_t varsize, addr_t strsize);
+EXTERN FAR struct pexec_s *pexec_init(struct pexec_attr_s *attr);
+EXTERN int pexec(FAR struct pexec_s *st);
+EXTERN void pexec_reset(struct pexec_s *st);
+EXTERN void pexec_release(struct pexec_s *st);
+
+#undef EXTERN
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __PEXEC_H */ \ No newline at end of file
diff --git a/misc/pascal/insn32/include/rinsn32.h b/misc/pascal/insn32/include/rinsn32.h
new file mode 100644
index 0000000000..f2a89e5fa4
--- /dev/null
+++ b/misc/pascal/insn32/include/rinsn32.h
@@ -0,0 +1,216 @@
+/***********************************************************************
+ * rinsn32.h
+ * 32-bit register module instruction definitions
+ *
+ * Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ***********************************************************************/
+
+#ifndef __RINSN32_H
+#define __RINSN32_H
+
+/* 32-bit op-code bit definitions
+ *
+ * Machine model:
+ *
+ * SPB 32-bit Pascal stack base address
+ * SP 32-bit Pascal stack pointer
+ * LSP 32-bit level stack pointer
+ * CSB 32-bit character stack base address
+ * PC 32-bit program counter
+ * ZRO 32-bit register containing zero (like MIPS)
+ * Rn 32-bit general purpose registers
+ *
+ * Parameters passed in registers up to a limit. Parameters
+ * beyond the limit are passed on the stack. Return values
+ * are provided in these same registers.
+ *
+ * Instruction forms
+ *
+ * FORM 1: <op> <roperand1>, <operand2>
+ * FORM 2: <op> <rdest>, <operand2>
+ * FORM 3: <op> <rdest>, <roperand1>, <operand2>
+ * <rsrc>, <roperand1>, <operand2>
+ * FORM 4: <op> <pc-offset>
+ *
+ * Where
+ * <op> operation code
+ * [cc] optional conditional execution
+ * [S] optional set condition code
+ * <rdest> register holding the result
+ * <rsrc> register holding data to be stored.
+ * <roperand1> register holding the first operand
+ * <operand2> One of <roperand2> or <immediate>
+ * <roperand2> register holding the second operand
+ * <immediate> Immediate constant data (short).
+ * <pc-offset> Word offset from current PC
+ *
+ * NOTE: This instruction set is inspired by the ARM instruction
+ * set, but is intended to be a general register model. It does
+ * not exploit certain ARM-isms such as "flexible" operands, conditional
+ * execution, post-incrementing, pre-incrementing, pc-relative addressing,
+ * optional register writeback, or ldm/stm with register sets, etc.
+ */
+
+#define FORM1(o) (((o) & 0xe0) == 0x00)
+#define FORM1R(o) (((o) & 0xf0) == 0x00)
+#define FORM1I(o) (((o) & 0xf0) == 0x10)
+#define FORM1O(o) ((o) & 0x0f)
+
+#define FORM2(o) (((o) & 0xe0) == 0x20)
+#define FORM2R(o) (((o) & 0xf0) == 0x20)
+#define FORM2I(o) (((o) & 0xf0) == 0x30)
+#define FORM2O(o) ((o) & 0x0f)
+
+#define FORM3(o) (((o) & 0x80) == 0x80)
+#define FORM3R(o) (((o) & 0xc0) == 0x80)
+#define FORM3I(o) (((o) & 0xc0) == 0xc0)
+#define FORM3O(o) ((o) & 0x3f)
+
+#define FORM4(o) (((o) & 0xc0) == 0x40)
+#define FORM3O(o) ((o) & 0x3f)
+
+struct rinsn_u
+{
+ ubyte opcode;
+ union {
+ struct {
+ uint32 rop1;
+ uint32 rop2;
+ } r1;
+ struct {
+ uint32 rop1;
+ uint32 im2;
+ } i1;
+ struct {
+ uint32 rdest;
+ uint32 rop;
+ } r2;
+ struct {
+ uint32 rdest;
+ uint32 im;
+ } i2;
+ struct {
+ uint32 rdest;
+ uint32 rop1;
+ uint32 rop2;
+ } r3;
+ struct {
+ uint32 rdest;
+ uint32 rop1;
+ uint32 im2;
+ } i3;
+ struct {
+ uint32 offset;
+ } i4;
+ } f;
+};
+typedef struct rinsn_u RINSN32;
+
+/* FORM 1: Comparisons */
+
+#define rCMP (0x00) /* Form 1: set <cc> after <roperand1> - <roperand2> */
+#define rCMPI (0x10) /* Form 1: set <cc> after <roperand1> - <immediate> */
+#define rCMN (0x01) /* Form 1: set <cc> after <roperand1> + <roperand2> */
+#define rCMNI (0x11) /* Form 1: set <cc> after <roperand1> + <immediate> */
+
+/* FORM 2: Data movement */
+
+#define rMOV (0x20) /* Form 1: <rdest> = <roperand2> */
+#define rMOVI (0x30) /* Form 1: <rdist> = <immediate> */
+#define rMVN (0x21) /* Form 1: <rdest> = ~<roperand2> */
+#define rMVNI (0x31) /* Form 1: <rdist> = ~<immediate> */
+
+/* FORM 4: Program control */
+
+#define rB (0x40) /* PC += <pcoffset> << 2 */
+#define rBEQ (0x41) /* if <cc>->EQ, PC += <pcoffset> << 2 */
+#define rBNE (0x42) /* if <cc>->NEQ, PC += <pcoffset> << 2 */
+#define rBLT (0x43) /* if <cc>->LT, PC += <pcoffset> << 2 */
+#define rBGTE (0x44) /* if <cc>->GTE, PC += <pcoffset> << 2 */
+#define rBGT (0x45) /* if <cc>->GT, PC += <pcoffset> << 2 */
+#define rBLTE (0x46) /* if <cc>->KTE, PC += <pcoffset> << 2 */
+#define rBL (0x47) /* LR=next PC, PC += <pcoffset> << 2 */
+
+/* FORM 3: Arithmetic and logical operations */
+
+#define rADD (0x80) /* Form 3: <rdest> = <roperand1> + <roperand2> */
+#define rADDI (0xc0) /* Form 3: <rdest> = <roperand1> + <immediate> */
+#define rSUB (0x81) /* Form 3: <rdest> = <roperand1> - <roperand2> */
+#define rSUBI (0xc1) /* Form 3: <rdest> = <roperand1> - <immediate> */
+#define rRSB (0x82) /* Form 3: <rdest> = -<roperand1> + <roperand2> */
+#define rRSBI (0xc2) /* Form 3: <rdest> = -<roperand2> + <immediate> */
+#define rMUL (0x83) /* Form 3: <rdest> = <roperand1> * <roperand2> */
+#define rMULI (0xc3) /* Form 3: <rdest> = <roperand1> * <immediate> */
+#define rDIV (0x84) /* Form 3: <rdest> = <roperand1> / <roperand2> */
+#define rDIVI (0xc4) /* Form 3: <rdest> = <roperand1> / <immediate> */
+#define rMOD (0x85) /* Form 3: <rdest> = <roperand1> % <roperand2> */
+#define rMODI (0xc5) /* Form 3: <rdest> = <roperand1> % <immediate> */
+#define rSLL (0x86) /* Form 3: <rdest> = <roperand1> << <roperand2> */
+#define rSLLI (0xc6) /* Form 3: <rdest> = <roperand1> << <immediate> */
+#define rSRL (0x87) /* Form 3: <rdest> = <roperand1> >> <roperand2> */
+#define rSRLI (0xc7) /* Form 3: <rdest> = <roperand1> >> <immediate> */
+#define rSRA (0x88) /* Form 3: <rdest> = <roperand1> >> <roperand2> */
+#define rSRAI (0xc8) /* Form 3: <rdest> = <roperand1> >> <immediate> */
+#define rOR (0x89) /* Form 3: <rdest> = <roperand1> | <roperand2> */
+#define rORI (0xc9) /* Form 3: <rdest> = <roperand1> | <immediate> */
+#define rAND (0x8a) /* Form 3: <rdest> = <roperand1> & <roperand2> */
+#define rANDI (0xca) /* Form 3: <rdest> = <roperand1> & <immediate> */
+#define rXOR (0x8b) /* Form 3: <rdest> = <roperand1> xor <roperand2> */
+#define rXORI (0xcb) /* Form 3: <rdest> = <roperand1> xor <immediate> */
+#define rANDN (0x8c) /* Form 3: <rdest> = <roperand1> & ~<roperand2> */
+#define rANDNI (0xcc) /* Form 3: <rdest> = <roperand1> & ~<immediate> */
+
+/* FORM 3: Loads and stores */
+
+#define rLD (0x90) /* Form 3: <rdest> = (<roperand1> + <roperand2>) */
+#define rLDI (0xd0) /* Form 3: <rdest> = (<roperand1> + (<immediate> << 2)) */
+#define rLDH (0x91) /* Form 3: <rdest> = (<roperand1> + <roperand2>) */
+#define rLDIH (0xd1) /* Form 3: <rdest> = (<roperand1> + (<immediate> << 1)) */
+#define rLDB (0x92) /* Form 3: <rdest> = (<roperand1> + <roperand2>) */
+#define rLDIB (0xd2) /* Form 3: <rdest> = (<roperand1> + <immediate>) */
+
+#define rLDM (0xd3) /* Form 3: Load <immediate> registers. Source
+ * address is roperand1, first dest register is
+ * <rdest>, register count is <immediate> */
+
+#define rST (0x94) /* Form 3: (<roperand1> + <roperand2>) = <rsrc> */
+#define rSTI (0xd4) /* Form 3: (<roperand1> + (<immediate> << 2)) = <rsrc> */
+#define rSTH (0x95) /* Form 3: (<roperand1> + <roperand2>) = <rsrc> */
+#define rSTIH (0xd5) /* Form 3: (<roperand1> + (<immediate> << 1)) = <rsrc> */
+#define rSTB (0x96) /* Form 3: (<roperand1> + <roperand2>) = <rsrc> */
+#define rSTIB (0xd6) /* Form 3: (<roperand1> + <immediate>) = <rsrc> */
+
+#define rSTM (0xd7) /* Form 3: Store <immediate> registers. Destination
+ * address is roperand1, first source register is
+ * <rsrc>, register count is <immediate> */
+
+#endif /* __RINSN32_H */