From a7cd9d4f8d83024402bacb39786e5e1a018a0a04 Mon Sep 17 00:00:00 2001 From: Dimitar Trendafilov Date: Wed, 14 Nov 2018 23:45:56 +0200 Subject: Spasm can assemble programs on with the new instruction set (#47) * Use checkout as-is, commit as-is * Spasm can assemble programs based on the new instruction set --- spasm/src/asm/bytecode.cpp | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) (limited to 'spasm/src/asm/bytecode.cpp') diff --git a/spasm/src/asm/bytecode.cpp b/spasm/src/asm/bytecode.cpp index 27fed2b..39f1de6 100644 --- a/spasm/src/asm/bytecode.cpp +++ b/spasm/src/asm/bytecode.cpp @@ -28,8 +28,15 @@ void Bytecode_File::push_opcode(Bytecode_Stream::Opcode_t opcode) void Bytecode_File::push_integer(int number) { - for (size_t i = 0; i < sizeof(int); ++i) - push_byte((number >> (i << 3)) & 0xff); + if (number <= 0xff) + { + push_byte((byte)number); + } + else + { + for (size_t i = 0; i < sizeof(int); ++i) + push_byte((number >> (i << 3)) & 0xff); + } } void Bytecode_Memory::push_byte(Bytecode_Stream::byte byte) @@ -44,20 +51,41 @@ void Bytecode_Memory::push_opcode(Bytecode_Stream::Opcode_t opcode) void Bytecode_Memory::push_integer(int number) { - for (size_t i = 0; i < sizeof(int); ++i) - push_byte((number >> (i << 3)) & 0xff); + if (number <= 0xff) + { + push_byte((byte)number); + } + else + { + for (size_t i = 0; i < sizeof(int); ++i) + push_byte((number >> (i << 3)) & 0xff); + } } void Bytecode_Memory::set_location(size_t index, size_t location) { - for (size_t i = 0; i < sizeof(size_t); ++i) - _bytecode.at(index + i) = ((location >> (i << 3)) & 0xff); + if (location <= 0xff) + { + _bytecode[index] = (byte)location; + } + else + { + for (size_t i = 0; i < sizeof(size_t); ++i) + _bytecode.at(index + i) = ((location >> (i << 3)) & 0xff); + } } void Bytecode_Memory::push_location(size_t location) { - for (size_t i = 0; i < sizeof(size_t); ++i) - _bytecode.push_back((location >> (i << 3)) & 0xff); + if (location <= 0xff) + { + push_byte((byte)location); + } + else + { + for (size_t i = 0; i < sizeof(size_t); ++i) + _bytecode.push_back((location >> (i << 3)) & 0xff); + } } const Bytecode_Memory::Bytecode& Bytecode_Memory::bytecode() const -- cgit v1.3.1-23-gd82d