94#define OSEVM_ADDR_INPUT "/_i"
95#define OSEVM_ADDR_STACK "/_s"
96#define OSEVM_ADDR_ENV "/_e"
97#define OSEVM_ADDR_CONTROL "/_c"
98#define OSEVM_ADDR_DUMP "/_d"
99#define OSEVM_ADDR_STDLIB "/_l"
100#define OSEVM_ADDR_HOST "/_x"
101#define OSEVM_ADDR_CACHE "/_0"
102#define OSEVM_ADDR_FAULT "/_h"
112#define OSEVM_ADDR_PROBE "/_k"
122#define OSEVM_ADDR_PARAMS "/_p"
146#define OSEVM_DECL_NREGISTERS 6
147extern const char *
const
148osevm_decl_registers[OSEVM_DECL_NREGISTERS];
153 OSEVM_DECL_I = 1 << 0,
154 OSEVM_DECL_S = 1 << 1,
155 OSEVM_DECL_E = 1 << 2,
156 OSEVM_DECL_C = 1 << 3,
157 OSEVM_DECL_D = 1 << 4,
158 OSEVM_DECL_P = 1 << 5
186#define OSEVM_ADDR_assign "/@"
187#define OSEVM_ADDR_quote "/'"
188#define OSEVM_ADDR_funcall "/!"
189#define OSEVM_ADDR_lookup "/$"
190#define OSEVM_ADDR_copyRegisterToElem "/>"
191#define OSEVM_ADDR_appendElemToRegister "/<<"
192#define OSEVM_ADDR_replaceRegisterWithElem "/<"
193#define OSEVM_ADDR_moveElemToRegister "/-"
194#define OSEVM_ADDR_toType "/,"
195#define OSEVM_ADDR_toInt32 "/,/i"
196#define OSEVM_ADDR_toFloat "/,/f"
197#define OSEVM_ADDR_toString "/,/s"
198#define OSEVM_ADDR_toBlob "/,/b"
199#define OSEVM_ADDR_appendByte "/&"
207#define OSEVM_CACHE_SIZE 30
208#define OSEVM_CACHE_MSG_SIZE OSE_CONTEXT_MESSAGE_OVERHEAD \
209 + OSE_SIZEWORD_LEN_ + OSE_ADDRESS_ANONVAL_SIZE_ + 32 + (OSEVM_CACHE_SIZE * 4)
210#define OSEVM_CACHE_OFFSET_0 OSE_BUNDLE_HEADER_LEN_ \
211 + OSE_CONTEXT_BUNDLE_OFFSET \
212 + OSE_BUNDLE_HEADER_LEN_ \
213 + OSE_SIZEWORD_LEN + OSE_ADDRESS_ANONVAL_SIZE + 32
214#define OSEVM_CACHE_OFFSET_1 OSEVM_CACHE_OFFSET_0 + OSE_SIZEWORD_LEN
215#define OSEVM_CACHE_OFFSET_2 OSEVM_CACHE_OFFSET_1 + OSE_SIZEWORD_LEN
216#define OSEVM_CACHE_OFFSET_3 OSEVM_CACHE_OFFSET_2 + OSE_SIZEWORD_LEN
217#define OSEVM_CACHE_OFFSET_4 OSEVM_CACHE_OFFSET_3 + OSE_SIZEWORD_LEN
218#define OSEVM_CACHE_OFFSET_5 OSEVM_CACHE_OFFSET_4 + OSE_SIZEWORD_LEN
219#define OSEVM_CACHE_OFFSET_6 OSEVM_CACHE_OFFSET_5 + OSE_SIZEWORD_LEN
220#define OSEVM_CACHE_OFFSET_7 OSEVM_CACHE_OFFSET_6 + OSE_SIZEWORD_LEN
221#define OSEVM_CACHE_OFFSET_8 OSEVM_CACHE_OFFSET_7 + OSE_SIZEWORD_LEN
222#define OSEVM_CACHE_OFFSET_9 OSEVM_CACHE_OFFSET_8 + OSE_SIZEWORD_LEN
223#define OSEVM_CACHE_OFFSET_10 OSEVM_CACHE_OFFSET_9 + OSE_SIZEWORD_LEN
224#define OSEVM_CACHE_OFFSET_11 OSEVM_CACHE_OFFSET_10 + OSE_SIZEWORD_LEN
225#define OSEVM_CACHE_OFFSET_12 OSEVM_CACHE_OFFSET_11 + OSE_SIZEWORD_LEN
226#define OSEVM_CACHE_OFFSET_13 OSEVM_CACHE_OFFSET_12 + OSE_SIZEWORD_LEN
227#define OSEVM_CACHE_OFFSET_14 OSEVM_CACHE_OFFSET_13 + OSE_SIZEWORD_LEN
228#define OSEVM_CACHE_OFFSET_15 OSEVM_CACHE_OFFSET_14 + OSE_SIZEWORD_LEN
229#define OSEVM_CACHE_OFFSET_16 OSEVM_CACHE_OFFSET_15 + OSE_SIZEWORD_LEN
230#define OSEVM_CACHE_OFFSET_17 OSEVM_CACHE_OFFSET_16 + OSE_SIZEWORD_LEN
231#define OSEVM_CACHE_OFFSET_18 OSEVM_CACHE_OFFSET_17 + OSE_SIZEWORD_LEN
232#define OSEVM_CACHE_OFFSET_19 OSEVM_CACHE_OFFSET_18 + OSE_SIZEWORD_LEN
233#define OSEVM_CACHE_OFFSET_20 OSEVM_CACHE_OFFSET_19 + OSE_SIZEWORD_LEN
234#define OSEVM_CACHE_OFFSET_21 OSEVM_CACHE_OFFSET_20 + OSE_SIZEWORD_LEN
235#define OSEVM_CACHE_OFFSET_22 OSEVM_CACHE_OFFSET_21 + OSE_SIZEWORD_LEN
236#define OSEVM_CACHE_OFFSET_23 OSEVM_CACHE_OFFSET_22 + OSE_SIZEWORD_LEN
237#define OSEVM_CACHE_OFFSET_24 OSEVM_CACHE_OFFSET_23 + OSE_SIZEWORD_LEN
238#define OSEVM_CACHE_OFFSET_25 OSEVM_CACHE_OFFSET_24 + OSE_SIZEWORD_LEN
239#define OSEVM_CACHE_OFFSET_26 OSEVM_CACHE_OFFSET_25 + OSE_SIZEWORD_LEN
240#define OSEVM_CACHE_OFFSET_27 OSEVM_CACHE_OFFSET_26 + OSE_SIZEWORD_LEN
241#define OSEVM_CACHE_OFFSET_28 OSEVM_CACHE_OFFSET_27 + OSE_SIZEWORD_LEN
242#define OSEVM_CACHE_OFFSET_29 OSEVM_CACHE_OFFSET_28 + OSE_SIZEWORD_LEN
243#define OSEVM_CACHE_OFFSET_30 OSEVM_CACHE_OFFSET_29 + OSE_SIZEWORD_LEN
245#define OSEVM_CACHE_POINTER OSEVM_CACHE_OFFSET_0
246#define OSEVM_CACHE_FLAGS OSEVM_CACHE_OFFSET_1
247#define OSEVM_CACHE_OFFSET_INPUT OSEVM_CACHE_OFFSET_2
248#define OSEVM_CACHE_OFFSET_STACK OSEVM_CACHE_OFFSET_3
249#define OSEVM_CACHE_OFFSET_ENV OSEVM_CACHE_OFFSET_4
250#define OSEVM_CACHE_OFFSET_CONTROL OSEVM_CACHE_OFFSET_5
251#define OSEVM_CACHE_OFFSET_DUMP OSEVM_CACHE_OFFSET_6
252#define OSEVM_CACHE_OFFSET_FAULT OSEVM_CACHE_OFFSET_7
254#define OSEVM_CACHE_OFFSET_PROBE OSEVM_CACHE_OFFSET_10
267#define OSE_CONF_VM_INPUT_SIZE
268#define OSE_CONF_VM_STACK_SIZE
269#define OSE_CONF_VM_ENV_SIZE
270#define OSE_CONF_VM_CONTROL_SIZE
271#define OSE_CONF_VM_DUMP_SIZE
272#undef OSE_CONF_VM_INPUT_SIZE
273#undef OSE_CONF_VM_STACK_SIZE
274#undef OSE_CONF_VM_ENV_SIZE
275#undef OSE_CONF_VM_CONTROL_SIZE
276#undef OSE_CONF_VM_DUMP_SIZE
287#define OSEVM_FAULT_SIZE 128
289#if defined(OSE_CONF_PROBE_COUNTS) || defined(OSE_CONF_PROBE_STEPS)
290#define OSEVM_HAVE_PROBES
291#ifdef OSE_CONF_PROBE_STEPS
293#ifndef OSEVM_PROBE_STEPS_N
294#define OSEVM_PROBE_STEPS_N 1024
296#ifndef OSEVM_PROBE_STEPS_NAMELEN
297#define OSEVM_PROBE_STEPS_NAMELEN 64
302typedef uint64_t osevm_probe_u64 __attribute__((aligned(4)));
303typedef uint64_t (*osevm_probe_clockfn)(void);
304typedef osevm_probe_clockfn osevm_probe_clock __attribute__((aligned(4)));
305#ifdef OSE_CONF_PROBE_STEPS
308 char name[OSEVM_PROBE_STEPS_NAMELEN];
309 osevm_probe_u64 n, ns;
319#ifdef OSE_CONF_PROBE_STEPS
322 osevm_probe_clock clock;
323 struct osevm_probeRow rows[OSEVM_PROBE_STEPS_N];
327 int16_t index[2 * OSEVM_PROBE_STEPS_N];
332#define OSEVM_PROBE_SIZE \
333 ((int32_t)(OSE_SIZEWORD_LEN_ + 4 + 4 + OSE_SIZEWORD_LEN_ \
334 + ((sizeof(struct osevm_probes) + 3) & ~3)))
335#define OSEVM_PROBE_REGISTER_SIZE_ \
336 (OSEVM_PROBE_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD)
338#define OSEVM_PROBE_REGISTER_SIZE_ 0
341#if defined(OSE_CONF_VM_INPUT_SIZE) \
342 && defined(OSE_CONF_VM_STACK_SIZE) \
343 && defined(OSE_CONF_VM_ENV_SIZE) \
344 && defined(OSE_CONF_VM_CONTROL_SIZE) \
345 && defined(OSE_CONF_VM_DUMP_SIZE)
346#define OSEVM_HAVE_SIZES
347static const int32_t OSEVM_INPUT_SIZE = OSE_CONF_VM_INPUT_SIZE;
348static const int32_t OSEVM_STACK_SIZE = OSE_CONF_VM_STACK_SIZE;
349static const int32_t OSEVM_ENV_SIZE = OSE_CONF_VM_ENV_SIZE;
350static const int32_t OSEVM_CONTROL_SIZE = OSE_CONF_VM_CONTROL_SIZE;
351static const int32_t OSEVM_DUMP_SIZE = OSE_CONF_VM_DUMP_SIZE;
355#define OSEVM_TOTAL_SIZE_ \
356 (OSEVM_CACHE_MSG_SIZE \
357 + OSE_CONF_VM_INPUT_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
358 + OSE_CONF_VM_STACK_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
359 + OSE_CONF_VM_ENV_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
360 + OSE_CONF_VM_CONTROL_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
361 + OSE_CONF_VM_DUMP_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
362 + OSEVM_FAULT_SIZE + OSE_CONTEXT_MESSAGE_OVERHEAD \
363 + OSEVM_PROBE_REGISTER_SIZE_)
364static const int32_t OSEVM_TOTAL_SIZE = OSEVM_TOTAL_SIZE_;
366#elif !defined(OSE_CONF_VM_INPUT_SIZE) \
367 && !defined(OSE_CONF_VM_STACK_SIZE) \
368 && !defined(OSE_CONF_VM_ENV_SIZE) \
369 && !defined(OSE_CONF_VM_CONTROL_SIZE) \
370 && !defined(OSE_CONF_VM_DUMP_SIZE)
372#pragma message ( "Sizes were specified for some, but not all of the VM "\
373 "stacks. Sizes specified will be ignored during compilation, "\
374 "and must be passed to osevm_init() at runtime."\
379#ifdef OSEVM_HAVE_SIZES
385#define OSEVM_INPUT_CONTEXT_MESSAGE_OFFSET \
386 OSE_BUNDLE_HEADER_LEN_ + OSEVM_CACHE_MSG_SIZE
387#define OSEVM_INPUT_BUNDLE_OFFSET \
388 OSEVM_INPUT_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
390#define OSEVM_STACK_CONTEXT_MESSAGE_OFFSET \
391 OSEVM_INPUT_CONTEXT_MESSAGE_OFFSET \
392 + OSE_CONTEXT_MESSAGE_OVERHEAD + OSEVM_INPUT_SIZE
393#define OSEVM_STACK_BUNDLE_OFFSET \
394 OSEVM_STACK_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
396#define OSEVM_ENV_CONTEXT_MESSAGE_OFFSET \
397 OSEVM_STACK_CONTEXT_MESSAGE_OFFSET \
398 + OSE_CONTEXT_MESSAGE_OVERHEAD + OSEVM_STACK_SIZE
399#define OSEVM_ENV_BUNDLE_OFFSET \
400 OSEVM_ENV_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
402#define OSEVM_CONTROL_CONTEXT_MESSAGE_OFFSET \
403 OSEVM_ENV_CONTEXT_MESSAGE_OFFSET \
404 + OSE_CONTEXT_MESSAGE_OVERHEAD + OSEVM_ENV_SIZE
405#define OSEVM_CONTROL_BUNDLE_OFFSET \
406 OSEVM_CONTROL_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
408#define OSEVM_DUMP_CONTEXT_MESSAGE_OFFSET \
409 OSEVM_CONTROL_CONTEXT_MESSAGE_OFFSET \
410 + OSE_CONTEXT_MESSAGE_OVERHEAD + OSEVM_CONTROL_SIZE
411#define OSEVM_DUMP_BUNDLE_OFFSET \
412 OSEVM_DUMP_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
414#define OSEVM_FAULT_CONTEXT_MESSAGE_OFFSET \
415 OSEVM_DUMP_CONTEXT_MESSAGE_OFFSET \
416 + OSE_CONTEXT_MESSAGE_OVERHEAD + OSEVM_DUMP_SIZE
417#define OSEVM_FAULT_BUNDLE_OFFSET \
418 OSEVM_FAULT_CONTEXT_MESSAGE_OFFSET + OSE_CONTEXT_BUNDLE_OFFSET
429#define OSEVM_INPUT(osevm) \
430 ose_makeBundle(ose_getBundlePtr(osevm) \
431 + OSEVM_INPUT_BUNDLE_OFFSET)
435#define OSEVM_STACK(osevm) \
436 ose_makeBundle(ose_getBundlePtr(osevm) \
437 + OSEVM_STACK_BUNDLE_OFFSET)
441#define OSEVM_ENV(osevm) \
442 ose_makeBundle(ose_getBundlePtr(osevm) \
443 + OSEVM_ENV_BUNDLE_OFFSET)
447#define OSEVM_CONTROL(osevm) \
448 ose_makeBundle(ose_getBundlePtr(osevm) \
449 + OSEVM_CONTROL_BUNDLE_OFFSET)
453#define OSEVM_DUMP(osevm) \
454 ose_makeBundle(ose_getBundlePtr(osevm) \
455 + OSEVM_DUMP_BUNDLE_OFFSET)
459#define OSEVM_FAULT(osevm) \
460 ose_makeBundle(ose_getBundlePtr(osevm) \
461 + OSEVM_FAULT_BUNDLE_OFFSET)
484#define OSEVM_INPUT(osevm) \
485 ose_makeBundle(ose_getBundlePtr(osevm) \
486 + ose_readInt32(osevm, \
487 OSEVM_CACHE_OFFSET_INPUT))
488#define OSEVM_STACK(osevm) \
489 ose_makeBundle(ose_getBundlePtr(osevm) \
490 + ose_readInt32(osevm, \
491 OSEVM_CACHE_OFFSET_STACK))
492#define OSEVM_ENV(osevm) \
493 ose_makeBundle(ose_getBundlePtr(osevm) \
494 + ose_readInt32(osevm, \
495 OSEVM_CACHE_OFFSET_ENV))
496#define OSEVM_CONTROL(osevm) \
497 ose_makeBundle(ose_getBundlePtr(osevm) \
498 + ose_readInt32(osevm, \
499 OSEVM_CACHE_OFFSET_CONTROL))
500#define OSEVM_DUMP(osevm) \
501 ose_makeBundle(ose_getBundlePtr(osevm) \
502 + ose_readInt32(osevm, \
503 OSEVM_CACHE_OFFSET_DUMP))
504#define OSEVM_FAULT(osevm) \
505 ose_makeBundle(ose_getBundlePtr(osevm) \
506 + ose_readInt32(osevm, \
507 OSEVM_CACHE_OFFSET_FAULT))
540 int32_t control_size,
585#define OSEVM_GET_FLAGS(osevm) \
586 ose_readInt32(osevm, OSEVM_CACHE_FLAGS)
587#define OSEVM_SET_FLAGS(osevm, flags) \
588 ose_writeInt32(osevm, OSEVM_CACHE_FLAGS, flags)
590#define OSEVM_GET_CACHE_VALUE(osevm, idx) \
591 (ose_assert((idx) < OSEVM_CACHE_SIZE), \
592 ose_readInt32(osevm, OSEVM_CACHE_OFFSET_0 + (4 * (idx))))
593#define OSEVM_SET_CACHE_VALUE(osevm, idx, val) \
594 (ose_assert((idx) < OSEVM_CACHE_SIZE), \
595 ose_writeInt32(osevm, OSEVM_CACHE_OFFSET_0 + (4 * (idx)), val))
608void osevm_popInputToControl(
ose_bundle osevm);
645#define OSEVM_ASSIGN osevm_assignStackToEnv
651#define OSEVM_LOOKUP osevm_lookupInEnv_impl
666#define OSEVM_RAISE(osevm) ((void)(osevm))
672#define OSEVM_FUNCALL osevm_funcall
678#define OSEVM_QUOTE osevm_quote
683#ifndef OSEVM_COPYREGISTERTOELEM
684#define OSEVM_COPYREGISTERTOELEM osevm_copyRegisterToElem
686extern void OSEVM_COPYREGISTERTOELEM (
ose_bundle osevm);
689#ifndef OSEVM_APPENDELEMTOREGISTER
690#define OSEVM_APPENDELEMTOREGISTER osevm_appendElemToRegister
692extern void OSEVM_APPENDELEMTOREGISTER (
ose_bundle osevm);
695#ifndef OSEVM_REPLACEREGISTERWITHELEM
696#define OSEVM_REPLACEREGISTERWITHELEM osevm_replaceRegisterWithElem
698extern void OSEVM_REPLACEREGISTERWITHELEM (
ose_bundle osevm);
701#ifndef OSEVM_MOVEELEMTOREGISTER
702#define OSEVM_MOVEELEMTOREGISTER osevm_moveElemToRegister
704extern void OSEVM_MOVEELEMTOREGISTER (
ose_bundle osevm);
708#define OSEVM_TOTYPE osevm_toType
714#define OSEVM_TOINT32 osevm_toInt32
720#define OSEVM_TOFLOAT osevm_toFloat
725#ifndef OSEVM_TOSTRING
726#define OSEVM_TOSTRING osevm_toString
732#define OSEVM_TOBLOB osevm_toBlob
737#ifdef OSE_PROVIDE_TYPE_SYMBOL
738#ifndef OSEVM_TOSYMBOL
739#define OSEVM_TOSYMBOL osevm_toSymbol
745#ifdef OSE_PROVIDE_TYPE_DOUBLE
746#ifndef OSEVM_TODOUBLE
747#define OSEVM_TODOUBLE osevm_toDouble
753#ifdef OSE_PROVIDE_TYPE_INT8
755#define OSEVM_TOINT8 osevm_toInt8
761#ifdef OSE_PROVIDE_TYPE_UINT8
763#define OSEVM_TOUINT8 osevm_toUInt8
769#ifdef OSE_PROVIDE_TYPE_INT16
771#define OSEVM_TOINT16 osevm_toInt16
777#ifdef OSE_PROVIDE_TYPE_UINT16
778#ifndef OSEVM_TOUINT16
779#define OSEVM_TOUINT16 osevm_toUInt16
785#ifdef OSE_PROVIDE_TYPE_UINT32
786#ifndef OSEVM_TOUINT32
787#define OSEVM_TOUINT32 osevm_toUInt32
793#ifdef OSE_PROVIDE_TYPE_INT64
795#define OSEVM_TOINT64 osevm_toInt64
801#ifdef OSE_PROVIDE_TYPE_UINT64
802#ifndef OSEVM_TOUINT64
803#define OSEVM_TOUINT64 osevm_toUInt64
809#ifdef OSE_PROVIDE_TYPE_TIMETAG
810#ifndef OSEVM_TOTIMETAG
811#define OSEVM_TOTIMETAG osevm_toTimetag
813extern void OSEVM_TOTIMETAG (
ose_bundle osevm);
817#ifdef OSE_PROVIDE_TYPE_TRUE
819#define OSEVM_TOTRUE osevm_toTrue
825#ifdef OSE_PROVIDE_TYPE_FALSE
827#define OSEVM_TOFALSE osevm_toFalse
833#ifdef OSE_PROVIDE_TYPE_NIL
835#define OSEVM_TONIL osevm_toNil
841#ifdef OSE_PROVIDE_TYPE_INFINITUM
842#ifndef OSEVM_TOINFINITUM
843#define OSEVM_TOINFINITUM osevm_toInfinitum
845extern void OSEVM_TOINFINITUM (
ose_bundle osevm);
849#ifndef OSEVM_APPENDBYTE
850#define OSEVM_APPENDBYTE osevm_appendByte
852extern void OSEVM_APPENDBYTE (
ose_bundle osevm);
855#ifndef OSEVM_RESPONDTOSTRING
856#define OSEVM_RESPONDTOSTRING osevm_respondToString
858extern void OSEVM_RESPONDTOSTRING (
ose_bundle osevm);
876#define OSEVM_OPCODE osevm_opcode_default
897#ifndef OSEVM_OPCODE_NAME
898#define OSEVM_OPCODE_NAME(b, off, n) osevm_opcodeName(b, off, n)
902const char *osevm_opcodeName(
ose_bundle b, int32_t off, int32_t n);
904#ifndef OSEVM_PREINPUT
905#define OSEVM_PREINPUT osevm_preInput
910#ifndef OSEVM_POSTINPUT
911#define OSEVM_POSTINPUT osevm_postInput
913extern void OSEVM_POSTINPUT (
ose_bundle osevm);
916#ifndef OSEVM_POPINPUTTOCONTROL
917#define OSEVM_POPINPUTTOCONTROL osevm_popInputToControl
919extern void OSEVM_POPINPUTTOCONTROL (
ose_bundle osevm);
922#ifndef OSEVM_POSTCONTROL
923#define OSEVM_POSTCONTROL osevm_postControl
925extern void OSEVM_POSTCONTROL (
ose_bundle osevm);
928#define OSEVM_TYPE_ADDR_EVALTYPE_SUFFIX "/EVTY"
929#define OSEVM_EVALTYPE_ADDR \
930 OSE_TYPE_ADDR_PREFIX "%c" OSEVM_TYPE_ADDR_EVALTYPE_SUFFIX
931#define OSEVM_EVALTYPE_ADDR_LEN sizeof(OSEVM_EVALTYPE_ADDR)
932#ifndef OSEVM_EVALTYPE
934#define OSEVM_EVALTYPE osevm_evalType_hook
958 int32_t size,
const char *
const bundle);
963 int32_t size,
const char *
const bundle);
973 int32_t size,
const char *
const message);
983#ifdef OSEVM_HAVE_PROBES
990struct osevm_probes *osevm_probes(
ose_bundle osevm);
1000#ifdef OSE_CONF_PROBE_STEPS
1015#define OSEVM_PROBE_TRACE 1
1016#define OSEVM_PROBE_SIZES 2
1017void osevm_probeSteps_trace(
ose_bundle osevm,
int flags);
1018void osevm_probeSteps_reset(
ose_bundle osevm);
1019void osevm_probeSteps_dump(
ose_bundle osevm, FILE *fp);
1023const char *osevm_probeSteps_row(
ose_bundle osevm,
int i,
1024 uint64_t *n, uint64_t *t);
1027void osevm_probeSteps_setClock(
ose_bundle osevm, uint64_t (*clock)(
void));
1032uint64_t osevm_probeSteps_time(
ose_bundle osevm);
1033void osevm_probeSteps_zone(
ose_bundle osevm,
const char *
const name,
1051#ifdef OSEVM_HAVE_SIZES
1069 int32_t control_size,
#define OSEVM_OPCODE_NAME(b, off, n)
The name an opcode stands for, or NULL for none. b is the bundle the opcode sits in – the control reg...
Definition ose_vm.h:898
#define OSEVM_OPCODE
What runs an instruction by number (OSETT_OPCODE).
Definition ose_vm.h:876
void(* ose_fn)(ose_bundle)
Function pointer for the basic OSE function that operates on a bundle.
Definition ose.h:435
contains functions that structure an OSC bundle for use with other parts of this library
Status codes for context bundles.
ose_errno
Definition ose_errno.h:37
#define B(...)
Instantiate a top-level OSC bundle.
Definition ose_test_ctosc.h:339
contains basic utilities for reading, writing, and querying an OSC bundle
void osevm_run(ose_bundle bundle)
Run the VM.
Definition ose_vm.c:1944
int32_t osevm_inputMessage(ose_bundle osevm, int32_t size, const char *const message)
Copy a single OSC element into the input bundle of the VM.
Definition ose_vm.c:2248
int32_t osevm_inputMessages(ose_bundle osevm, int32_t size, const char *const bundle)
Copy the contents of an OSC bundle into the input bundle of the VM.
Definition ose_vm.c:2149
ose_bundle osevm_init(ose_bundle bundle)
Initialize the VM.
Definition ose_vm.c:537
void osevm_setFault(ose_bundle osevm, enum ose_errno e)
Record a fault in /_h.
Definition ose_vm.c:439
enum ose_errno osevm_getFault(ose_bundle osevm)
The fault this machine is in, or OSE_ERR_NONE.
Definition ose_vm.c:446
int osevm_controlOp(const char *op, ose_fn *fn, const char **name)
This VM's own operation named op, as /$ names it ("/@", "/,/i").
Definition ose_vm.c:1007
int32_t osevm_declaresAtOffset(ose_bundle B, int32_t offset)
Which registers the bundle ELEMENT at offset declares.
Definition ose_vm.c:366
void osevm_clearFault(ose_bundle osevm)
Declare the fault handled.
Definition ose_vm.c:456
int32_t osevm_computeSizeReqs(int n,...)
Compute the size requirements of the VM given a list of sizes of each of additional VM bundle to be c...
Definition ose_vm.c:2270
char osevm_step(ose_bundle osevm)
Step the VM.
Definition ose_vm.c:1782
int32_t osevm_declares(ose_bundle src)
Which registers src declares.
Definition ose_vm.c:341