aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2011-08-08 09:42:26 +0200
committerBjörn Gustavsson <[email protected]>2011-10-11 11:36:36 +0200
commite87760199eb9d3c02480e92a0bcf76864c750972 (patch)
tree8bac71ff949c5cf5a6be41ffc12004d3ecb9297d /erts/emulator
parent3f8f70e8594ee956dba7edb3602dc9e26e144a69 (diff)
downloadotp-e87760199eb9d3c02480e92a0bcf76864c750972.tar.gz
otp-e87760199eb9d3c02480e92a0bcf76864c750972.tar.bz2
otp-e87760199eb9d3c02480e92a0bcf76864c750972.zip
Combine 'store_var' with 'next_arg'
'store_var' is always followed by 'next_arg'.
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/beam/beam_load.c3
-rwxr-xr-xerts/emulator/utils/beam_makeops4
2 files changed, 4 insertions, 3 deletions
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index e858305e9c..7d2b4dea28 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -4516,11 +4516,12 @@ transform_engine(LoaderState* st)
i = *pc++;
instr->a[ap].val = i;
break;
- case TOP_store_var:
+ case TOP_store_var_next_arg:
i = *pc++;
ASSERT(i < TE_MAX_VARS);
instr->a[ap].type = var[i].type;
instr->a[ap].val = var[i].val;
+ ap++;
break;
case TOP_try_me_else:
restart = pc + 1;
diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index 5e86356e10..9c7e5e94a5 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -1613,14 +1613,14 @@ sub tr_gen_to {
if ($var ne '') {
&error($where, "variable '$var' unbound")
unless defined $var{$var};
- push(@code, &make_op($var, 'store_var', $var{$var}));
+ push(@code, &make_op($var, 'store_var_next_arg', $var{$var}));
} elsif ($type ne '') {
push(@code, &make_op('', 'store_type', "TAG_$type"));
if ($type_val) {
push(@code, &make_op('', 'store_val', $type_val));
}
+ push(@code, make_op('', 'next_arg'));
}
- push(@code, &make_op('', 'next_arg'));
}
pop(@code) if is_instr($code[$#code], 'next_arg');
}