source: proiecte/swift/trunk/include/swift_dfg.h @ 176

Last change on this file since 176 was 176, checked in by (none), 14 years ago
  • imported repo from "guagal"
File size: 2.4 KB
Line 
1/*
2 * swift_dfg.h
3 *
4 * (c) 2009 Ionut Rosoiu <ionut.rosoiu@gmail.com>
5 *
6 */
7
8#ifndef SWIFT_DFG_H_
9#define SWIFT_DFG_H_
10
11#include "swift_declarations.h"
12#include "swift_common.h"
13
14#define SWIFT_FRAME_END_PARALLEL 0x01  /*< by ending this frame the parallel region has finished */
15
16#define SWIFT_FRAME_SET_END_PARALLEL(frame) \
17        ((frame)->flags |= SWIFT_FRAME_END_PARALLEL)
18
19#define SWIFT_FRAME_IS_END_PARALLEL(frame) \
20        ((frame)->flags & SWIFT_FRAME_END_PARALLEL)
21
22#define SWIFT_FRAME_ID_MASK             0x0000FFFF
23#define SWIFT_FRAME_ID_OFFSET   0
24#define SWIFT_FRAME_NAME_MASK   0x00FF0000
25#define SWIFT_FRAME_NAME_OFFSET 16
26#define SWIFT_PROC_MASK                 0xFF000000
27#define SWIFT_PROC_OFFSET               24
28
29#define SWIFT_FRAME_ID(v)                  ((v) & SWIFT_FRAME_ID_MASK) >> SWIFT_FRAME_ID_OFFSET
30#define SWIFT_FRAME_NAME(v)     (char)(((v) & SWIFT_FRAME_NAME_MASK) >> SWIFT_FRAME_NAME_OFFSET)
31#define SWIFT_PROC(v)                      ((v) & SWIFT_PROC_MASK) >> SWIFT_PROC_OFFSET
32
33#if LOGGING_ON
34#define SWIFT_WRITE_FRAME_INFO(frame, proc, name, id)                                                   \
35        frame->info = ((proc << SWIFT_PROC_OFFSET) & SWIFT_PROC_MASK) |                         \
36                                  ((name << SWIFT_FRAME_NAME_OFFSET) & SWIFT_FRAME_NAME_MASK) | \
37                                  ((id << SWIFT_FRAME_ID_OFFSET) & SWIFT_FRAME_ID_MASK)
38#else
39#define SWIFT_WRITE_FRAME_INFO(frame, proc, name, id)
40#endif
41
42/**
43 * The closure for this frame
44 */
45typedef void (*swift_closure_handler)(swift_thread_t *thread, struct swift_frame* frame);
46
47/**
48 * The handler to be executed when the frame is finished
49 */
50typedef void (*swift_frame_finished_handler)(swift_thread_t *thread, struct swift_frame* frame);
51
52struct swift_frame {
53        volatile int flags;                                             /*< frame flags */
54
55#ifdef LOGGING_ON
56        volatile int info;                                              /*< TODO: frame info (temporary, for debug) */
57        int dbg;
58        swift_id_t creator_id;                                  /*< the id of the initial creator for the frame */
59#endif
60
61        swift_closure_handler closure;                  /*< the closure for this frame */
62
63        volatile int dependencies_no;                   /*< the number of unavailable variables */
64        struct swift_frame *dependencies_frame; /*< the frame that awaits the unavailable data */
65
66        // closure-dependent data
67        void *private_data;                                             /*< private data related to each specific closure
68                                                                                                this gets deallocated when the frame is retired
69                                                                                            */
70
71        swift_size_t *sync_frames_remaining;    /*< the number to decrement when finishing execution of this frame */
72
73        // doubly-linked list
74        struct swift_frame *prev;
75        struct swift_frame *next;
76};
77
78
79#endif /* SWIFT_DFG_H_ */
Note: See TracBrowser for help on using the repository browser.