mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
vm: add OP_ADDILV/OP_SUBILV for local variable increment
fuse MOVE+ADDI+MOVE and MOVE+SUBI+MOVE patterns into single instructions. ADDILV/SUBILV add/subtract an immediate to a local variable in-place. BBB format: a=local, b=working space for method call, c=immediate. saves 5 bytes per instance (9->4 bytes), 40 occurrences in stdlib. Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -444,6 +444,14 @@ codedump(mrb_state *mrb, const mrb_irep *irep, FILE *out)
|
||||
fprintf(out, "SUBI\t\tR%d\t%d", a, b);
|
||||
print_lv_a(mrb, irep, a, out);
|
||||
break;
|
||||
CASE(OP_ADDILV, BBB):
|
||||
fprintf(out, "ADDILV\tR%d\tR%d\t%d", a, b, c);
|
||||
print_lv_a(mrb, irep, a, out);
|
||||
break;
|
||||
CASE(OP_SUBILV, BBB):
|
||||
fprintf(out, "SUBILV\tR%d\tR%d\t%d", a, b, c);
|
||||
print_lv_a(mrb, irep, a, out);
|
||||
break;
|
||||
CASE(OP_MUL, B):
|
||||
fprintf(out, "MUL\t\tR%d\t(R%d)\n", a, a+1);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user