diff options
| Commit | 0b2444013dfb6bfb0c033b5b827610f6df49ede5 (patch) | |
|---|---|---|
| Author | 2018-11-25 09:08:47 +0200 | |
| Committer | 2018-11-25 09:08:47 +0200 | |
| Files | e6206cd3329067cd48dd0ccf90262f6eaa6cdbbb /spasm/src/asm/bytecode.cpp | |
| IPL-0b2444013dfb6bfb0c033b5b827610f6df49ede5.tar IPL-0b2444013dfb6bfb0c033b5b827610f6df49ede5.tar.gz IPL-0b2444013dfb6bfb0c033b5b827610f6df49ede5.zip | ||
| Parent | 156d0957c1b36bba2685fef548a8573e9337309a (diff) | |
| Parent | 4fca8e8e6c1056aed11437c87e9175232b48c8f4 (diff) | |
Merge branch 'master' into json-to-ast
1 files changed, 32 insertions, 20 deletions
| -rw-r--r-- | spasm/src/asm/bytecode.cpp | 52 |
diff --git a/spasm/src/asm/bytecode.cpp b/spasm/src/asm/bytecode.cpp index 39f1de6..cc250ba 100644 --- a/spasm/src/asm/bytecode.cpp +++ b/spasm/src/asm/bytecode.cpp @@ -26,17 +26,29 @@ void Bytecode_File::push_opcode(Bytecode_Stream::Opcode_t opcode) push_byte(opcode); } -void Bytecode_File::push_integer(int number) +union DoubleToBits { + double as_double; + int64_t as_bits; +}; + +int64_t to_bits(double d) { - if (number <= 0xff) - { - push_byte((byte)number); - } - else - { - for (size_t i = 0; i < sizeof(int); ++i) - push_byte((number >> (i << 3)) & 0xff); - } + DoubleToBits v; + v.as_double = d; + return v.as_bits; +}; + +void Bytecode_File::push_integer(int64_t number, int size) +{ + for (int i = 0; i < size; ++i) + push_byte((number >> (i << 3)) & 0xff); +} + +void Bytecode_File::push_double(double number) +{ + auto bits = to_bits(number); + for (size_t i = 0; i < sizeof(size_t); ++i) + push_byte((bits >> (i << 3)) & 0xff); } void Bytecode_Memory::push_byte(Bytecode_Stream::byte byte) @@ -49,17 +61,17 @@ void Bytecode_Memory::push_opcode(Bytecode_Stream::Opcode_t opcode) push_byte(opcode); } -void Bytecode_Memory::push_integer(int number) +void Bytecode_Memory::push_integer(int64_t number, int size) { - if (number <= 0xff) - { - push_byte((byte)number); - } - else - { - for (size_t i = 0; i < sizeof(int); ++i) - push_byte((number >> (i << 3)) & 0xff); - } + for (int i = 0; i < size; ++i) + push_byte((number >> (i << 3)) & 0xff); +} + +void Bytecode_Memory::push_double(double number) +{ + auto bits = to_bits(number); + for (size_t i = 0; i < sizeof(size_t); ++i) + push_byte((bits >> (i << 3)) & 0xff); } void Bytecode_Memory::set_location(size_t index, size_t location) |
