summaryrefslogtreecommitdiffhomepage
path: root/test-asm.cpp
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2020-10-24 16:32:18 +0200
committerRoland Reichwein <mail@reichwein.it>2020-10-24 16:32:18 +0200
commit1011655d2ef76a0c0aa29dbbff091dab139198e3 (patch)
tree63763828f259846f56285691805c187583ecb6bb /test-asm.cpp
parent1349c00b782eca3ea841bfa388301cb6fc908cc7 (diff)
Add FlowGraph
Diffstat (limited to 'test-asm.cpp')
-rw-r--r--test-asm.cpp132
1 files changed, 0 insertions, 132 deletions
diff --git a/test-asm.cpp b/test-asm.cpp
deleted file mode 100644
index 2d3afa0..0000000
--- a/test-asm.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "asm/chunk.h"
-#include "asm/assembler.h"
-#include "asm/segment.h"
-#include "asm/intel64/all_ops.h"
-
-#include "minicc.h"
-
-#include <boost/algorithm/string.hpp>
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-#include <algorithm>
-#include <cctype>
-#include <deque>
-#include <map>
-#include <memory>
-#include <string>
-#include <system_error>
-#include <utility>
-#include <vector>
-
-using namespace std::string_literals;
-namespace fs = std::filesystem;
-
-class AsmTest: public ::testing::Test
-{
-protected:
- AsmTest() {
- //debug = true;
- }
- ~AsmTest() {
- }
- void SetUp(){
- }
- void TearDown(){
- }
-};
-
-TEST_F(AsmTest, Intel64_add) {
- Segment segment;
- Asm::Args args{{Asm::Args::Register32("eax"), Asm::Args::Immediate32(1)}};
- segment.push_back(makeOp("add", args));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>({0x05, 0x01, 0x00, 0x00, 0x00}));
-}
-
-TEST_F(AsmTest, Intel64_int_0) {
- Segment segment;
- Asm::Args args{{Asm::Args::Immediate8(0)}};
- segment.push_back(makeOp("int", args));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>{0xCE});
-}
-
-TEST_F(AsmTest, Intel64_int_1) {
- Segment segment;
- Asm::Args args{{Asm::Args::Immediate8(1)}};
- segment.push_back(makeOp("int", args));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>{0xF1});
-}
-
-TEST_F(AsmTest, Intel64_int_5) {
- Segment segment;
- Asm::Args args{{Asm::Args::Immediate8(5)}};
- segment.push_back(makeOp("int", args));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>({0xCD, 0x05}));
-}
-
-TEST_F(AsmTest, Intel64_nop) {
- Segment segment;
- segment.push_back(makeOp("nop"));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>{0x90});
-}
-
-TEST_F(AsmTest, Intel64_ret) {
- Segment segment;
- segment.push_back(makeOp("ret"));
-
- ASSERT_EQ(segment.size(), 1);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>{0xC3});
-}
-
-TEST_F(AsmTest, Intel64_multiple) {
- Segment segment;
-
- segment.push_back(makeOp("nop"));
- Asm::Args args0{{Asm::Args::Immediate8(5)}};
- segment.push_back(makeOp("int", args0));
- segment.push_back(makeOp("ret"));
- segment.push_back(makeLabel("data1"));
- segment.push_back(makeOp("ret"));
- Asm::Args args1{{Asm::Args::Label("data1")}};
- segment.push_back(makeOp("jmp", args1));
- segment.push_back(makeData({1, 2, 3}));
-
- segment.insertAddresses();
-
- ASSERT_EQ(segment.size(), 7);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>(
- {
- 0x90, // nop
- 0xCD, 0x05, // int 5
- 0xC3, // ret
- // data1:
- 0xC3, // ret
- 0xE9, 0xFF, 0xFF, 0xFF, 0xFF, // jmp data1
- 0x01, 0x02, 0x03 // data
- }));
-
- segment.optimize();
-
- ASSERT_EQ(segment.size(), 7);
- ASSERT_EQ(segment.getCode(), std::vector<uint8_t>(
- {
- 0x90, // nop
- 0xCD, 0x05, // int 5
- 0xC3, // ret
- // data1:
- 0xC3, // ret
- 0xEB, 0xFF, // jmp data1
- 0x01, 0x02, 0x03 // data
- }));
-}