= Deimos Virtual Machine Jesse Brault 0.1.0, December 2024 :toc: == Op Codes All numbers larger than `u8` are stored in **little-endian** format in raw bytecode. === Move Byte Copies the operand into the target register. [source] ---- mov_byte( target_register: u8, operand: u8 ) ---- === Move Int Copies the operand into the target register. [source] ---- mov_int( target_register: u8, operand: u32 ) ---- The operand is converted to an `i32` at runtime by the virtual machine. === Move Long Copies the operand to the target register. [source] ---- mov_long( target_register: u8, operand: u64 ) ---- The operand is converted to an `i64` at runtime by the virtual machine. === Move USize Copies the operand to the target register. [source] ---- mov_usize( target_register: u8, operand: usize ) ---- Unlike most other operand types, this operand remains unsigned at runtime. === Move Double Copies the operand to the target register. [source] ---- mov_double( target_register: u8, operand: u64 ) ---- The operand is converted to an `f64` at runtime by the virtual machine. === Move Boolean Copies the operand to the target register. [source] ---- mov_boolean( target_register: u8, operand: u8 ) ---- The operand is converted to a `bool` at runtime by the virtual machine. === Move Register Moves or copies (see below) the value in one register to another. [source] ---- mov_register( target_register: u8, source_register: u8 ) ---- For `Byte`, `Int`, `Long`, `USize`, `Double`, and `Boolean`, the value is **copied** to the register. For `Object` values, the value is **moved**, meaning that register takes ownership of the referenced object. === Load Loads the target register with the `DvmValue` inner value stored in the field at `field_index` in the object in the source register. [source] ---- load_object( target_register: u8, source_register: u8, field_index: usize ) ---- The source register must contain a `DvmValue::Object` at runtime. === Store Stores the value contained in the source register to the field at `field_index` in the object contained in the target register. [source] ---- store( target_register: u8, offset: usize, source_register: u8 ) ---- The target register must contain a `DvmValue::Object` at runtime. === Allocate Allocates memory for an object of the specified type and stores the allocated `DvmValue::Object` in the target register. [source] ---- alloc( target_register: u8, implementation_name_length: usize, implementation_name: [u8] ) ---- The `implementation_name` is the bytes array of a UTF-8-encoded string, and `implementation_name_length` is the length of that array. === Deallocate Deallocates the memory for the object stored in the target register. [source] ---- dealloc( target_register: u8 ) ---- The target register must contain a `DvmValue::Object` at runtime. === Platform Call === Invoke Function === Invoke Virtual === Invoke Dynamic === Add [source] ---- add( target_register: u8, left_register: u8, right_register: u8 ) ---- === Subtract === Multiply === Divide === Modulo === Power