Skip to content

Commit 484ad46

Browse files
committed
VM: i2s 指令实现
1 parent 99f369b commit 484ad46

3 files changed

Lines changed: 16 additions & 0 deletions

File tree

include/openminecraft/vm/pixeltower/om_pixeltower_interpreter.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class OMInterpreter
5656
void operand_ldc_w(std::shared_ptr<OMFrameMetadata> frame);
5757
void operand_iadd(std::shared_ptr<OMFrameMetadata> frame);
5858
void operand_i2b(std::shared_ptr<OMFrameMetadata> frame);
59+
void operand_i2s(std::shared_ptr<OMFrameMetadata> frame);
5960

6061
void *newString(std::string data);
6162

src/boot/entrypoint.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ int boot(std::vector<std::string> args)
198198
pt->registerNativeFunc("vmstd/internal/SystemPrintStream", "println", "(J)V", cmdPrint);
199199
pt->registerNativeFunc("vmstd/internal/SystemPrintStream", "println", "(F)V", cmdPrint);
200200
pt->registerNativeFunc("vmstd/internal/SystemPrintStream", "println", "(D)V", cmdPrint);
201+
pt->registerNativeFunc("vmstd/internal/SystemPrintStream", "println", "(I)V", cmdPrint);
201202
pt->registerNativeFunc("vmstd/internal/SystemPrintStream", "println", "(Ljava/lang/String;)V",
202203
cmdPrint);
203204

src/vm/pixeltower/om_pixeltower_interpreter.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,11 @@ void OMInterpreter::execute(std::shared_ptr<OMClass> clazz, std::shared_ptr<OMMe
281281
break;
282282
}
283283

284+
case op_i2s: {
285+
operand_i2s(frame);
286+
break;
287+
}
288+
284289
case op_if_acmpne: {
285290
operand_if_acmpne(frame);
286291
break;
@@ -667,6 +672,15 @@ void OMInterpreter::operand_i2b(std::shared_ptr<OMFrameMetadata> frame)
667672
STACK_ACCESS.push((int)(char)std::any_cast<int>(i1));
668673
frame->offset++;
669674
}
675+
void OMInterpreter::operand_i2s(std::shared_ptr<OMFrameMetadata> frame)
676+
{
677+
STACK_CHECK;
678+
auto i1 = STACK_ACCESS.top();
679+
STACK_ACCESS.pop();
680+
checkType(frame, i1, "int");
681+
STACK_ACCESS.push((int)(short)std::any_cast<int>(i1));
682+
frame->offset++;
683+
}
670684
void OMInterpreter::operand_iadd(std::shared_ptr<OMFrameMetadata> frame)
671685
{
672686
STACK_CHECK;

0 commit comments

Comments
 (0)