* src/vm/jit/powerpc/linux/md-abi.c (md_param_alloc): Cleaned up
[cacao.git] / src / vm / jit / schedule / schedule.h
index 048030f487592a70ae70ca7cc069589f99041b46..9ae07e0f59f093a392b3726b1ffac1e6668ff638 100644 (file)
@@ -1,10 +1,10 @@
 /* src/vm/jit/schedule/schedule.h - architecture independent instruction
                                     scheduler
 
-   Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
-   R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
-   C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
-   Institut f. Computersprachen - TU Wien
+   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
+   E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
+   J. Wenninger, Institut f. Computersprachen - TU Wien
 
    This file is part of CACAO.
 
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA.
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.
 
-   Contact: cacao@complang.tuwien.ac.at
+   Contact: cacao@cacaojvm.org
 
    Authors: Christian Thalinger
 
    Changes:
 
-   $Id: schedule.h 2025 2005-03-10 12:20:49Z twisti $
+   $Id: schedule.h 4357 2006-01-22 23:33:38Z twisti $
 
 */
 
 
 typedef struct scheduledata scheduledata;
 typedef struct minstruction minstruction;
-typedef struct nodelink nodelink;
+typedef struct edgenode edgenode;
 typedef struct opcycles opcycles;
 
 
 /* machine instruction flags **************************************************/
 
-#define SCHEDULE_LEADER    0x01
-#define SCHEDULE_SINK      0x02
-#define SCHEDULE_BRANCH    0x04
+#define SCHEDULE_LEADER         0x01
+#define SCHEDULE_SINK           0x02
+
+#define SCHEDULE_UNIT_ALU       0x04
+#define SCHEDULE_UNIT_MEM       0x08
+#define SCHEDULE_UNIT_BRANCH    0x10
 
 
 #define M_SCHEDULE_SET_EXCEPTION_POINT    /*  if (cd->exceptiontablelength > 0) { schedule_do_schedule(sd); schedule_reset(sd, rd); } */
@@ -73,15 +76,15 @@ struct opcycles {
 struct scheduledata {
        minstruction  *mi;                  /* machine instruction array          */
        s4             micount;             /* number of machine instructions     */
-       nodelink      *leaders;             /* list containing leader nodes       */
+       edgenode      *leaders;             /* list containing leader nodes       */
 
-       nodelink     **intregs_define_dep;
-       nodelink     **fltregs_define_dep;
-    nodelink      *memory_define_dep;
+       edgenode     **intregs_define_dep;
+       edgenode     **fltregs_define_dep;
+    edgenode     **memory_define_dep;
 
-       nodelink     **intregs_use_dep;
-       nodelink     **fltregs_use_dep;
-       nodelink      *memory_use_dep;
+       edgenode     **intregs_use_dep;
+       edgenode     **fltregs_use_dep;
+       edgenode     **memory_use_dep;
 
        FILE *file;
 };
@@ -103,39 +106,40 @@ struct minstruction {
 #endif
        opcycles       op[4];
        s4             priority;            /* priority of this instruction node  */
-       nodelink      *deps;                /* operand dependencies               */
+       s4             starttime;
+       edgenode      *deps;                /* operand dependencies               */
        minstruction  *next;                /* link to next machine instruction   */
 };
 
 
-/* nodelink ********************************************************************
+/* edgenode ********************************************************************
 
    XXX
 
 *******************************************************************************/
 
 /* TODO rename to edgenode */
-struct nodelink {
-       s4        minode;                   /* pointer to machine instruction     */
+struct edgenode {
+       s4        minum;                    /* machine instruction number         */
        s1        opnum;                    /* dependency operand number          */
        s1        opnum2;
        s1        latency;
-       nodelink *next;                     /* link to next node                  */
+       edgenode *next;                     /* link to next node                  */
 };
 
 
 /* function prototypes ********************************************************/
 
-scheduledata *schedule_init(registerdata *rd);
+scheduledata *schedule_init(methodinfo *m, registerdata *rd);
 void schedule_reset(scheduledata *sd, registerdata *rd);
 void schedule_close(scheduledata *sd);
 
 void schedule_calc_priority(minstruction *mi);
 
-/*  void schedule_add_define_dep(scheduledata *sd, s1 operand, s4 *define_dep, nodelink **use_dep); */
-/*  void schedule_add_use_dep(scheduledata *sd, s1 operand, s4 *define_dep, nodelink **use_dep); */
-void schedule_add_define_dep(scheduledata *sd, s1 opnum, nodelink **define_dep, nodelink **use_dep);
-void schedule_add_use_dep(scheduledata *sd, s1 opnum, nodelink **define_dep, nodelink **use_dep);
+/*  void schedule_add_define_dep(scheduledata *sd, s1 operand, s4 *define_dep, edgenode **use_dep); */
+/*  void schedule_add_use_dep(scheduledata *sd, s1 operand, s4 *define_dep, edgenode **use_dep); */
+void schedule_add_define_dep(scheduledata *sd, s1 opnum, edgenode **define_dep, edgenode **use_dep);
+void schedule_add_use_dep(scheduledata *sd, s1 opnum, edgenode **define_dep, edgenode **use_dep);
 
 void schedule_do_schedule(scheduledata *sd);