162 #define ZRTOS_VM_OP_WITHOUT_FLOAT(op)\ 163 case ZRTOS_VM_IO_TYPE__INT8:\ 164 a.value.v_s8 = a.value.v_s8 op b.value.v_s8;\ 166 case ZRTOS_VM_IO_TYPE__INT16:\ 167 a.value.v_s16 = a.value.v_s16 op b.value.v_s16;\ 169 case ZRTOS_VM_IO_TYPE__INT32:\ 170 a.value.v_s32 = a.value.v_s32 op b.value.v_s32;\ 172 case ZRTOS_VM_IO_TYPE__INT64:\ 173 a.value.v_s64 = a.value.v_s64 op b.value.v_s64;\ 175 case ZRTOS_VM_IO_TYPE__UINT8:\ 176 a.value.v_u8 = a.value.v_u8 op b.value.v_u8;\ 178 case ZRTOS_VM_IO_TYPE__UINT16:\ 179 a.value.v_u16 = a.value.v_u16 op b.value.v_u16;\ 181 case ZRTOS_VM_IO_TYPE__UINT32:\ 182 a.value.v_u32 = a.value.v_u32 op b.value.v_u32;\ 184 case ZRTOS_VM_IO_TYPE__UINT64:\ 185 a.value.v_u64 = a.value.v_u64 op b.value.v_u64;\ 188 #define ZRTOS_VM_OP(op)\ 189 ZRTOS_VM_OP_WITHOUT_FLOAT(op)\ 190 case ZRTOS_VM_IO_TYPE__FLOAT:\ 191 a.value.v_f32 = a.value.v_f32 op b.value.v_f32;\ 193 case ZRTOS_VM_IO_TYPE__DOUBLE:\ 194 a.value.v_f64 = a.value.v_f64 op b.value.v_f64;\ 197 #define ZRTOS_VM_OP_NOT(op)\ 198 case ZRTOS_VM_IO_TYPE__FLOAT:\ 199 a.value.v_f32 = op a.value.v_f32;\ 201 case ZRTOS_VM_IO_TYPE__DOUBLE:\ 202 a.value.v_f64 = op a.value.v_f64;\ 204 case ZRTOS_VM_IO_TYPE__INT8:\ 205 case ZRTOS_VM_IO_TYPE__INT16:\ 206 case ZRTOS_VM_IO_TYPE__INT32:\ 207 case ZRTOS_VM_IO_TYPE__INT64:\ 208 case ZRTOS_VM_IO_TYPE__UINT8:\ 209 case ZRTOS_VM_IO_TYPE__UINT16:\ 210 case ZRTOS_VM_IO_TYPE__UINT32:\ 211 case ZRTOS_VM_IO_TYPE__UINT64:\ 212 a.value.v_u64 = op a.value.v_u64;\ 215 #define ZRTOS_VM_OP_BOOLEAN(op)\ 216 case ZRTOS_VM_IO_TYPE__INT8:\ 217 case ZRTOS_VM_IO_TYPE__INT16:\ 218 case ZRTOS_VM_IO_TYPE__INT32:\ 219 case ZRTOS_VM_IO_TYPE__INT64:\ 220 a.value.v_u8 = a.value.v_s64 op b.value.v_s64;\ 222 case ZRTOS_VM_IO_TYPE__UINT8:\ 223 case ZRTOS_VM_IO_TYPE__UINT16:\ 224 case ZRTOS_VM_IO_TYPE__UINT32:\ 225 case ZRTOS_VM_IO_TYPE__UINT64:\ 226 a.value.v_u8 = a.value.v_u64 op b.value.v_u64;\ 228 case ZRTOS_VM_IO_TYPE__FLOAT:\ 229 a.value.v_u8 = a.value.v_f32 op b.value.v_f32;\ 231 case ZRTOS_VM_IO_TYPE__DOUBLE:\ 232 a.value.v_u8 = a.value.v_f64 op b.value.v_f64;\ 266 goto L_RETURN__EFAULT;
270 goto L_RETURN__EFAULT;
293 goto L_INPUT_NORMALIZE;
295 goto L_RETURN__EFAULT;
364 goto L_OUTPUT__PUSH_TYPE;
372 goto L_OUTPUT__PUSH_TYPE;
375 goto L_OUTPUT__PUSH_TYPE;
378 goto L_OUTPUT__PUSH_TYPE;
381 goto L_OUTPUT__PUSH_TYPE;
387 goto L_OUTPUT__PUSH_TYPE;
392 goto L_OUTPUT__PUSH_TYPE;
397 goto L_OUTPUT__PUSH_TYPE;
402 goto L_OUTPUT__PUSH_TYPE;
408 goto L_RETURN__EINVAL;
410 goto L_OUTPUT__PUSH_TYPE;
416 goto L_OUTPUT__PUSH_BOOL;
421 goto L_OUTPUT__PUSH_BOOL;
426 goto L_OUTPUT__PUSH_BOOL;
431 goto L_OUTPUT__PUSH_BOOL;
436 goto L_OUTPUT__PUSH_BOOL;
441 goto L_OUTPUT__PUSH_BOOL;
446 goto L_OUTPUT__SET_PROGRAM_OFFSET;
459 goto L_OUTPUT__SET_PROGRAM_OFFSET;
462 goto L_OUTPUT__SET_STACK_OFFSET;
473 goto L_OUTPUT__PUSH_TYPE;
495 goto L_RETURN__EFAULT;
496 L_OUTPUT__SET_PROGRAM_OFFSET:
498 goto L_OUTPUT__SET_OFFSET;
499 L_OUTPUT__SET_STACK_OFFSET:
500 set_offset_stack =
stack;
501 L_OUTPUT__SET_OFFSET:
508 goto L_RETURN__EFAULT;
525 #undef ZRTOS_VM_OP_WITHOUT_FLOAT 527 #undef ZRTOS_VM_OP_NOT 528 #undef ZRTOS_VM_OP_BOOLEAN
void zrtos_vm_value__normalize(zrtos_vm_value_t *thiz)
struct _zrtos_vm_t zrtos_vm_t
size_t zrtos_vm_io_address__get_address(zrtos_vm_io_address_t *thiz)
bool zrtos_vm_io_address__is_negative(zrtos_vm_io_address_t *thiz)
zrtos_vm_function_index_t functions
zrtos_vm_io_address_t address
zrtos_error_t zrtos_vm__icall(zrtos_vm_t *thiz, zrtos_vm_function_id_t id)
void zrtos_mem__zero(void *dest, size_t len)
bool zrtos_vm_io_type__is_double(zrtos_vm_io_type_t type)
#define ZRTOS_VM_OP_WITHOUT_FLOAT(op)
bool zrtos_vm__init(zrtos_vm_t *thiz, zrtos_stack_t stack, zrtos_stack_t program, zrtos_vm_function_index_t functions)
zrtos_vm_function_callback_t zrtos_vm_function__get_callback(zrtos_vm_function_t *thiz)
#define ZRTOS_VM_OP_NOT(op)
bool zrtos_stack__push(zrtos_stack_t *thiz, void *data, size_t length)
size_t zrtos_vm_io_type__get_length(zrtos_vm_io_type_t type)
zrtos_vm_io_address_type_t type
bool zrtos_stack__read_ex(zrtos_stack_t *thiz, void *data, size_t length, size_t offset, bool is_relative, bool is_negative)
ZRTOS_ASSERT__STATIC(sizeof(zrtos_vm_op_t)==sizeof(uint8_t))
bool zrtos_vm_io_type__is_uint(zrtos_vm_io_type_t type)
bool zrtos_stack__pop(zrtos_stack_t *thiz, void *data, size_t length)
union _zrtos_vm_value_t::@0 value
zrtos_error_t zrtos_vm__run(zrtos_vm_t *thiz)
Successful program execution status.
size_t zrtos_vm_function_id_t
struct _zrtos_vm_value_t zrtos_vm_value_t
#define ZRTOS_VM_OP_BOOLEAN(op)
bool zrtos_stack__shift(zrtos_stack_t *thiz, void *data, size_t length)
zrtos_vm_function_t * zrtos_vm_function_index__get_function(zrtos_vm_function_index_t *thiz, zrtos_vm_function_id_t id)
bool zrtos_vm_io_address__is_relative(zrtos_vm_io_address_t *thiz)
bool zrtos_vm_io_address__is_source_program(zrtos_vm_io_address_t *thiz)
size_t zrtos_vm_io_address__get_length(zrtos_vm_io_address_t *thiz)
bool zrtos_stack__set_offset_ex(zrtos_stack_t *thiz, size_t offset, bool is_relative, bool is_negative)
bool zrtos_vm_io_type__is_float(zrtos_vm_io_type_t type)
bool zrtos_stack__write_ex(zrtos_stack_t *thiz, void *data, size_t length, size_t offset, bool is_relative, bool is_negative)