forked from Archive/PX4-Autopilot
205 lines
5.6 KiB
C
205 lines
5.6 KiB
C
|
/***********************************************************************
|
||
|
* podefs.h
|
||
|
* Logical P-code operation code definitions
|
||
|
*
|
||
|
* Copyright (C) 2008-2009 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 */
|