summaryrefslogtreecommitdiff
path: root/includes/compiler/Scheduler.h
blob: 1518e3ad60c2ab5ab995db4e746521bf5e0dbb4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef COMPILER_SCHEDULER_H
#define COMPILER_SCHEDULER_H

#include "compiler/common.h"

typedef int (*LatencyFunc)(PCode *instr);
typedef void (*InitializeFunc)(void);
typedef int (*CanIssueFunc)(PCode *instr);
typedef void (*IssueFunc)(PCode *instr);
typedef void (*AdvanceClockFunc)(void);
typedef int (*SerializesFunc)(PCode *instr);
typedef int (*UsesVPermuteUnitFunc)(PCode *instr);

#ifdef __MWERKS__
#pragma options align=mac68k
#endif
typedef struct MachineInfo {
    int x0;
    int x4;
    int x8;
    LatencyFunc latency;
    InitializeFunc initialize;
    CanIssueFunc can_issue;
    IssueFunc issue;
    AdvanceClockFunc advance_clock;
    SerializesFunc serializes;
    UsesVPermuteUnitFunc uses_vpermute_unit;
} MachineInfo;
#ifdef __MWERKS__
#pragma options align=reset
#endif

extern MachineInfo machine601;
extern MachineInfo machine603;
extern MachineInfo machine603e;
extern MachineInfo machine604;
extern MachineInfo machine7400;
extern MachineInfo machine7450;
extern MachineInfo machine750;
extern MachineInfo machine821;

extern int is_same_operand(PCodeArg *a, PCodeArg *b);
extern void scheduleinstructions(Boolean flag);
extern int is_dependent(PCode *a, PCode *b, char rclass);
extern int uses_vpermute_unit(PCode *instr);
extern int default_uses_vpermute_unit(PCode *instr);

#endif