-
Notifications
You must be signed in to change notification settings - Fork 36
/
op.js
60 lines (48 loc) · 1.98 KB
/
op.js
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
49
50
51
52
53
54
55
56
57
58
59
60
// JSDoc のタイプチェックに型を認識させるため
let Stage = require("./stage").Stage; // eslint-disable-line
let Lane = require("./stage").Lane; // eslint-disable-line
class Op{
constructor(){
// ファイル内での ID
// Konata 内の識別はこの ID によって行う
this.id = -1;
this.gid = -1; // シミュレータ上のグローバル ID
this.rid = -1; // シミュレータ上のリタイア ID
this.tid = -1; // シミュレータ上のスレッド ID
this.retired = false; // リタイアしてるかどうか
this.flush = false; // Flushであるかどうか
this.eof = false; // ファイル終端による終了
/** @type {Object<string, Lane>} */
this.lanes = {}; // レーン情報の連想配列
this.fetchedCycle = -1;
this.retiredCycle = -1;
this.line = 0; // 行番号
this.labelName = ""; // 逆アセンブルのペーンに出すコメント
this.labelDetail = ""; // パイプラインのペーンに出すコメント
//this.labelStage = {}; // ステージごとのラベル
/** @type {Stage} */
this.lastParsedStage = null;
this.lastParsedCycle = -1;
/** @type {Array<Dependency>} prods - プロデューサ命令のIDの配列 */
this.prods = [];
/** @type {Array<Dependency>} cons - コンシューマ命令のIDの配列 */
this.cons = [];
// 依存関係の描画に使用
this.prodCycle = -1; // 実行ステージの開始
this.consCycle = -1; // 実行ステージの修了
}
}
class Dependency{
/**
* @param {number} opID
* @param {number} type
* @param {number} cycle
* */
constructor(opID, type, cycle) {
this.opID = opID;
this.type = type;
this.cycle = cycle;
}
}
module.exports.Op = Op;
module.exports.Dependency = Dependency;