summaryrefslogtreecommitdiff
path: root/src/z80/ralloc.h
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /src/z80/ralloc.h
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'src/z80/ralloc.h')
-rw-r--r--src/z80/ralloc.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/z80/ralloc.h b/src/z80/ralloc.h
new file mode 100644
index 0000000..88e97d4
--- /dev/null
+++ b/src/z80/ralloc.h
@@ -0,0 +1,94 @@
+/*-------------------------------------------------------------------------
+
+ SDCCralloc.h - header file register allocation
+
+ Written By - Sandeep Dutta . sandeep.dutta@usa.net (1998)
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 2, or (at your option) any
+ later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding!
+-------------------------------------------------------------------------*/
+#include "SDCCicode.h"
+#include "SDCCBBlock.h"
+#ifndef SDCCRALLOC_H
+#define SDCCRALLOC_H 1
+
+#define DEBUG_FAKE_EXTRA_REGS 0
+
+#define USE_OLDSALLOC 0 // Change to 1 to use old stack allocator
+
+enum
+{
+ A_IDX = 0,
+ C_IDX,
+ B_IDX,
+ E_IDX,
+ D_IDX,
+ L_IDX,
+ H_IDX,
+ IYL_IDX,
+ IYH_IDX,
+#if DEBUG_FAKE_EXTRA_REGS
+ M_IDX,
+ N_IDX,
+ O_IDX,
+ P_IDX,
+ Q_IDX,
+ R_IDX,
+ S_IDX,
+ T_IDX,
+#endif
+ CND_IDX,
+
+ // These pairs are for internal use in code generation only.
+ IY_IDX,
+ BC_IDX,
+ DE_IDX,
+ HL_IDX
+};
+
+enum
+{
+ REG_PTR = 1,
+ REG_GPR = 2,
+ REG_CND = 4,
+ REG_PAIR = 8
+};
+
+/* definition for the registers */
+typedef struct reg_info
+{
+ short type; /* can have value
+ REG_GPR, REG_PTR or REG_CND */
+ short rIdx; /* index into register table */
+ char *name; /* name */
+ unsigned isFree:1; /* is currently unassigned */
+} reg_info;
+
+extern reg_info *regsZ80;
+
+void assignRegisters (eBBlock **, int);
+reg_info *regWithIdx (int);
+
+void z80_assignRegisters (ebbIndex *);
+bitVect *z80_rUmaskForOp (const operand * op);
+
+void z80SpillThis (symbol *);
+iCode *z80_ralloc2_cc(ebbIndex *ebbi);
+
+void Z80RegFix (eBBlock ** ebbs, int count);
+#endif