summaryrefslogtreecommitdiff
path: root/misc/pascal/include/podefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'misc/pascal/include/podefs.h')
-rw-r--r--misc/pascal/include/podefs.h204
1 files changed, 204 insertions, 0 deletions
diff --git a/misc/pascal/include/podefs.h b/misc/pascal/include/podefs.h
new file mode 100644
index 000000000..ba95b0d14
--- /dev/null
+++ b/misc/pascal/include/podefs.h
@@ -0,0 +1,204 @@
+/***********************************************************************
+ * podefs.h
+ * Logical P-code operation code 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 __PODEFS_H
+#define __PODEFS_H
+
+/* These definitions represent logical operations as needed by the
+ * the compiler. The specific INSN generation layer must interpret
+ * these requests as is appropriate to the supported INSNS.
+ */
+
+enum pcode_e
+{
+
+ /**-------------------------------------------------------------------
+ * OPCODES WITH NO ARGUMENTS
+ **-------------------------------------------------------------------**/
+
+ /* Program control (No stack arguments) */
+
+ opNOP = 0,
+
+ /* Arithmetic & logical & and integer conversions (One stack argument) */
+
+ opNEG, opABS, opINC, opDEC, opNOT,
+
+ /* Arithmetic & logical (Two stack arguments) */
+
+ opADD, opSUB, opMUL, opDIV, opMOD, opSLL, opSRL, opSRA, opOR, opAND,
+
+ /* Comparisons (One stack argument) */
+
+ opEQUZ, opNEQZ, opLTZ, opGTEZ, opGTZ, opLTEZ,
+
+ /* Comparisons (Two stack arguments) */
+
+ opEQU, opNEQ, opLT, opGTE, opGT, opLTE,
+ opBIT,
+
+ /* Load Immediate */
+
+ opLDI, opLDIB, opLDIM,
+
+ /* Store Immediate */
+
+ opSTI, opSTIB, opSTIM,
+
+ /* Data stack */
+
+ opDUP, opPUSHS, opPOPS,
+
+ /* Program control (No stack arguments)
+ * Behavior:
+ * Pop return address
+ * Pop saved base register (BR)
+ * Discard saved base address
+ * Set program counter (PC) to return address
+ */
+
+ opRET,
+
+ /* System Functions (No stack arguments) */
+
+ opEND,
+
+ /**-------------------------------------------------------------------
+ ** OPCODES WITH ONE ARGUMENT
+ **-------------------------------------------------------------------**/
+
+ /* Floating point operations: arg = FP op-code */
+
+ opFLOAT,
+
+ /* Program control: arg = unsigned label (One stack argument) */
+
+ opJEQUZ, opJNEQZ,
+
+ /* Program control: arg = unsigned label (no stack arguments) */
+
+ opJMP,
+
+ /* Program control: arg = unsigned label (One stack argument) */
+
+ opJEQU, opJNEQ, opJLT, opJGTE, opJGT, opJLTE,
+
+ /* Load: arg = unsigned base offset */
+
+ opLD, opLDH, opLDB, opLDM,
+
+ /* Store: arg = unsigned base offset */
+
+ opST, opSTB, opSTM,
+
+ /* Load Indexed: arg = unsigned base offset */
+
+ opLDX, opLDXB, opLDXM,
+
+ /* Store Indexed: arg16 = unsigned base offset */
+
+ opSTX, opSTXB, opSTXM,
+
+ /* Load address relative to stack base: arg = unsigned offset */
+
+ opLA,
+
+ /* Load absolute stack address: arg = RODATA offset (No stack arguments) */
+
+ opLAC,
+
+ /* Data stack: arg = 16 bit signed data (no stack arguments) */
+
+ opPUSH, opINDS,
+
+ /* Load address relative to stack base: arg1 = unsigned offset, TOS=index */
+
+ opLAX,
+
+ /* System functions: arg = 16-bit library call identifier */
+
+ opLIB,
+
+ /* Program control: arg = unsigned label (no stack arguments) */
+
+ opLABEL,
+
+ /**-------------------------------------------------------------------
+ ** OPCODES WITH TWO ARGUMENTS
+ **-------------------------------------------------------------------**/
+
+ /* Program Control: arg1 = level; arg2 = unsigned label */
+
+ opPCAL,
+
+ /* Load: arg1 = level; arg2 = signed frame offset */
+
+ opLDS, opLDSH, opLDSB, opLDSM,
+
+ /* Store: arg1 = level; arg2 = signed frame offset */
+
+ opSTS, opSTSB, opSTSM,
+
+ /* Load Indexed: arg1 = level; arg2 = signed frame offset */
+
+ opLDSX, opLDSXB, opLDSXM,
+
+ /* Store Indexed: arg1 = level; arg2 = signed frame offset */
+
+ opSTSX, opSTSXB, opSTSXM,
+
+ /* FOR LAS/LASX arg1 = level; arg2 = signed frame offset
+ * (no stack arguments)
+ */
+
+ opLAS, opLASX,
+
+ /* System calls:
+ * For SYSIO: arg1 = file number; arg2 = sub-function code
+ */
+
+ opSYSIO,
+
+ /* Psuedo-operations:
+ * For LINE: arg1 = file number; arg2 = line number
+ */
+
+ opLINE,
+
+ NUM_OPCODES
+};
+
+#endif /* __PODEFS_H */