summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-06-13 15:37:11 +0900
committerYukihiro Matsumoto <[email protected]>2012-06-13 15:37:11 +0900
commit38941772333d5d9298b76dfc8a97c5b076daedc2 (patch)
treedc17d7945eb3467f75f781b98d15f82dbd86167d /src/codegen.c
parentb692b39d2e372b23dd458c0838ef375d01fdc61e (diff)
downloadmruby-38941772333d5d9298b76dfc8a97c5b076daedc2.tar.gz
mruby-38941772333d5d9298b76dfc8a97c5b076daedc2.zip
generate optimized OP_DIV instruction
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c
index e31e722eb..e76443a20 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -648,6 +648,9 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val)
else if (!noop && name[0] == '*' && strlen(name) == 1) {
genop(s, MKOP_ABC(OP_MUL, cursp(), idx, n));
}
+ else if (!noop && name[0] == '/' && strlen(name) == 1) {
+ genop(s, MKOP_ABC(OP_DIV, cursp(), idx, n));
+ }
else if (!noop && name[0] == '<' && strlen(name) == 1) {
genop(s, MKOP_ABC(OP_LT, cursp(), idx, n));
}
@@ -2163,6 +2166,11 @@ codedump(mrb_state *mrb, int n)
mrb_sym2name(mrb, irep->syms[GETARG_B(c)]),
GETARG_C(c));
break;
+ case OP_DIV:
+ printf("OP_DIV\tR%d\t'%s'\t%d\n", GETARG_A(c),
+ mrb_sym2name(mrb, irep->syms[GETARG_B(c)]),
+ GETARG_C(c));
+ break;
case OP_LT:
printf("OP_LT\tR%d\t'%s'\t%d\n", GETARG_A(c),
mrb_sym2name(mrb, irep->syms[GETARG_B(c)]),