Skip to content

Commit 0ab39c7

Browse files
committed
VM: newarray 指令实现
1 parent 7c5744e commit 0ab39c7

4 files changed

Lines changed: 361 additions & 348 deletions

File tree

docs/vm-instructions.md

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
Instruction | impl status
2+
----- | -----
3+
nop | v0
4+
aconst_null | v0
5+
iconst_n | v0
6+
lconst_n | v0
7+
fconst_n | v0
8+
dconst_n | v0
9+
bipush | v0
10+
sipush | X
11+
ldc | v0
12+
ldc_w | v0
13+
ldc2_w | v0
14+
iload | X
15+
lload | X
16+
fload | X
17+
dload | X
18+
aload | v0
19+
iload_n | v0
20+
lload_n | X
21+
fload_n | X
22+
dload_n | X
23+
aload_n | v0
24+
iaload | X
25+
laload | X
26+
faload | X
27+
daload | X
28+
aaload | X
29+
baload | X
30+
caload | X
31+
saload | X
32+
istore | X
33+
lstore | X
34+
fstore | X
35+
dstore | X
36+
astore | v0
37+
istore_n | v0
38+
lstore_n | X
39+
fstore_n | X
40+
dstore_n | X
41+
astore_n | v0
42+
iastore | X
43+
lastore | X
44+
fastore | X
45+
dastore | X
46+
aastore | X
47+
bastore | X
48+
castore | X
49+
sastore | X
50+
pop | v0
51+
pop2 | X
52+
dup | v0
53+
dup_x1 | X
54+
dup_x2 | X
55+
dup2 | X
56+
dup2_x1 | X
57+
dup2_x2 | X
58+
swap | X
59+
iadd | v0
60+
ladd | X
61+
fadd | X
62+
dadd | X
63+
isub | X
64+
lsub | X
65+
fsub | X
66+
dsub | X
67+
imul | X
68+
lmul | X
69+
fmul | X
70+
dmul | X
71+
idiv | X
72+
ldiv | X
73+
fdiv | X
74+
ddiv | X
75+
irem | X
76+
lrem | X
77+
frem | X
78+
drem | X
79+
ineg | X
80+
lneg | X
81+
fneg | X
82+
dneg | X
83+
ishl | X
84+
lshl | X
85+
ishr | X
86+
lshr | X
87+
iushr | X
88+
lushr | X
89+
iand | X
90+
land | X
91+
ior | X
92+
lor | X
93+
iinc | v0
94+
i2l | X
95+
i2f | X
96+
i2d | X
97+
l2i | X
98+
l2f | X
99+
l2d | X
100+
f2i | X
101+
f2l | X
102+
d2i | X
103+
f2d | X
104+
d2l | X
105+
d2f | X
106+
i2b | v0
107+
i2c | X
108+
i2s | v0
109+
lcmp | X
110+
fcmpl | X
111+
fcmpg | X
112+
dcmpl | X
113+
dcmpg | X
114+
ifeq | X
115+
ifne | v0
116+
iflt | X
117+
ifge | X
118+
ifgt | X
119+
ifle | X
120+
if_icmpeq | X
121+
if_icmpne | v0
122+
if_icmplt | X
123+
if_icmpge | X
124+
if_icmpgt | X
125+
if_icmple | X
126+
if_acmpeq | X
127+
if_acmpne | X
128+
goto | X
129+
jsr | X
130+
ret | X
131+
tableswitch | X
132+
lookupswitch | X
133+
ireturn | v0
134+
lreturn | X
135+
freturn | X
136+
dreturn | X
137+
areturn | X
138+
return | v0
139+
getstatic | v0
140+
putstatic | v0
141+
getfield | v0
142+
putfield | v0
143+
invokevirtual | v0
144+
invokespecial | v0
145+
invokestatic | v0
146+
invokeinterface | v0
147+
invokedynamic | X
148+
new | v0
149+
newarray | X
150+
anewarray | X
151+
arraylength | X
152+
athrow | X
153+
checkcast | X
154+
instanceof | X
155+
monitorenter | X
156+
monitorexit | X
157+
wide | X
158+
multianewarray | X
159+
ifnull | X
160+
ifnonnull | X
161+
goto_w | X
162+
jsr_w | X

include/openminecraft/vm/pixeltower/om_pixeltower_interpreter.hpp

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
#define OM_PIXELTOWER_INTERPRETER_HPP
33

44
#include "openminecraft/log/om_log_common.hpp"
5-
#include "openminecraft/util/om_util_result.hpp"
6-
#include "openminecraft/vm/err/om_validation_error.hpp"
75
#include "openminecraft/vm/pixeltower/om_pixeltower.hpp"
86
#include "openminecraft/vm/pixeltower/om_pixeltower_array_structdef.hpp"
97
#include "openminecraft/vm/pixeltower/om_pixeltower_frame_structdef.hpp"
@@ -28,39 +26,10 @@ class OMInterpreter
2826

2927
std::unordered_map<std::thread::id, std::stack<std::any>> stack;
3028

31-
void operand_invokeany(std::shared_ptr<OMFrameMetadata> frame);
32-
void operand_dup(std::shared_ptr<OMFrameMetadata> frame);
33-
void operand_return(std::shared_ptr<OMFrameMetadata> frame);
34-
void operand_ireturn(std::shared_ptr<OMFrameMetadata> frame);
35-
void operand_new(std::shared_ptr<OMFrameMetadata> frame);
36-
void operand_aload_n(std::shared_ptr<OMFrameMetadata> frame);
37-
void operand_if_acmpne(std::shared_ptr<OMFrameMetadata> frame);
38-
void operand_iconst_n(std::shared_ptr<OMFrameMetadata> frame);
39-
void operand_lconst_n(std::shared_ptr<OMFrameMetadata> frame);
40-
void operand_fconst_n(std::shared_ptr<OMFrameMetadata> frame);
41-
void operand_dconst_n(std::shared_ptr<OMFrameMetadata> frame);
42-
void operand_nop(std::shared_ptr<OMFrameMetadata> frame);
43-
void operand_aconst_null(std::shared_ptr<OMFrameMetadata> frame);
44-
void operand_pop(std::shared_ptr<OMFrameMetadata> frame);
45-
void operand_astore_n(std::shared_ptr<OMFrameMetadata> frame);
46-
void operand_istore_n(std::shared_ptr<OMFrameMetadata> frame);
47-
void operand_invokeinterface(std::shared_ptr<OMFrameMetadata> frame);
4829
void operand_putstatic(std::shared_ptr<OMFrameMetadata> frame);
4930
void operand_putfield(std::shared_ptr<OMFrameMetadata> frame);
5031
void operand_getstatic(std::shared_ptr<OMFrameMetadata> frame);
5132
void operand_getfield(std::shared_ptr<OMFrameMetadata> frame);
52-
void operand_iload_n(std::shared_ptr<OMFrameMetadata> frame);
53-
void operand_bipush(std::shared_ptr<OMFrameMetadata> frame);
54-
void operand_invokevirtual(std::shared_ptr<OMFrameMetadata> frame);
55-
void operand_ldc(std::shared_ptr<OMFrameMetadata> frame);
56-
void operand_ldc_w(std::shared_ptr<OMFrameMetadata> frame);
57-
void operand_iadd(std::shared_ptr<OMFrameMetadata> frame);
58-
void operand_i2b(std::shared_ptr<OMFrameMetadata> frame);
59-
void operand_i2s(std::shared_ptr<OMFrameMetadata> frame);
60-
void operand_iinc(std::shared_ptr<OMFrameMetadata> frame);
61-
void operand_ifne(std::shared_ptr<OMFrameMetadata> frame);
62-
void operand_astore(std::shared_ptr<OMFrameMetadata> frame);
63-
void operand_aload(std::shared_ptr<OMFrameMetadata> frame);
6433

6534
void *newString(std::string data);
6635

src/vm/classfile/om_class_file.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include <memory>
88
#include <openminecraft/binary/om_bin_endians.hpp>
99
#include <openminecraft/vm/classfile/om_class_file.hpp>
10-
#include <stdexcept>
1110

1211
using namespace openminecraft::binary;
1312
using namespace openminecraft::binary::hash;
@@ -22,7 +21,6 @@ OMClassFileParser::OMClassFileParser(std::shared_ptr<std::istream> str) : io::OM
2221

2322
OMClassFileParser::~OMClassFileParser()
2423
{
25-
// this->logger->info("Destroying class file parser");
2624
io::OMParser::~OMParser();
2725
}
2826

0 commit comments

Comments
 (0)