diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-29 18:06:55 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-29 18:06:55 +0200 |
| commit | 10966511ad1580e689fa36c9ea1ec20f5b5ed1a6 (patch) | |
| tree | 5ba73481fa3ed09f23d9f3d2769ab18c2f509e80 /dev | |
| parent | cacea81f3849f5da2a439cbc87a8ae241901b072 (diff) | |
Generally a tinyier commit, but reflects ISA changes.
Use UInt8 for instruction encoding structs (0, 255), instead of char (0, 127).
Rename ppc.hxx to power64.hxx.
Rename decc to subc (sub carry flag)
Remove stack operation instructions on the 64x0 ISA.
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/ndkdll/Asm/CPU/32x0.hxx | 30 | ||||
| -rw-r--r-- | dev/ndkdll/Asm/CPU/64x0.hxx | 51 | ||||
| -rw-r--r-- | dev/ndkdll/Asm/CPU/power64.hxx (renamed from dev/ndkdll/Asm/CPU/ppc.hxx) | 0 | ||||
| -rw-r--r-- | dev/ndkdll/Sources/AssemblerPower.cxx | 2 | ||||
| -rw-r--r-- | dev/ndkdll/Sources/CCompilerPower64.cxx | 2 |
5 files changed, 43 insertions, 42 deletions
diff --git a/dev/ndkdll/Asm/CPU/32x0.hxx b/dev/ndkdll/Asm/CPU/32x0.hxx index 018dea9..aab07e5 100644 --- a/dev/ndkdll/Asm/CPU/32x0.hxx +++ b/dev/ndkdll/Asm/CPU/32x0.hxx @@ -29,10 +29,10 @@ struct CpuCode32x0 { const char fName[32]; - char fOpcode; - char fSize; - char fFunct3; - char fFunct7; + uint8_t fOpcode; + uint8_t fSize; + uint8_t fFunct3; + uint8_t fFunct7; }; #define kAsmDWordStr ".dword" /* 64 bit */ @@ -41,16 +41,18 @@ struct CpuCode32x0 #define kAsmByteStr ".byte" /* 8-bit */ inline std::vector<CpuCode32x0> kOpcodes32x0 = { - kAsmOpcodeDecl("nop", 0b0100011, 0b000, kAsmNoArgs) // nothing to do. - kAsmOpcodeDecl("br", 0b1110011, 0b001, kAsmJump) // jump to branch - kAsmOpcodeDecl("mr", 0b0100011, 0b101, kAsmImmediate) // move registers - kAsmOpcodeDecl("psh", 0b0111011, 0b000, kAsmImmediate) // push to sp - kAsmOpcodeDecl("pop", 0b0111011, 0b001, kAsmImmediate) // pop from sp. - kAsmOpcodeDecl("cls", 0b0111011, 0b010, - kAsmImmediate) // setup stack and call, store address to CR. - kAsmOpcodeDecl("rts", 0b0111011, 0b110, - kAsmImmediate) // pull stack and return form CR. - kAsmOpcodeDecl("int", 0b0111111, 0b000, kAsmSyscall) // raise interrupt + kAsmOpcodeDecl("nop", 0b0100011, 0b000, kAsmNoArgs) // nothing to do. (1C) + kAsmOpcodeDecl("jmp", 0b1110011, 0b001, kAsmJump) // jump to branch (2C) + kAsmOpcodeDecl("mov", 0b0100011, 0b101, kAsmImmediate) // move registers (3C) + kAsmOpcodeDecl("psh", 0b0111011, 0b000, kAsmImmediate) // push to sp (2C) + kAsmOpcodeDecl("pop", 0b0111011, 0b001, kAsmImmediate) // pop from sp. (1C) + kAsmOpcodeDecl("lea", 0b0111011, 0b010, + kAsmImmediate) // setup stack and call, store address to CR (1C). + kAsmOpcodeDecl("ret", 0b0111011, 0b110, + kAsmImmediate) // return from procedure (2C). + kAsmOpcodeDecl("uc", 0b0111111, 0b000, kAsmSyscall) // user call (1C) + kAsmOpcodeDecl("kc", 0b0111111, 0b001, kAsmSyscall) // kernel call (1C) + kAsmOpcodeDecl("int", 0b0111111, 0b010, kAsmSyscall) // raise interrupt (1C) }; // \brief 64x0 register prefix diff --git a/dev/ndkdll/Asm/CPU/64x0.hxx b/dev/ndkdll/Asm/CPU/64x0.hxx index 99a88b1..52ca278 100644 --- a/dev/ndkdll/Asm/CPU/64x0.hxx +++ b/dev/ndkdll/Asm/CPU/64x0.hxx @@ -36,32 +36,31 @@ struct CpuOpcode64x0 }; inline std::vector<CpuOpcode64x0> kOpcodes64x0 = { - kAsmOpcodeDecl("nop", 0b0000000, 0b0000000, kAsmNoArgs) // no-operation. - kAsmOpcodeDecl("np", 0b0000000, 0b0000000, kAsmNoArgs) // no-operation. - kAsmOpcodeDecl("jlr", 0b1110011, 0b0000111, - kAsmJump) // jump to linked return register - kAsmOpcodeDecl("jrl", 0b1110011, 0b0001111, - kAsmJump) // jump from return register. - kAsmOpcodeDecl("mv", 0b0100011, 0b101, kAsmRegToReg) - kAsmOpcodeDecl("bg", 0b1100111, 0b111, kAsmRegToReg) - kAsmOpcodeDecl("bl", 0b1100111, 0b011, kAsmRegToReg) - kAsmOpcodeDecl("beq", 0b1100111, 0b000, kAsmRegToReg) - kAsmOpcodeDecl("bne", 0b1100111, 0b001, kAsmRegToReg) - kAsmOpcodeDecl("bge", 0b1100111, 0b101, kAsmRegToReg) - kAsmOpcodeDecl("ble", 0b1100111, 0b100, kAsmRegToReg) - kAsmOpcodeDecl("stw", 0b0001111, 0b100, kAsmImmediate) - kAsmOpcodeDecl("ldw", 0b0001111, 0b100, kAsmImmediate) - kAsmOpcodeDecl("lda", 0b0001111, 0b101, kAsmImmediate) - kAsmOpcodeDecl("sta", 0b0001111, 0b001, kAsmImmediate) - // add/sub without carry flag - kAsmOpcodeDecl("add", 0b0101011, 0b100, kAsmImmediate) - kAsmOpcodeDecl("sub", 0b0101011, 0b101, kAsmImmediate) - // add/sub with carry flag - kAsmOpcodeDecl("addc", 0b0101011, 0b110, kAsmImmediate) - kAsmOpcodeDecl("decc", 0b0101011, 0b111, kAsmImmediate) - kAsmOpcodeDecl("int", 0b1110011, 0b00, kAsmSyscall) - kAsmOpcodeDecl("pha", 0b1110011, 0b00, kAsmNoArgs) - kAsmOpcodeDecl("pla", 0b1110011, 0b01, kAsmNoArgs)}; + kAsmOpcodeDecl("nop", 0b0000000, 0b0000000, kAsmNoArgs) // no-operation. + kAsmOpcodeDecl("np", 0b0000000, 0b0000000, kAsmNoArgs) // no-operation. + kAsmOpcodeDecl("jlr", 0b1110011, 0b0000111, + kAsmJump) // jump to linked return register + kAsmOpcodeDecl("jrl", 0b1110011, 0b0001111, + kAsmJump) // jump from return register. + kAsmOpcodeDecl("mv", 0b0100011, 0b101, kAsmRegToReg) + kAsmOpcodeDecl("bg", 0b1100111, 0b111, kAsmRegToReg) + kAsmOpcodeDecl("bl", 0b1100111, 0b011, kAsmRegToReg) + kAsmOpcodeDecl("beq", 0b1100111, 0b000, kAsmRegToReg) + kAsmOpcodeDecl("bne", 0b1100111, 0b001, kAsmRegToReg) + kAsmOpcodeDecl("bge", 0b1100111, 0b101, kAsmRegToReg) + kAsmOpcodeDecl("ble", 0b1100111, 0b100, kAsmRegToReg) + kAsmOpcodeDecl("stw", 0b0001111, 0b100, kAsmImmediate) + kAsmOpcodeDecl("ldw", 0b0001111, 0b100, kAsmImmediate) + kAsmOpcodeDecl("lda", 0b0001111, 0b101, kAsmImmediate) + kAsmOpcodeDecl("sta", 0b0001111, 0b001, kAsmImmediate) + // add/sub without carry flag + kAsmOpcodeDecl("add", 0b0101011, 0b100, kAsmImmediate) + kAsmOpcodeDecl("sub", 0b0101011, 0b101, kAsmImmediate) + // add/sub with carry flag + kAsmOpcodeDecl("addc", 0b0101011, 0b110, kAsmImmediate) + kAsmOpcodeDecl("subc", 0b0101011, 0b111, kAsmImmediate) + kAsmOpcodeDecl("sc", 0b1110011, 0b00, kAsmSyscall) +}; // \brief 64x0 register prefix // example: r32, r0 diff --git a/dev/ndkdll/Asm/CPU/ppc.hxx b/dev/ndkdll/Asm/CPU/power64.hxx index e3ea6c5..e3ea6c5 100644 --- a/dev/ndkdll/Asm/CPU/ppc.hxx +++ b/dev/ndkdll/Asm/CPU/power64.hxx diff --git a/dev/ndkdll/Sources/AssemblerPower.cxx b/dev/ndkdll/Sources/AssemblerPower.cxx index cbf6964..365089a 100644 --- a/dev/ndkdll/Sources/AssemblerPower.cxx +++ b/dev/ndkdll/Sources/AssemblerPower.cxx @@ -18,7 +18,7 @@ #define __ASM_NEED_PPC__ 1 #include <ndkdll/NFC/ErrorID.hxx> -#include <ndkdll/Asm/CPU/ppc.hxx> +#include <ndkdll/Asm/CPU/power64.hxx> #include <ndkdll/NFC/PEF.hxx> #include <ndkdll/Parser.hxx> #include <ndkdll/NFC/AE.hxx> diff --git a/dev/ndkdll/Sources/CCompilerPower64.cxx b/dev/ndkdll/Sources/CCompilerPower64.cxx index 753639c..5330ce6 100644 --- a/dev/ndkdll/Sources/CCompilerPower64.cxx +++ b/dev/ndkdll/Sources/CCompilerPower64.cxx @@ -7,7 +7,7 @@ * ======================================================== */ -#include <ndkdll/Asm/CPU/ppc.hxx> +#include <ndkdll/Asm/CPU/power64.hxx> #include <ndkdll/Parser.hxx> #include <ndkdll/UUID.hxx> #include <filesystem> |
