This is pcn_instr.h in view mode; [Download] [Up]
/*
* PCN System Assembler
* Author: Steve Tuecke
* Argonne National Laboratory
*
* Please see the DISCLAIMER file in the top level directory of the
* distribution regarding the provisions under which this software
* is distributed.
*
* pcn_instr.h
*
* This file contains the PCN Abstract Machine instruction set opcodes,
* instruction sizes, etc.
*/
#ifndef _PCN_INCLUDE_PCN_INSTR_H
#define _PCN_INCLUDE_PCN_INSTR_H
/*
* PCN abstract machine instruction opcodes
*/
#define I_FORK 0
#define I_RECURSE 1
#define I_HALT 2
#define I_DEFAULT 3
#define I_TRY 4
#define I_RUN 5
#define I_BUILD_STATIC 6
#define I_BUILD_DYNAMIC 7
#define I_BUILD_DEF 8
#define I_PUT_DATA 9
#define I_PUT_VALUE 10
#define I_COPY 11
#define I_GET_TUPLE 12
#define I_EQUAL 13
#define I_NEQ 14
#define I_TYPE 15
#define I_LE 16
#define I_LT 17
#define I_DATA 18
#define I_UNKNOWN 19
#define I_DEFINE 20
#define I_GET_ELEMENT 21
#define I_PUT_ELEMENT 22
#define I_ADD 23
#define I_SUB 24
#define I_MUL 25
#define I_DIV 26
#define I_MOD 27
#define I_LENGTH 28
#define I_COPY_MUT 29
#define I_PUT_FOREIGN 30
#define I_CALL_FOREIGN 31
#define I_EXIT 32
#define I_PRINT_TERM 33
#define I_INIT_SEND 34
#define I_INIT_RECV 35
#define I_CLOSE_STREAM 36
#define I_STREAM_SEND 37
#define I_STREAM_RECV 38
/*
* Instructions sizes, in cells.
*
* Some of the instructions have pointers to Gauge counters or timer
* at the end of the instruction. If we are linking without Gauge,
* then these pointers need not be included in the instruction, and
* thus the instruction smaller. For these instruction, gauge_size_*
* is #ifdef's to the proper value.
*/
#define SIZE_FORK 2
#define SIZE_RECURSE 3
#define SIZE_HALT 2
#define SIZE_DEFAULT 2
#define SIZE_TRY 2
#define SIZE_RUN 2
#define SIZE_BUILD_STATIC 2
#define SIZE_BUILD_DYNAMIC 1
#define SIZE_BUILD_DEF 1
#define SIZE_PUT_DATA 2
#define SIZE_PUT_VALUE 1
#define SIZE_COPY 1
#define SIZE_GET_TUPLE 1
#define SIZE_EQUAL 1
#define SIZE_NEQ 1
#define SIZE_TYPE 1
#define SIZE_LE 1
#define SIZE_LT 1
#define SIZE_DATA 1
#define SIZE_UNKNOWN 1
#define SIZE_DEFINE 1
#define SIZE_GET_ELEMENT 1
#define SIZE_PUT_ELEMENT 1
#define SIZE_ADD 1
#define SIZE_SUB 1
#define SIZE_MUL 1
#define SIZE_DIV 1
#define SIZE_MOD 1
#define SIZE_LENGTH 1
#define SIZE_COPY_MUT 2
#define SIZE_PUT_FOREIGN 1
#define SIZE_CALL_FOREIGN 3
#define SIZE_EXIT 1
#define SIZE_PRINT_TERM 1
#define SIZE_INIT_SEND 1
#define SIZE_INIT_RECV 1
#define SIZE_CLOSE_STREAM 1
#define SIZE_STREAM_SEND 2
#define SIZE_STREAM_RECV 2
/*
* Instructions classes that are used by Gauge in modeling PCN programs.
*/
#define INSTRUCTION_CLASSES 2
#define CLASS_NOCOST -1
#define CLASS_FORK 0
#define CLASS_RECURSE 0
#define CLASS_HALT 0
#define CLASS_DEFAULT 0
#define CLASS_TRY 0
#define CLASS_RUN 0
#define CLASS_BUILD_STATIC 0
#define CLASS_BUILD_DYNAMIC 0
#define CLASS_BUILD_DEF 0
#define CLASS_PUT_DATA 0
#define CLASS_PUT_VALUE 0
#define CLASS_COPY 0
#define CLASS_GET_TUPLE 0
#define CLASS_EQUAL 0
#define CLASS_NEQ 0
#define CLASS_TYPE 0
#define CLASS_LE 0
#define CLASS_LT 0
#define CLASS_DATA 0
#define CLASS_UNKNOWN 0
#define CLASS_DEFINE 0
#define CLASS_GET_ELEMENT 0
#define CLASS_PUT_ELEMENT 0
#define CLASS_ADD 0
#define CLASS_SUB 0
#define CLASS_MUL 0
#define CLASS_DIV 0
#define CLASS_MOD 0
#define CLASS_LENGTH 0
#define CLASS_COPY_MUT 0
#define CLASS_PUT_FOREIGN 0
#define CLASS_CALL_FOREIGN 0
#define CLASS_EXIT -1
#define CLASS_PRINT_TERM 0
#define CLASS_INIT_SEND 0
#define CLASS_INIT_RECV 0
#define CLASS_CLOSE_STREAM 0
#define CLASS_STREAM_SEND 0
#define CLASS_STREAM_RECV 0
#ifndef PCN
/*
* Instruction components. These #defines give nice symbolic
* names to the parts of the various abstract machine instructions.
*/
#define I_OPCODE t1.op0.b0
#define I_FORK_ARITY t1.op0.b1
#define I_FORK_PROC t1.p1
#define I_RECURSE_ARITY t1.op0.b1
#define I_RECURSE_PROC t1.p1
#define I_RECURSE_COUNTER t1.p2
#define I_HALT_COUNTER t1.p1
#define I_DEFAULT_ARITY t1.op0.b1
#define I_DEFAULT_COUNTER t1.p1
#define I_TRY_LOCATION t1.p1
#define I_RUN_VT_R t2.op0.b1
#define I_RUN_TARGET_R t2.op0.b2
#define I_RUN_MOD_R t2.op0.b3
#define I_RUN_PROC_R t2.op1.b0
#define I_RUN_SYNC_R t2.op1.b1
#define I_BUILD_STATIC_DEST_R t1.op0.b1
#define I_BUILD_STATIC_TAG t1.op0.b2
#define I_BUILD_STATIC_SIZE t1.p1
#define I_BUILD_DYNAMIC_TAG t1.op0.b1
#define I_BUILD_DYNAMIC_SIZE_R t1.op0.b2
#define I_BUILD_DYNAMIC_DEST_R t1.op0.b3
#define I_BUILD_DEF_DEST_R t1.op0.b1
#define I_PUT_DATA_DEST_R t1.op0.b1
#define I_PUT_DATA_TAG t1.op0.b2
#define I_PUT_DATA_PTR t1.p1
#define I_PUT_VALUE_SRC_R t1.op0.b1
#define I_COPY_SRC_R t1.op0.b1
#define I_COPY_DEST_R t1.op0.b2
#define I_GET_TUPLE_SRC_R t1.op0.b1
#define I_GET_TUPLE_ARITY t1.op0.b2
#define I_GET_TUPLE_DEST_R t1.op0.b3
#define I_EQUAL_SRC1_R t1.op0.b1
#define I_EQUAL_SRC2_R t1.op0.b2
#define I_NEQ_SRC1_R t1.op0.b1
#define I_NEQ_SRC2_R t1.op0.b2
#define I_TYPE_SRC_R t1.op0.b1
#define I_TYPE_TAG t1.op0.b2
#define I_COMPARE_LSRC_R t1.op0.b1
#define I_COMPARE_RSRC_R t1.op0.b2
#define I_DATA_SRC_R t1.op0.b1
#define I_UNKNOWN_SRC_R t1.op0.b1
#define I_DEFINE_TO_R t1.op0.b1
#define I_DEFINE_FROM_R t1.op0.b2
#define I_GET_ELEMENT_SINDEX_R t1.op0.b1
#define I_GET_ELEMENT_SRC_R t1.op0.b2
#define I_GET_ELEMENT_DEST_R t1.op0.b3
#define I_PUT_ELEMENT_DINDEX_R t1.op0.b1
#define I_PUT_ELEMENT_DEST_R t1.op0.b2
#define I_PUT_ELEMENT_SRC_R t1.op0.b3
#define I_ARITH_LSRC_R t1.op0.b1
#define I_ARITH_RSRC_R t1.op0.b2
#define I_ARITH_DEST_R t1.op0.b3
#define I_LENGTH_SRC_R t1.op0.b1
#define I_LENGTH_DEST_R t1.op0.b2
#define I_COPY_MUT_SRC_R t1.op0.b1
#define I_COPY_MUT_DEST_R t1.op0.b2
#define I_COPY_MUT_COUNTER t1.p1
#define I_PUT_FOREIGN_SRC_R t1.op0.b1
#define I_CALL_FOREIGN_N_ARGS t1.op0.b1
#define I_CALL_FOREIGN_FOR t1.p1
#define I_CALL_FOREIGN_TIMER t1.p2
#define I_EXIT_CODE_R t1.op0.b1
#define I_PRINT_TERM_SRC_R t1.op0.b1
#define I_INIT_SEND_CON_ARRAY_R t1.op0.b1
#define I_INIT_SEND_STREAM_R t1.op0.b2
#define I_INIT_SEND_SINDEX_R t1.op0.b3
#define I_INIT_RECV_CON_ARRAY_R t1.op0.b1
#define I_INIT_RECV_STREAM_R t1.op0.b2
#define I_INIT_RECV_SINDEX_R t1.op0.b3
#define I_CLOSE_STREAM_STREAM_R t1.op0.b1
#define I_CLOSE_STREAM_SINDEX_R t1.op0.b2
#define I_STREAM_SEND_STREAM_R t2.op0.b1
#define I_STREAM_SEND_SINDEX_R t2.op0.b2
#define I_STREAM_SEND_ARRAY_R t2.op0.b3
#define I_STREAM_SEND_OFFSET_R t2.op1.b0
#define I_STREAM_SEND_SIZE_R t2.op1.b1
#define I_STREAM_RECV_STREAM_R t2.op0.b1
#define I_STREAM_RECV_SINDEX_R t2.op0.b2
#define I_STREAM_RECV_ARRAY_R t2.op0.b3
#define I_STREAM_RECV_OFFSET_R t2.op1.b0
#define I_STREAM_RECV_SIZE_R t2.op1.b1
#define I_STREAM_RECV_STATUS_R t2.op1.b2
#ifdef DEFINE_INSTR_NAMES
#ifndef GLOBAL
#define GLOBAL extern
#undef DEFINE_GLOBALS
#endif
/*
* Instruction names
*/
GLOBAL char *_p_instr_names[]
#ifdef DEFINE_GLOBALS
= {
"fork",
"recurse",
"halt",
"default",
"try",
"run",
"build_static",
"build_dynamic",
"build_def",
"put_data",
"put_value",
"copy",
"get_tuple",
"equal",
"neq",
"type",
"le",
"lt",
"data",
"unknown",
"define",
"get_element",
"put_element",
"add",
"sub",
"mul",
"div",
"mod",
"length",
"copy_mut",
"put_foreign",
"call_foreign",
"exit",
"print_term",
"init_send",
"init_recv",
"close_stream",
"stream_send",
"stream_recv"
}
#endif /* DEFINE_GLOBALS */
;
#endif /* DEFINE_INSTR_NAMES */
#endif /* !PCN */
#endif /* _PCN_INCLUDE_PCN_INSTR_H */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.