aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2010-11-11 08:50:27 +0100
committerBjörn Gustavsson <[email protected]>2011-01-17 15:23:37 +0100
commit12d221c867d057379933d1434cd422302ad1e5ac (patch)
tree9bb6ec45c4a8978c84d72a5509108878efa79cc0 /erts/emulator
parent177cca2e0ad8752022c3322f537ee836598b342a (diff)
downloadotp-12d221c867d057379933d1434cd422302ad1e5ac.tar.gz
otp-12d221c867d057379933d1434cd422302ad1e5ac.tar.bz2
otp-12d221c867d057379933d1434cd422302ad1e5ac.zip
beam_makeops: Relax requirements for having specific instructions
Diffstat (limited to 'erts/emulator')
-rwxr-xr-xerts/emulator/utils/beam_makeops9
1 files changed, 8 insertions, 1 deletions
diff --git a/erts/emulator/utils/beam_makeops b/erts/emulator/utils/beam_makeops
index de19a2e35b..5c242ce9c4 100755
--- a/erts/emulator/utils/beam_makeops
+++ b/erts/emulator/utils/beam_makeops
@@ -80,6 +80,8 @@ my %cold_code;
my @unnumbered_generic;
my %unnumbered;
+my %is_transformed;
+
#
# Code transformations.
#
@@ -474,8 +476,9 @@ sub emulator_output {
$gen_transform_offset{$key} : -1;
my($spec_op) = $gen_to_spec{$key};
my($num_specific) = $num_specific{$key};
- defined $spec_op or $tr != -1 or
+ defined $spec_op or
$obsolete[$gen_opnum{$name,$arity}] or
+ $is_transformed{$name,$arity} or
error("instruction $key has no specific instruction");
$spec_op = -1 unless defined $spec_op;
&init_item($name, $arity, $spec_op, $num_specific, $tr, $min_window{$key});
@@ -1103,6 +1106,10 @@ sub compile_transform {
if ($obsolete[$gen_opnum{$name,$arity}]) {
error("obsolete function must not be used in transformations");
}
+
+ if ($src) {
+ $is_transformed{$name,$arity} = 1;
+ }
[$name,$arity,@ops];
}