-------------------------------------------------------------------------------------
--
-- HAC - HAC Ada Compiler
--
-- A compiler in Ada for an Ada subset
--
-- Copyright, license, etc. : see top package.
--
-------------------------------------------------------------------------------------
--
-- This target is AMD64, Windows, using the Flat Assembler (FASM).
-- https://flatassembler.net/
with Ada.Containers.Vectors;
with HAT;
package HAC_Sys.Targets.AMD64_Windows_Console_FASM is
type Machine is limited new Targets.Machine with private;
--------------------
-- Informations --
--------------------
overriding function Name (m : Machine) return String is ("Windows 64 Console via FASM");
overriding function CPU (m : Machine) return String is ("AMD64");
overriding function OS (m : Machine) return String is ("Windows");
overriding function Null_Terminated_String_Literals (m : Machine) return Boolean is (True);
-------------------------------------------
-- Initialize & Finalize Code Emission --
-------------------------------------------
overriding procedure Initialize_Code_Emission (m : in out Machine);
overriding procedure Finalize_Code_Emission
(m : in out Machine;
strings : String);
----------------------------
-- Machine Instructions --
----------------------------
overriding procedure Emit_Arithmetic_Binary_Instruction
(m : in out Machine;
operator : Defs.Arithmetic_Binary_Operator;
base_typ : Defs.Numeric_Typ);
overriding procedure Emit_Halt (m : in out Machine);
overriding procedure Emit_Push_Discrete_Literal
(m : in out Machine; x : Defs.HAC_Integer);
overriding procedure Emit_Push_Discrete_Literals
(m : in out Machine; x, y : Defs.HAC_Integer);
----------------------------
-- Built-In Subprograms --
----------------------------
overriding procedure Emit_HAT_Builtin_Procedure
(m : in out Machine;
builtin_proc : Defs.SP_Code;
parameter : Defs.HAC_Integer);
-------------
-- Misc. --
-------------
overriding function Assembler_File_Name (m : Machine) return String;
private
type Instruction is
(add,
ccall,
idiv,
imul,
mov,
pop,
push,
push_immediate,
stdcall,
sub,
xor_i);
type Assembler_Line is record
label : HAT.VString := HAT.Null_VString;
instr : Instruction;
operand_1 : HAT.VString := HAT.Null_VString;
operand_2 : HAT.VString := HAT.Null_VString;
end record;
package Assembler_Buffers is new Ada.Containers.Vectors (Positive, Assembler_Line);
type Machine is limited new Targets.Machine with record
asm_file : HAT.File_Type;
asm_buf : Assembler_Buffers.Vector;
end record;
end HAC_Sys.Targets.AMD64_Windows_Console_FASM;