summaryrefslogtreecommitdiffhomepage
path: root/src/Tools/asm.cc
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-29 17:27:19 -0500
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-29 17:27:19 -0500
commitdad25544802de6d4cd839f5d6d5753ad7faeef97 (patch)
treeac60308829c163689c47da059d5de14296d81f4e /src/Tools/asm.cc
parentbdef578a578177ce95c01fa061a028292556ecbe (diff)
chore: update general specs and citation file, breaking project structure changes as well.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/Tools/asm.cc')
-rw-r--r--src/Tools/asm.cc96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/Tools/asm.cc b/src/Tools/asm.cc
new file mode 100644
index 0000000..025b158
--- /dev/null
+++ b/src/Tools/asm.cc
@@ -0,0 +1,96 @@
+/* ========================================
+
+ Copyright (C) 2024-2025 Amlal El Mahrouss, Licensed under the Apache 2.0 license
+
+======================================== */
+
+/// @file asm.cc
+/// @brief Assembler frontend.
+
+#include <CompilerKit/Defines.h>
+#include <CompilerKit/Version.h>
+#include <cstring>
+#include <vector>
+
+CK_IMPORT_C Int32 AssemblerMainPower64(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMainARM64(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMain64x0(Int32 argc, Char const* argv[]);
+CK_IMPORT_C Int32 AssemblerMainAMD64(Int32 argc, Char const* argv[]);
+
+enum AsmKind : Int32 {
+ kInvalidAssembler = 0,
+ kX64Assembler = 100,
+ k64X0Assembler,
+ kPOWER64Assembler,
+ kARM64Assembler,
+ kAssemblerCount = kARM64Assembler - kX64Assembler + 1,
+};
+
+Int32 main(Int32 argc, Char const* argv[]) {
+ std::vector<const Char*> arg_vec_cstr;
+ arg_vec_cstr.push_back(argv[0]);
+
+ const Int32 kInvalidAssembler = -1;
+ Int32 asm_type = kInvalidAssembler;
+
+ for (size_t index_arg = 1; index_arg < argc; ++index_arg) {
+ if (strstr(argv[index_arg], "-asm:h")) {
+ std::printf("asm: Frontend Assembler (64x0, power64, arm64, x64).\n");
+ std::printf("asm: Version: %s, Release: %s.\n", kDistVersion, kDistRelease);
+ std::printf(
+ "asm: Designed by Amlal El Mahrouss, Copyright (C) 2024-2025 Amlal El Mahrouss, all "
+ "rights reserved.\n");
+ std::printf(
+ "CompilerKit: Designed by Amlal El Mahrouss, Copyright (C) 2024-2025 Amlal El Mahrouss, "
+ "Licensed under the Apache 2.0 license.\n");
+
+ return 0;
+ } else if (strstr(argv[index_arg], "-asm:x64")) {
+ asm_type = kX64Assembler;
+ } else if (strstr(argv[index_arg], "-asm:aarch64")) {
+ asm_type = kARM64Assembler;
+ } else if (strstr(argv[index_arg], "-asm:64x0")) {
+ asm_type = k64X0Assembler;
+ } else if (strstr(argv[index_arg], "-asm:power64")) {
+ asm_type = kPOWER64Assembler;
+ } else {
+ arg_vec_cstr.push_back(argv[index_arg]);
+ }
+ }
+
+ switch (asm_type) {
+ case kPOWER64Assembler: {
+ if (int32_t code = AssemblerMainPower64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case k64X0Assembler: {
+ if (int32_t code = AssemblerMain64x0(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case kARM64Assembler: {
+ if (int32_t code = AssemblerMainARM64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ case kX64Assembler: {
+ if (int32_t code = AssemblerMainAMD64(arg_vec_cstr.size(), arg_vec_cstr.data()); code) {
+ std::printf("asm: frontend exited with code %i.\n", code);
+ return code;
+ }
+ break;
+ }
+ default: {
+ return EXIT_FAILURE;
+ }
+ }
+
+ return EXIT_SUCCESS;
+}