void ECodesAssembler :: writeCommand(ByteCommand command, MemoryWriter& writer) { writer.writeByte(command.code); if (command.code > MAX_SINGLE_ECODE) { writer.writeDWord(command.argument); } if (command.code > MAX_DOUBLE_ECODE) { writer.writeDWord(command.additional); } }
void ECodesAssembler :: writeCommand(ByteCommand command, MemoryWriter& writer) { writer.writeByte(command.code); if (command.code >= 0x20) { writer.writeDWord(command.argument); } if (command.code >= 0xE0) { writer.writeDWord(command.additional); } }
void ECodesAssembler :: compileJump(ByteCode code, TokenInfo& token, MemoryWriter& writer, LabelInfo& info) { writer.writeByte(code); int label = 0; token.read(); if (info.labels.exist(token.value)) { label = info.labels.get(token.value) - writer.Position() - 4; } else { info.fwdJumps.add(token.value, writer.Position()); } writer.writeDWord(label); }
void ECodesAssembler :: compileRJump(ByteCode code, TokenInfo& token, MemoryWriter& writer, LabelInfo& info, _Module* binary) { writer.writeByte(code); int label = 0; token.read(); if (info.labels.exist(token.value)) { label = info.labels.get(token.value) - writer.Position() - 8; } else { info.fwdJumps.add(token.value, writer.Position() + 4); } size_t reference = compileRArg(token, binary); writer.writeDWord(reference); writer.writeDWord(label); }
void ECodesAssembler :: compileMccJump(ByteCode code, TokenInfo& token, MemoryWriter& writer, LabelInfo& info) { writer.writeByte(code); int label = 0; token.read(); if (info.labels.exist(token.value)) { label = info.labels.get(token.value) - writer.Position() - 8; } else { info.fwdJumps.add(token.value, 4 + writer.Position()); } int message = token.readInteger(constants); writer.writeDWord(message); writer.writeDWord(label); }