summaryrefslogtreecommitdiff
path: root/libguile/instructions.h
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/instructions.h')
-rw-r--r--libguile/instructions.h57
1 files changed, 56 insertions, 1 deletions
diff --git a/libguile/instructions.h b/libguile/instructions.h
index a2263228f..bf27afa6c 100644
--- a/libguile/instructions.h
+++ b/libguile/instructions.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2009, 2012 Free Software Foundation, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
@@ -20,6 +20,59 @@
#define _SCM_INSTRUCTIONS_H_
#include <libguile.h>
+#include <libguile/vm-operations.h>
+
+enum scm_rtl_opcode
+ {
+#define ENUM(opcode, tag, name, meta) scm_rtl_op_##tag = opcode,
+ FOR_EACH_VM_OPERATION(ENUM)
+#undef ENUM
+ };
+
+#define SCM_PACK_RTL_8_8_8(op,a,b,c) ((op) | ((a) << 8) | ((b) << 16) | ((d) << 24))
+#define SCM_PACK_RTL_8_16(op,a,b) ((op) | ((a) << 8) | ((b) << 16))
+#define SCM_PACK_RTL_16_8(op,a,b) ((op) | ((a) << 16) | ((b) << 24))
+#define SCM_PACK_RTL_24(op,a) ((op) | ((a) << 8))
+
+#define SCM_UNPACK_RTL_8_8_8(op,a,b,c) \
+ do \
+ { \
+ a = (op >> 8) & 0xff; \
+ b = (op >> 16) & 0xff; \
+ c = op >> 24; \
+ } \
+ while (0)
+
+#define SCM_UNPACK_RTL_8_16(op,a,b) \
+ do \
+ { \
+ a = (op >> 8) & 0xff; \
+ b = op >> 16; \
+ } \
+ while (0)
+
+#define SCM_UNPACK_RTL_16_8(op,a,b) \
+ do \
+ { \
+ a = (op >> 8) & 0xffff; \
+ b = op >> 24; \
+ } \
+ while (0)
+
+#define SCM_UNPACK_RTL_12_12(op,a,b) \
+ do \
+ { \
+ a = (op >> 8) & 0xfff; \
+ b = op >> 20; \
+ } \
+ while (0)
+
+#define SCM_UNPACK_RTL_24(op,a) \
+ do \
+ { \
+ a = op >> 8; \
+ } \
+ while (0)
#define SCM_VM_NUM_INSTRUCTIONS (1<<8)
#define SCM_VM_INSTRUCTION_MASK (SCM_VM_NUM_INSTRUCTIONS-1)
@@ -33,6 +86,8 @@ enum scm_opcode {
#undef VM_INSTRUCTION_TO_OPCODE
};
+SCM_INTERNAL SCM scm_rtl_instruction_list (void);
+
SCM_API SCM scm_instruction_list (void);
SCM_API SCM scm_instruction_p (SCM obj);
SCM_API SCM scm_instruction_length (SCM inst);