diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-05 17:44:11 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2012-08-05 17:44:11 +0000 |
commit | 33ea935548e0389f36f583fd826a09b7277ce85c (patch) | |
tree | 1cb241b0a84123081c115f5f382fa207ad83cb68 /misc/pascal/insn16/include | |
parent | 3609cc6eb6f7f30654cb95b0ce02487c742c9487 (diff) | |
download | nuttx-33ea935548e0389f36f583fd826a09b7277ce85c.tar.gz nuttx-33ea935548e0389f36f583fd826a09b7277ce85c.tar.bz2 nuttx-33ea935548e0389f36f583fd826a09b7277ce85c.zip |
I learned how to spell PSEUDO
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5010 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'misc/pascal/insn16/include')
-rw-r--r-- | misc/pascal/insn16/include/pinsn16.h | 816 |
1 files changed, 408 insertions, 408 deletions
diff --git a/misc/pascal/insn16/include/pinsn16.h b/misc/pascal/insn16/include/pinsn16.h index a966f7aa3..92f335400 100644 --- a/misc/pascal/insn16/include/pinsn16.h +++ b/misc/pascal/insn16/include/pinsn16.h @@ -1,408 +1,408 @@ -/****************************************************************************
- * pinsn16.h
- * 16-bit 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 __PINSN16_H
-#define __PINSN16_H
-
-/****************************************************************************
- * Included Files
- ****************************************************************************/
-
-/****************************************************************************
- * Definitions
- ****************************************************************************/
-
-/* Op-code bit definitions */
-
-#define o16 (0x80)
-#define o8 (0x40)
-
-/* Opcode Encoding Summary:
- *
- * NO ARGS arg8 ONLY arg16 ONLY BOTH
- * 00xx xxxx 01xx xxxx 10xx xxxx 11xx xxxx
- * xx00 0000 NOP --- --- ---
- * xx00 0001 NEG --- --- ---
- * xx00 0010 ABS --- --- ---
- * xx00 0011 INC --- --- ---
- * xx00 0100 DEC --- --- ---
- * xx00 0101 NOT --- --- ---
- * xx00 0110 ADD --- --- ---
- * xx00 0111 SUB --- --- ---
- * xx00 1000 MUL --- --- PCAL l,ilbl
- * xx00 1001 DIV --- --- ---
- * xx00 1010 MOD --- --- ---
- * xx00 1011 SLL --- --- ---
- * xx00 1100 SRL --- --- ---
- * xx00 1101 SRA --- --- ---
- * xx00 1110 OR --- --- ---
- * xx00 1111 AND --- --- ---
- *
- * xx01 0000 EQUZ --- JEQUZ ilbl ---
- * xx01 0001 NEQZ --- JNEQZ ilbl ---
- * xx01 0010 LTZ --- JLTZ ilbl ---
- * xx01 0011 GTEZ --- JGTEZ ilbl ---
- * xx01 0100 GTZ --- JGTZ ilbl ---
- * xx01 0101 LTEZ --- JLTEZ ilbl ---
- * xx01 0110 --- --- JMP ilbl ---
- * xx01 0111 --- --- --- ---
- * xx01 1000 EQU --- JEQU ilbl ---
- * xx01 1001 NEQ --- JNEQ ilbl ---
- * xx01 1010 LT --- JLT ilbl ---
- * xx01 1011 GTE --- JGTE ilbl ---
- * xx01 1100 GT --- JGT ilbl ---
- * xx01 1101 LTE --- JLTE ilbl ---
- * xx01 1110 --- --- --- ---
- * xx01 1111 BIT --- --- ---
- *
- * xx10 0000 LDI --- LD uoffs LDS lvl,offs
- * xx10 0001 LDIH --- LDH uoffs LDSH lvl,offs
- * xx10 0010 LDIB --- LDB uoffs LDSB lvl,offs
- * xx10 0011 LDIM --- LDM uoffs LDSM lvl,offs
- * xx10 0100 STI --- ST uoffs STS lvl,offs
- * xx10 0101 STIH --- STH uoffs STSH lvl,offs
- * xx10 0110 STIB --- STB uoffs STSB lvl,offs
- * xx10 0111 STIM --- STM uoffs STSM lvl,offs
- * xx10 1000 DUP --- LDX uoffs LDSX lvl,offs
- * xx10 1001 DUPH --- LDXH uoffs LDSXH lvl,offs
- * xx10 1010 PUSHS --- LDXB uoffs LDSXB lvl,offs
- * xx10 1011 POPS --- LDXM uoffs LDSXM lvl,offs
- * xx10 1100 --- --- STX uoffs STSX lvl,offs
- * xx10 1101 --- --- STXH uoffs STSXH lvl,offs
- * xx10 1110 --- --- STXB uoffs STSXB lvl,offs
- * xx10 1111 RET --- STXM uoffs STSXM lvl,offs
- *
- * xx11 0000 --- FLOAT fop LA uoffs LAS lvl,offs
- * xx11 0001 --- --- LAC dlbl ---
- * xx11 0010 --- --- --- ---
- * xx11 0011 --- --- --- ---
- * xx11 0100 --- PUSHB n PUSH nn ---
- * xx11 0101 --- --- INDS nn ---
- * xx11 0110 --- --- --- ---
- * xx11 0111 --- --- --- ---
- * xx11 1000 --- --- LAX uoffs LASX lvl,offs
- * xx11 1001 --- --- LIB lop SYSIO fn,sop
- * xx11 1010 --- --- --- ---
- * xx11 1011 --- --- --- ---
- * xx11 1100 --- --- --- ---
- * xx11 1101 --- --- --- ---
- * xx11 1110 --- --- --- ---
- * xx11 1111 END --- *LABEL ilbl *LINE fn,lineno
- *
- * KEY:
- * n = 8-bit value (unsigned)
- * lvl = 8-bit static nesting level offset (unsigned)
- * vt = 8-bit type code (unsigned)
- * nn = 16-bit value (signed)
- * fop = 8-bit floating point operation
- * sop = 16-bit sysio operation
- * lop = 16-bit library call identifier
- * fn = 8-bit file number
- * ilbl = instruction space label
- * dlbl = stack data label
- * offs = 16-bit frame offset (signed)
- * uoffs = 16-bit base offset (unsigned)
- * c = string follows psuedo-operation
- * * = Indicates pseudo-operations (these are removed
- * after final fixup of the object file).
- */
-
-/** OPCODES WITH NO ARGUMENTS ***********************************************/
-
-/* Program control (No stack arguments) */
-
-#define oNOP (0x00)
-
-/* Arithmetic & logical & and integer conversions (One 16-bit stack argument) */
-
-#define oNEG (0x01)
-#define oABS (0x02)
-#define oINC (0x03)
-#define oDEC (0x04)
-#define oNOT (0x05)
-
-/* Arithmetic & logical (Two 16-bit stack arguments) */
-
-#define oADD (0x06)
-#define oSUB (0x07)
-#define oMUL (0x08)
-#define oDIV (0x09)
-#define oMOD (0x0a)
-#define oSLL (0x0b)
-#define oSRL (0x0c)
-#define oSRA (0x0d)
-#define oOR (0x0e)
-#define oAND (0x0f)
-
-/* Comparisons (One 16-bit stack argument) */
-
-#define oEQUZ (0x10)
-#define oNEQZ (0x11)
-#define oLTZ (0x12)
-#define oGTEZ (0x13)
-#define oGTZ (0x14)
-#define oLTEZ (0x15)
-
-/* 0x16-0x17 -- unassigned */
-
-/* Comparisons (Two 16-bit stack arguments) */
-
-#define oEQU (0x18)
-#define oNEQ (0x19)
-#define oLT (0x1a)
-#define oGTE (0x1b)
-#define oGT (0x1c)
-#define oLTE (0x1d)
-
-/* 0x1e -- unassigned */
-
-#define oBIT (0x1f)
-
-/* Load Immediate */
-
-#define oLDI (0x20) /* (One 16-bit stack argument) */
-#define oLDIH (0x21) /* (One 16-bit stack argument) */
-#define oLDIB (0x22) /* (One 16-bit stack argument) */
-#define oLDIM (0x23) /* (Two 16-bit stack arguments) */
-
-/* Store Immediate */
-
-#define oSTI (0x24) /* (One 32-bit and one 16-bit stack arguments) */
-#define oSTIH (0x25) /* (Two 16-bit stack arguments) */
-#define oSTIB (0x26) /* (Two 16-bit stack arguments) */
-#define oSTIM (0x27) /* (Two + n 16-bit stack arguments) */
-
-/* Data stack */
-
-#define oDUP (0x28) /* (One 32-bit stack argument */
-#define oDUPH (0x29) /* (One 16-bit stack argument) */
-
-/* 0x2a - 0x2b -- unassigned */
-
-#define oPUSHS (0x2a) /* No arguments */
-#define oPOPS (0x2b) /* (One 16-bit stack argument) */
-
-/* 0x2c - 0x2e -- unassigned */
-
-/* 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
- */
-
-#define oRET (0x2f)
-
-/* 0x30 - 0x3e -- unassigned */
-
-/* System Functions (No stack arguments) */
-
-#define oEND (0x3f)
-
-/** OPCODES WITH SINGLE BYTE ARGUMENT (arg8) ********************************/
-
-/* (o8|0x00)-(o8|0x2f) -- unassigned */
-
-/* Floating point operations: arg8 = FP op-code */
-
-#define oFLOAT (o8|0x30)
-
-/* (o8|0x31)-(o8|0x33) -- unassigned */
-
-/* Data stack: arg8 = 8 bit unsigned data (no stack arguments) */
-
-#define oPUSHB (o8|0x34)
-
-/* (o8|0x35)-(o8|0x3f) -- unassigned */
-
-/** OPCODES WITH SINGLE 16-BIT ARGUMENT (arg16) *****************************/
-
-/* (o16|0x00)-(o16|0x0f) -- unassigned */
-
-/* Program control: arg16 = unsigned label (One 16-bit stack argument) */
-
-#define oJEQUZ (o16|0x10)
-#define oJNEQZ (o16|0x11)
-#define oJLTZ (o16|0x12)
-#define oJGTEZ (o16|0x13)
-#define oJGTZ (o16|0x14)
-#define oJLTEZ (o16|0x15)
-
-/* Program control: arg16 = unsigned label (no stack arguments) */
-
-#define oJMP (o16|0x16)
-
-/* (o16|0x17) -- unassigned */
-
-/* Program control: arg16 = unsigned label (One 16-bit stack argument) */
-
-#define oJEQU (o16|0x18)
-#define oJNEQ (o16|0x19)
-#define oJLT (o16|0x1a)
-#define oJGTE (o16|0x1b)
-#define oJGT (o16|0x1c)
-#define oJLTE (o16|0x1d)
-
-/* (o16|0x1e)-(o16|0x1f) -- unassigned */
-
-/* Load: arg16 = unsigned base offset */
-
-#define oLD (o16|0x20) /* (no stack arguments) */
-#define oLDH (o16|0x21) /* (no stack arguments) */
-#define oLDB (o16|0x22) /* (no stack arguments) */
-#define oLDM (o16|0x23) /* (One 16-bit stack argument) */
-
-/* Store: arg16 = unsigned base offset */
-
-#define oST (o16|0x24) /* (One 32-bit stack argument) */
-#define oSTH (o16|0x25) /* (One 16-bit stack argument) */
-#define oSTB (o16|0x26) /* (One 16-bit stack argument) */
-#define oSTM (o16|0x27) /* (One+n 16-bit stack arguments) */
-
-/* Load Indexed: arg16 = unsigned base offset */
-
-#define oLDX (o16|0x28) /* (One 16-bit stack argument) */
-#define oLDXH (o16|0x29) /* (One 16-bit stack argument) */
-#define oLDXB (o16|0x2a) /* (One 16-bit stack argument) */
-#define oLDXM (o16|0x2b) /* (Two 16-bit stack arguments) */
-
-/* Store Indexed: arg16 = unsigned base offset */
-
-#define oSTX (o16|0x2c) /* (One 32-bit + one 16-bit stack arguments) */
-#define oSTXH (o16|0x2d) /* (Two 16-bit stack arguments) */
-#define oSTXB (o16|0x2e) /* (Two 16-bit stack arguments) */
-#define oSTXM (o16|0x2f) /* (Two+n 16-bit stack arguments) */
-
-/* Load address relative to stack base: arg16 = unsigned offset */
-
-#define oLA (o16|0x30)
-
-/* Load absolute stack address: arg16 = RODATA offset (No stack arguments) */
-
-#define oLAC (o16|0x31)
-
-/* (o16|0x32)-(o16|0x33) -- unassigned */
-
-/* Data stack: arg16 = 16 bit signed data (no stack arguments) */
-
-#define oPUSH (o16|0x34)
-#define oINDS (o16|0x35)
-
-/* (o16|0x34)-(o16|0x37) -- unassigned */
-
-/* Load address relative to stack base: arg16 = unsigned offset, TOS=index */
-
-#define oLAX (o16|0x38)
-
-/* System functions: arg16 = 16-bit library call identifier */
-
-#define oLIB (o16|0x39)
-
-/* (o16|0x3a)-(o16|0x3e) -- unassigned */
-
-/* Program control: arg16 = unsigned label (no stack arguments) */
-
-#define oLABEL (o16|0x3f)
-
-/** OPCODES WITH 24-BITS OF ARGUMENET (arg8 + arg16) ************************/
-
-/* (o16|o8|0x00)-(o8|o16|0x07) -- unassigned */
-
-/* Program Control: arg8 = level; arg16 = unsigned label
- * (No stack arguments)
- * Behavior:
- * Push base address of level
- * Push base register (BR) value
- * Set new base register value (BR) as top of stack
- * Push return address
- * Set program counter (PC) for address associated with label
- */
-
-#define oPCAL (o16|o8|0x08)
-
-/* (o16|o8|0x09)-(o8|o16|0x1f) -- unassigned */
-
-/* Load: arg8 = level; arg16 = signed frame offset */
-
-#define oLDS (o16|o8|0x20) /* (no stack arguments) */
-#define oLDSH (o16|o8|0x21) /* (no stack arguments) */
-#define oLDSB (o16|o8|0x22) /* (no stack arguments) */
-#define oLDSM (o16|o8|0x23) /* (One 16-bit stack argument) */
-
-/* Store: arg8 = level; arg16 = signed frame offset */
-
-#define oSTS (o16|o8|0x24) /* (One 32-bit stack argument) */
-#define oSTSH (o16|o8|0x25) /* (One 16-bit stack argument) */
-#define oSTSB (o16|o8|0x26) /* (One 16-bit stack argument) */
-#define oSTSM (o16|o8|0x27) /* (One+n 16-bit stack arguments) */
-
-/* Load Indexed: arg8 = level; arg16 = signed frame offset */
-
-#define oLDSX (o16|o8|0x28) /* (One 16-bit stack argument) */
-#define oLDSXH (o16|o8|0x29) /* (One 16-bit stack argument) */
-#define oLDSXB (o16|o8|0x2a) /* (One 16-bit stack argument) */
-#define oLDSXM (o16|o8|0x2b) /* (Two 16-bit stack arguments) */
-
-/* Store Indexed: arg8 = level; arg16 = signed frame offset */
-
-#define oSTSX (o16|o8|0x2c) /* (One 32-bit + one 16-bit stack arguments) */
-#define oSTSXH (o16|o8|0x2d) /* (Two 16-bit stack arguments) */
-#define oSTSXB (o16|o8|0x2e) /* (Two 16-bit stack arguments) */
-#define oSTSXM (o16|o8|0x2f) /* (Two+n 16-bit stack arguments) */
-
-/* FOR LAS/LASX arg8 = level; arg16 = signed frame offset
- * (no stack arguments)
- */
-
-#define oLAS (o16|o8|0x30)
-#define oLASX (o16|o8|0x38)
-
-/* System calls:
- * For SYSIO: arg8 = file number; arg16 = sub-function code
- */
-
-#define oSYSIO (o16|o8|0x39)
-
-/* (o16|o8|0x3a)-(o8|o16|0x3e) -- unassigned */
-
-/* Psuedo-operations:
- * For LINE: arg8 = file number; arg16 = line number
- */
-
-#define oLINE (o16|o8|0x3f)
-
-#endif /* __PINSN16_H */
+/**************************************************************************** + * pinsn16.h + * 16-bit 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 __PINSN16_H +#define __PINSN16_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +/**************************************************************************** + * Definitions + ****************************************************************************/ + +/* Op-code bit definitions */ + +#define o16 (0x80) +#define o8 (0x40) + +/* Opcode Encoding Summary: + * + * NO ARGS arg8 ONLY arg16 ONLY BOTH + * 00xx xxxx 01xx xxxx 10xx xxxx 11xx xxxx + * xx00 0000 NOP --- --- --- + * xx00 0001 NEG --- --- --- + * xx00 0010 ABS --- --- --- + * xx00 0011 INC --- --- --- + * xx00 0100 DEC --- --- --- + * xx00 0101 NOT --- --- --- + * xx00 0110 ADD --- --- --- + * xx00 0111 SUB --- --- --- + * xx00 1000 MUL --- --- PCAL l,ilbl + * xx00 1001 DIV --- --- --- + * xx00 1010 MOD --- --- --- + * xx00 1011 SLL --- --- --- + * xx00 1100 SRL --- --- --- + * xx00 1101 SRA --- --- --- + * xx00 1110 OR --- --- --- + * xx00 1111 AND --- --- --- + * + * xx01 0000 EQUZ --- JEQUZ ilbl --- + * xx01 0001 NEQZ --- JNEQZ ilbl --- + * xx01 0010 LTZ --- JLTZ ilbl --- + * xx01 0011 GTEZ --- JGTEZ ilbl --- + * xx01 0100 GTZ --- JGTZ ilbl --- + * xx01 0101 LTEZ --- JLTEZ ilbl --- + * xx01 0110 --- --- JMP ilbl --- + * xx01 0111 --- --- --- --- + * xx01 1000 EQU --- JEQU ilbl --- + * xx01 1001 NEQ --- JNEQ ilbl --- + * xx01 1010 LT --- JLT ilbl --- + * xx01 1011 GTE --- JGTE ilbl --- + * xx01 1100 GT --- JGT ilbl --- + * xx01 1101 LTE --- JLTE ilbl --- + * xx01 1110 --- --- --- --- + * xx01 1111 BIT --- --- --- + * + * xx10 0000 LDI --- LD uoffs LDS lvl,offs + * xx10 0001 LDIH --- LDH uoffs LDSH lvl,offs + * xx10 0010 LDIB --- LDB uoffs LDSB lvl,offs + * xx10 0011 LDIM --- LDM uoffs LDSM lvl,offs + * xx10 0100 STI --- ST uoffs STS lvl,offs + * xx10 0101 STIH --- STH uoffs STSH lvl,offs + * xx10 0110 STIB --- STB uoffs STSB lvl,offs + * xx10 0111 STIM --- STM uoffs STSM lvl,offs + * xx10 1000 DUP --- LDX uoffs LDSX lvl,offs + * xx10 1001 DUPH --- LDXH uoffs LDSXH lvl,offs + * xx10 1010 PUSHS --- LDXB uoffs LDSXB lvl,offs + * xx10 1011 POPS --- LDXM uoffs LDSXM lvl,offs + * xx10 1100 --- --- STX uoffs STSX lvl,offs + * xx10 1101 --- --- STXH uoffs STSXH lvl,offs + * xx10 1110 --- --- STXB uoffs STSXB lvl,offs + * xx10 1111 RET --- STXM uoffs STSXM lvl,offs + * + * xx11 0000 --- FLOAT fop LA uoffs LAS lvl,offs + * xx11 0001 --- --- LAC dlbl --- + * xx11 0010 --- --- --- --- + * xx11 0011 --- --- --- --- + * xx11 0100 --- PUSHB n PUSH nn --- + * xx11 0101 --- --- INDS nn --- + * xx11 0110 --- --- --- --- + * xx11 0111 --- --- --- --- + * xx11 1000 --- --- LAX uoffs LASX lvl,offs + * xx11 1001 --- --- LIB lop SYSIO fn,sop + * xx11 1010 --- --- --- --- + * xx11 1011 --- --- --- --- + * xx11 1100 --- --- --- --- + * xx11 1101 --- --- --- --- + * xx11 1110 --- --- --- --- + * xx11 1111 END --- *LABEL ilbl *LINE fn,lineno + * + * KEY: + * n = 8-bit value (unsigned) + * lvl = 8-bit static nesting level offset (unsigned) + * vt = 8-bit type code (unsigned) + * nn = 16-bit value (signed) + * fop = 8-bit floating point operation + * sop = 16-bit sysio operation + * lop = 16-bit library call identifier + * fn = 8-bit file number + * ilbl = instruction space label + * dlbl = stack data label + * offs = 16-bit frame offset (signed) + * uoffs = 16-bit base offset (unsigned) + * c = string follows pseudo-operation + * * = Indicates pseudo-operations (these are removed + * after final fixup of the object file). + */ + +/** OPCODES WITH NO ARGUMENTS ***********************************************/ + +/* Program control (No stack arguments) */ + +#define oNOP (0x00) + +/* Arithmetic & logical & and integer conversions (One 16-bit stack argument) */ + +#define oNEG (0x01) +#define oABS (0x02) +#define oINC (0x03) +#define oDEC (0x04) +#define oNOT (0x05) + +/* Arithmetic & logical (Two 16-bit stack arguments) */ + +#define oADD (0x06) +#define oSUB (0x07) +#define oMUL (0x08) +#define oDIV (0x09) +#define oMOD (0x0a) +#define oSLL (0x0b) +#define oSRL (0x0c) +#define oSRA (0x0d) +#define oOR (0x0e) +#define oAND (0x0f) + +/* Comparisons (One 16-bit stack argument) */ + +#define oEQUZ (0x10) +#define oNEQZ (0x11) +#define oLTZ (0x12) +#define oGTEZ (0x13) +#define oGTZ (0x14) +#define oLTEZ (0x15) + +/* 0x16-0x17 -- unassigned */ + +/* Comparisons (Two 16-bit stack arguments) */ + +#define oEQU (0x18) +#define oNEQ (0x19) +#define oLT (0x1a) +#define oGTE (0x1b) +#define oGT (0x1c) +#define oLTE (0x1d) + +/* 0x1e -- unassigned */ + +#define oBIT (0x1f) + +/* Load Immediate */ + +#define oLDI (0x20) /* (One 16-bit stack argument) */ +#define oLDIH (0x21) /* (One 16-bit stack argument) */ +#define oLDIB (0x22) /* (One 16-bit stack argument) */ +#define oLDIM (0x23) /* (Two 16-bit stack arguments) */ + +/* Store Immediate */ + +#define oSTI (0x24) /* (One 32-bit and one 16-bit stack arguments) */ +#define oSTIH (0x25) /* (Two 16-bit stack arguments) */ +#define oSTIB (0x26) /* (Two 16-bit stack arguments) */ +#define oSTIM (0x27) /* (Two + n 16-bit stack arguments) */ + +/* Data stack */ + +#define oDUP (0x28) /* (One 32-bit stack argument */ +#define oDUPH (0x29) /* (One 16-bit stack argument) */ + +/* 0x2a - 0x2b -- unassigned */ + +#define oPUSHS (0x2a) /* No arguments */ +#define oPOPS (0x2b) /* (One 16-bit stack argument) */ + +/* 0x2c - 0x2e -- unassigned */ + +/* 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 + */ + +#define oRET (0x2f) + +/* 0x30 - 0x3e -- unassigned */ + +/* System Functions (No stack arguments) */ + +#define oEND (0x3f) + +/** OPCODES WITH SINGLE BYTE ARGUMENT (arg8) ********************************/ + +/* (o8|0x00)-(o8|0x2f) -- unassigned */ + +/* Floating point operations: arg8 = FP op-code */ + +#define oFLOAT (o8|0x30) + +/* (o8|0x31)-(o8|0x33) -- unassigned */ + +/* Data stack: arg8 = 8 bit unsigned data (no stack arguments) */ + +#define oPUSHB (o8|0x34) + +/* (o8|0x35)-(o8|0x3f) -- unassigned */ + +/** OPCODES WITH SINGLE 16-BIT ARGUMENT (arg16) *****************************/ + +/* (o16|0x00)-(o16|0x0f) -- unassigned */ + +/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ + +#define oJEQUZ (o16|0x10) +#define oJNEQZ (o16|0x11) +#define oJLTZ (o16|0x12) +#define oJGTEZ (o16|0x13) +#define oJGTZ (o16|0x14) +#define oJLTEZ (o16|0x15) + +/* Program control: arg16 = unsigned label (no stack arguments) */ + +#define oJMP (o16|0x16) + +/* (o16|0x17) -- unassigned */ + +/* Program control: arg16 = unsigned label (One 16-bit stack argument) */ + +#define oJEQU (o16|0x18) +#define oJNEQ (o16|0x19) +#define oJLT (o16|0x1a) +#define oJGTE (o16|0x1b) +#define oJGT (o16|0x1c) +#define oJLTE (o16|0x1d) + +/* (o16|0x1e)-(o16|0x1f) -- unassigned */ + +/* Load: arg16 = unsigned base offset */ + +#define oLD (o16|0x20) /* (no stack arguments) */ +#define oLDH (o16|0x21) /* (no stack arguments) */ +#define oLDB (o16|0x22) /* (no stack arguments) */ +#define oLDM (o16|0x23) /* (One 16-bit stack argument) */ + +/* Store: arg16 = unsigned base offset */ + +#define oST (o16|0x24) /* (One 32-bit stack argument) */ +#define oSTH (o16|0x25) /* (One 16-bit stack argument) */ +#define oSTB (o16|0x26) /* (One 16-bit stack argument) */ +#define oSTM (o16|0x27) /* (One+n 16-bit stack arguments) */ + +/* Load Indexed: arg16 = unsigned base offset */ + +#define oLDX (o16|0x28) /* (One 16-bit stack argument) */ +#define oLDXH (o16|0x29) /* (One 16-bit stack argument) */ +#define oLDXB (o16|0x2a) /* (One 16-bit stack argument) */ +#define oLDXM (o16|0x2b) /* (Two 16-bit stack arguments) */ + +/* Store Indexed: arg16 = unsigned base offset */ + +#define oSTX (o16|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ +#define oSTXH (o16|0x2d) /* (Two 16-bit stack arguments) */ +#define oSTXB (o16|0x2e) /* (Two 16-bit stack arguments) */ +#define oSTXM (o16|0x2f) /* (Two+n 16-bit stack arguments) */ + +/* Load address relative to stack base: arg16 = unsigned offset */ + +#define oLA (o16|0x30) + +/* Load absolute stack address: arg16 = RODATA offset (No stack arguments) */ + +#define oLAC (o16|0x31) + +/* (o16|0x32)-(o16|0x33) -- unassigned */ + +/* Data stack: arg16 = 16 bit signed data (no stack arguments) */ + +#define oPUSH (o16|0x34) +#define oINDS (o16|0x35) + +/* (o16|0x34)-(o16|0x37) -- unassigned */ + +/* Load address relative to stack base: arg16 = unsigned offset, TOS=index */ + +#define oLAX (o16|0x38) + +/* System functions: arg16 = 16-bit library call identifier */ + +#define oLIB (o16|0x39) + +/* (o16|0x3a)-(o16|0x3e) -- unassigned */ + +/* Program control: arg16 = unsigned label (no stack arguments) */ + +#define oLABEL (o16|0x3f) + +/** OPCODES WITH 24-BITS OF ARGUMENET (arg8 + arg16) ************************/ + +/* (o16|o8|0x00)-(o8|o16|0x07) -- unassigned */ + +/* Program Control: arg8 = level; arg16 = unsigned label + * (No stack arguments) + * Behavior: + * Push base address of level + * Push base register (BR) value + * Set new base register value (BR) as top of stack + * Push return address + * Set program counter (PC) for address associated with label + */ + +#define oPCAL (o16|o8|0x08) + +/* (o16|o8|0x09)-(o8|o16|0x1f) -- unassigned */ + +/* Load: arg8 = level; arg16 = signed frame offset */ + +#define oLDS (o16|o8|0x20) /* (no stack arguments) */ +#define oLDSH (o16|o8|0x21) /* (no stack arguments) */ +#define oLDSB (o16|o8|0x22) /* (no stack arguments) */ +#define oLDSM (o16|o8|0x23) /* (One 16-bit stack argument) */ + +/* Store: arg8 = level; arg16 = signed frame offset */ + +#define oSTS (o16|o8|0x24) /* (One 32-bit stack argument) */ +#define oSTSH (o16|o8|0x25) /* (One 16-bit stack argument) */ +#define oSTSB (o16|o8|0x26) /* (One 16-bit stack argument) */ +#define oSTSM (o16|o8|0x27) /* (One+n 16-bit stack arguments) */ + +/* Load Indexed: arg8 = level; arg16 = signed frame offset */ + +#define oLDSX (o16|o8|0x28) /* (One 16-bit stack argument) */ +#define oLDSXH (o16|o8|0x29) /* (One 16-bit stack argument) */ +#define oLDSXB (o16|o8|0x2a) /* (One 16-bit stack argument) */ +#define oLDSXM (o16|o8|0x2b) /* (Two 16-bit stack arguments) */ + +/* Store Indexed: arg8 = level; arg16 = signed frame offset */ + +#define oSTSX (o16|o8|0x2c) /* (One 32-bit + one 16-bit stack arguments) */ +#define oSTSXH (o16|o8|0x2d) /* (Two 16-bit stack arguments) */ +#define oSTSXB (o16|o8|0x2e) /* (Two 16-bit stack arguments) */ +#define oSTSXM (o16|o8|0x2f) /* (Two+n 16-bit stack arguments) */ + +/* FOR LAS/LASX arg8 = level; arg16 = signed frame offset + * (no stack arguments) + */ + +#define oLAS (o16|o8|0x30) +#define oLASX (o16|o8|0x38) + +/* System calls: + * For SYSIO: arg8 = file number; arg16 = sub-function code + */ + +#define oSYSIO (o16|o8|0x39) + +/* (o16|o8|0x3a)-(o8|o16|0x3e) -- unassigned */ + +/* Pseudo-operations: + * For LINE: arg8 = file number; arg16 = line number + */ + +#define oLINE (o16|o8|0x3f) + +#endif /* __PINSN16_H */ |