diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-10 10:48:31 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-11-10 10:48:31 +0100 |
| commit | 54167881459a4c188da488d900174eb3e903e17d (patch) | |
| tree | 6679bcbf80fb43c0730f7435c9ce33fab308c10d /dev | |
| parent | 3490d23ac8571ad68f6ee3c8f67d632d1b0f1fc3 (diff) | |
C++: AMD64: Improvements and fixes.
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/ToolchainKit/src/CPlusPlusCompilerAMD64.cc | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/dev/ToolchainKit/src/CPlusPlusCompilerAMD64.cc b/dev/ToolchainKit/src/CPlusPlusCompilerAMD64.cc index e8bd8e9..85f2114 100644 --- a/dev/ToolchainKit/src/CPlusPlusCompilerAMD64.cc +++ b/dev/ToolchainKit/src/CPlusPlusCompilerAMD64.cc @@ -153,7 +153,7 @@ static CompilerFrontendCPlusPlus* kCompilerFrontend = nullptr; static std::vector<std::string> kRegisterMap; -static std::vector<std::string> cRegisters = { +static std::vector<std::string> kRegisterList = { "rbx", "rsi", "r10", @@ -170,7 +170,7 @@ static std::vector<std::string> cRegisters = { /// @brief The PEF calling convention (caller must save rax, rbp) /// @note callee must return via **rax**. -static std::vector<std::string> cRegistersCall = { +static std::vector<std::string> kRegisterConventionCallList = { "r8", "r9", "r10", @@ -181,7 +181,7 @@ static std::vector<std::string> cRegistersCall = { "r15", }; -static size_t kLevelFunction = 0UL; +static std::size_t kFunctionEmbedLevel = 0UL; /// detail namespaces @@ -324,16 +324,16 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, auto& valueOfVarOpposite = isdigit(left[0]) ? left : right; - syntax_tree.fUserValue += "mov " + cRegisters[indexRight + 1] + ", " + valueOfVarOpposite + "\n"; - syntax_tree.fUserValue += "cmp " + cRegisters[kRegisterMap.size() - 1] + "," + cRegisters[indexRight + 1] + "\n"; + syntax_tree.fUserValue += "mov " + kRegisterList[indexRight + 1] + ", " + valueOfVarOpposite + "\n"; + syntax_tree.fUserValue += "cmp " + kRegisterList[kRegisterMap.size() - 1] + "," + kRegisterList[indexRight + 1] + "\n"; goto done_iterarting_on_if; } auto& valueOfVarOpposite = isdigit(left[0]) ? left : right; - syntax_tree.fUserValue += "mov " + cRegisters[indexRight + 1] + ", " + valueOfVarOpposite + "\n"; - syntax_tree.fUserValue += "cmp " + cRegisters[kRegisterMap.size() - 1] + ", " + cRegisters[indexRight + 1] + "\n"; + syntax_tree.fUserValue += "mov " + kRegisterList[indexRight + 1] + ", " + valueOfVarOpposite + "\n"; + syntax_tree.fUserValue += "cmp " + kRegisterList[kRegisterMap.size() - 1] + ", " + kRegisterList[indexRight + 1] + "\n"; break; } @@ -385,20 +385,20 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, syntax_tree.fUserValue = "public_segment .code64 __TOOLCHAINKIT_" + fnName + "\n"; - ++kLevelFunction; + ++kFunctionEmbedLevel; } case ToolchainKit::KeywordKind::eKeywordKindFunctionEnd: { if (text.ends_with(";")) break; - --kLevelFunction; + --kFunctionEmbedLevel; - if (kRegisterMap.size() > cRegisters.size()) + if (kRegisterMap.size() > kRegisterList.size()) { - --kLevelFunction; + --kFunctionEmbedLevel; } - if (kLevelFunction < 1) + if (kFunctionEmbedLevel < 1) kRegisterMap.clear(); break; } @@ -474,9 +474,9 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, if (typeFound && keyword.first.keyword_kind != ToolchainKit::KeywordKind::eKeywordKindVariableInc && keyword.first.keyword_kind != ToolchainKit::KeywordKind::eKeywordKindVariableDec) { - if (kRegisterMap.size() > cRegisters.size()) + if (kRegisterMap.size() > kRegisterList.size()) { - ++kLevelFunction; + ++kFunctionEmbedLevel; } while (varName.find(" ") != std::string::npos) @@ -521,11 +521,11 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, { syntax_tree.fUserValue = "segment .data64 __TOOLCHAINKIT_LOCAL_VAR_" + varName + ": db " + valueOfVar + ", 0\n\n"; - syntax_tree.fUserValue += instr + cRegisters[kRegisterMap.size() - 1] + ", " + "__TOOLCHAINKIT_LOCAL_VAR_" + varName + "\n"; + syntax_tree.fUserValue += instr + kRegisterList[kRegisterMap.size() - 1] + ", " + "__TOOLCHAINKIT_LOCAL_VAR_" + varName + "\n"; } else { - syntax_tree.fUserValue = instr + cRegisters[kRegisterMap.size() - 1] + ", " + valueOfVar + "\n"; + syntax_tree.fUserValue = instr + kRegisterList[kRegisterMap.size() - 1] + ", " + valueOfVar + "\n"; } goto done; @@ -538,11 +538,11 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, { syntax_tree.fUserValue = "segment .data64 __TOOLCHAINKIT_LOCAL_VAR_" + varName + ": db " + valueOfVar + ", 0\n"; - syntax_tree.fUserValue += instr + cRegisters[kRegisterMap.size()] + ", " + "__TOOLCHAINKIT_LOCAL_VAR_" + varName + "\n"; + syntax_tree.fUserValue += instr + kRegisterList[kRegisterMap.size()] + ", " + "__TOOLCHAINKIT_LOCAL_VAR_" + varName + "\n"; } else { - syntax_tree.fUserValue = instr + cRegisters[kRegisterMap.size()] + ", " + valueOfVar + "\n"; + syntax_tree.fUserValue = instr + kRegisterList[kRegisterMap.size()] + ", " + valueOfVar + "\n"; } goto done; @@ -661,11 +661,11 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, if (pairRight != varName) { - syntax_tree.fUserValue = instr + cRegisters[kRegisterMap.size()] + ", " + valueOfVar + "\n"; + syntax_tree.fUserValue = instr + kRegisterList[kRegisterMap.size()] + ", " + valueOfVar + "\n"; continue; } - syntax_tree.fUserValue = instr + cRegisters[indexRight - 1] + ", " + valueOfVar + "\n"; + syntax_tree.fUserValue = instr + kRegisterList[indexRight - 1] + ", " + valueOfVar + "\n"; break; } @@ -697,7 +697,7 @@ bool CompilerFrontendCPlusPlus::Compile(const std::string text, if (pair != subText) continue; - syntax_tree.fUserValue = "mov rax, " + cRegisters[indxReg - 1] + "\r\nret\n"; + syntax_tree.fUserValue = "mov rax, " + kRegisterList[indxReg - 1] + "\r\nret\n"; break; } |
