blob: e06b39c981308ea6146fb327fb9c30d0aa7d87d0 (
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
49
50
51
|
#ifndef QV4ISEL_P_H
#define QV4ISEL_P_H
#include "qv4ir_p.h"
#include "qmljs_objects.h"
#include <QtCore/QHash>
namespace QQmlJS {
namespace x86_64 {
class InstructionSelection: protected IR::StmtVisitor
{
public:
InstructionSelection(IR::Module *module, uchar *code);
~InstructionSelection();
void operator()(IR::Function *function);
protected:
VM::String *identifier(const QString &s);
int tempOffset(IR::Temp *t);
void loadTempAddress(int reg, IR::Temp *t);
void callActivationProperty(IR::Call *call, IR::Temp *result);
void callProperty(IR::Call *call, IR::Temp *result);
void constructActivationProperty(IR::New *call, IR::Temp *result);
virtual void visitExp(IR::Exp *);
virtual void visitEnter(IR::Enter *);
virtual void visitLeave(IR::Leave *);
virtual void visitMove(IR::Move *);
virtual void visitJump(IR::Jump *);
virtual void visitCJump(IR::CJump *);
virtual void visitRet(IR::Ret *);
private:
IR::Module *_module;
IR::Function *_function;
IR::BasicBlock *_block;
uchar *_buffer;
uchar *_code;
uchar *_codePtr;
QHash<IR::BasicBlock *, QVector<uchar *> > _patches;
QHash<IR::BasicBlock *, uchar *> _addrs;
QHash<QString, VM::String *> _identifiers;
};
} // end of namespace x86_64
} // end of namespace QQmlJS
#endif // QV4ISEL_P_H
|