diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-28 09:58:23 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-28 09:58:23 +0100 |
| commit | f08280eb5759350b2bc22a0ae901184ffc7bd80f (patch) | |
| tree | 99d0690559b3a7176d4fcb920023e03d37ff1839 /Private/CompilerKit | |
| parent | 73482b5dd2f8bacc019c8db2a563f45f81961686 (diff) | |
Asm: Improved AMD64 support for i64asm.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/CompilerKit')
| -rw-r--r-- | Private/CompilerKit/AsmKit/Arch/amd64.hpp | 14 | ||||
| -rw-r--r-- | Private/CompilerKit/AsmKit/AsmKit.hpp | 69 |
2 files changed, 63 insertions, 20 deletions
diff --git a/Private/CompilerKit/AsmKit/Arch/amd64.hpp b/Private/CompilerKit/AsmKit/Arch/amd64.hpp index 239bdca..ac92c9b 100644 --- a/Private/CompilerKit/AsmKit/Arch/amd64.hpp +++ b/Private/CompilerKit/AsmKit/Arch/amd64.hpp @@ -45,12 +45,19 @@ struct CpuCodeAMD64 #define kJumpLimitStandardLimit 0xEB inline std::vector<CpuCodeAMD64> kOpcodesAMD64 = { - kAsmOpcodeDecl("int", 0xE3) + kAsmOpcodeDecl("int", 0xCD) kAsmOpcodeDecl("into", 0xCE) + kAsmOpcodeDecl("intd", 0xF1) + kAsmOpcodeDecl("int3", 0xC3) + kAsmOpcodeDecl("iret", 0xCF) - kAsmOpcodeDecl("ret", 0xC3) + kAsmOpcodeDecl("retf", 0xCB) + kAsmOpcodeDecl("retn", 0xC3) kAsmOpcodeDecl("sti", 0xfb) kAsmOpcodeDecl("cli", 0xfa) + + kAsmOpcodeDecl("nop", 0x90) + kAsmOpcodeDecl("mov eax", 0xb8) kAsmOpcodeDecl("mov ecx", 0xb9) kAsmOpcodeDecl("mov edx", 0xba) @@ -58,8 +65,11 @@ inline std::vector<CpuCodeAMD64> kOpcodesAMD64 = { kAsmOpcodeDecl("mov esp", 0xbc) kAsmOpcodeDecl("mov ebp", 0xbd) kAsmOpcodeDecl("mov esi", 0xbe) + kAsmOpcodeDecl("jmp", 0xE9) kAsmOpcodeDecl("call", 0xE9) + + kAsmOpcodeDecl("mov", 0x00) }; // \brief 64x0 register prefix diff --git a/Private/CompilerKit/AsmKit/AsmKit.hpp b/Private/CompilerKit/AsmKit/AsmKit.hpp index cc8940e..a561aad 100644 --- a/Private/CompilerKit/AsmKit/AsmKit.hpp +++ b/Private/CompilerKit/AsmKit/AsmKit.hpp @@ -61,6 +61,53 @@ namespace CompilerKit }; + union NumberCastBase + { + NumberCastBase() = default; + ~NumberCastBase() = default; + + }; + + union NumberCast64 final + { + NumberCast64() = default; + explicit NumberCast64(UInt64 raw) : raw(raw) {} + ~NumberCast64() { raw = 0; } + + CharType number[8]; + UInt64 raw; + }; + + union NumberCast32 final + { + NumberCast32() = default; + explicit NumberCast32(UInt32 raw) : raw(raw) {} + ~NumberCast32() { raw = 0; } + + CharType number[4]; + UInt32 raw; + }; + + union NumberCast16 final + { + NumberCast16() = default; + explicit NumberCast16(UInt16 raw) : raw(raw) {} + ~NumberCast16() { raw = 0; } + + CharType number[2]; + UInt16 raw; + }; + + union NumberCast8 final + { + NumberCast8() = default; + explicit NumberCast8(UInt8 raw) : raw(raw) {} + ~NumberCast8() { raw = 0; } + + CharType number; + UInt8 raw; + }; + class PlatformAssembler { public: @@ -89,6 +136,10 @@ namespace CompilerKit virtual bool WriteLine(std::string &line, const std::string &file) override; virtual bool WriteNumber(const std::size_t& pos, std::string& from_what) override; + virtual bool WriteNumber16(const std::size_t& pos, std::string& from_what); + virtual bool WriteNumber32(const std::size_t& pos, std::string& from_what); + virtual bool WriteNumber8(const std::size_t& pos, std::string& from_what); + }; #endif // __ASM_NEED_AMD64__ @@ -128,23 +179,5 @@ namespace CompilerKit }; #endif // __ASM_NEED_32x0__ - - union NumberCast final - { - explicit NumberCast(UInt64 raw) : raw(raw) {} - ~NumberCast() { raw = 0; } - - CharType number[8]; - UInt64 raw; - }; - - union NumberCast32 final - { - explicit NumberCast32(UInt32 raw) : raw(raw) {} - ~NumberCast32() { raw = 0; } - - CharType number[4]; - UInt32 raw; - }; } |
