aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/beam_emu.c
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2016-07-15 12:22:45 +0200
committerBjörn-Egil Dahlberg <[email protected]>2016-07-15 12:22:45 +0200
commit440445cfd0cbeee8f2bb86b99b6d16caf7a5c9c7 (patch)
tree5267a83e8315e93f65ccf991bc201d71cefbb10e /erts/emulator/beam/beam_emu.c
parentddfae156c2b21d5266bd6eb82bf9ca7c508226fd (diff)
parentb490fb8664ec6e5ceaadc1c74350dc666f5406d2 (diff)
downloadotp-440445cfd0cbeee8f2bb86b99b6d16caf7a5c9c7.tar.gz
otp-440445cfd0cbeee8f2bb86b99b6d16caf7a5c9c7.tar.bz2
otp-440445cfd0cbeee8f2bb86b99b6d16caf7a5c9c7.zip
Merge branch 'maint-19' into maint
Diffstat (limited to 'erts/emulator/beam/beam_emu.c')
-rw-r--r--erts/emulator/beam/beam_emu.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index 7419a62058..b90c4dedea 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -3026,6 +3026,7 @@ do { \
if (i == 0) {
StoreBifResult(4, Op1);
}
+ ires = big_size(Op1);
goto big_shift;
}
} else if (is_big(Op2)) {
@@ -3041,7 +3042,6 @@ do { \
OpCase(i_bsl_jIssd):
GetArg2(2, Op1, Op2);
-
do_bsl:
if (is_small(Op2)) {
i = signed_val(Op2);
@@ -3067,16 +3067,12 @@ do { \
StoreBifResult(4, Op1);
}
}
- Op1 = small_to_big(ires, tmp_big);
-#ifdef TAG_LITERAL_PTR
- Op1 |= TAG_LITERAL_PTR;
-#endif
+ ires = 1; /* big_size(small_to_big(Op1)) */
big_shift:
if (i > 0) { /* Left shift. */
- ires = big_size(Op1) + (i / D_EXP);
+ ires += (i / D_EXP);
} else { /* Right shift. */
- ires = big_size(Op1);
if (ires <= (-i / D_EXP))
ires = 3; /* ??? */
else
@@ -3095,6 +3091,9 @@ do { \
goto lb_Cl_error;
}
TestHeapPreserve(ires+1, Arg(1), Op1);
+ if (is_small(Op1)) {
+ Op1 = small_to_big(signed_val(Op1), tmp_big);
+ }
bigp = HTOP;
Op1 = big_lshift(Op1, i, bigp);
if (is_big(Op1)) {
@@ -3117,6 +3116,7 @@ do { \
if (i == 0) {
StoreBifResult(4, Op1);
}
+ ires = big_size(Op1);
goto big_shift;
}
} else if (is_big(Op2)) {