aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/ops.tab
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2019-02-27 07:49:25 +0100
committerBjörn Gustavsson <[email protected]>2019-03-01 14:06:13 +0100
commitfa578a4025c1cbf46c3885ba7fe44fe6301b66c0 (patch)
tree4b8324fad0f193d2baa751b56b5684969b547ff2 /erts/emulator/beam/ops.tab
parenta29c834dd3cef789fb6d4a45092c20680eafd29d (diff)
downloadotp-fa578a4025c1cbf46c3885ba7fe44fe6301b66c0.tar.gz
otp-fa578a4025c1cbf46c3885ba7fe44fe6301b66c0.tar.bz2
otp-fa578a4025c1cbf46c3885ba7fe44fe6301b66c0.zip
Combine more init instructions
Diffstat (limited to 'erts/emulator/beam/ops.tab')
-rw-r--r--erts/emulator/beam/ops.tab14
1 files changed, 12 insertions, 2 deletions
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index e0a947a512..a935c3f84a 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -118,11 +118,21 @@ test_heap I t?
allocate_heap S u==0 R => allocate S R
allocate_heap_zero S u==0 R => allocate_zero S R
-init2 y y
-init3 y y y
+init Y1 | init Y2 | init Y3 | succ(Y1,Y2) | succ(Y2,Y3) => init_seq3 Y1
+init_seq3 Y1 | init Y4 | succ3(Y1,Y4) => init_seq4 Y1
+init_seq4 Y1 | init Y5 | succ4(Y1,Y5) => init_seq5 Y1
+
+init_seq3 y
+init_seq4 y
+init_seq5 y
+
init Y1 | init Y2 | init Y3 => init3 Y1 Y2 Y3
init Y1 | init Y2 => init2 Y1 Y2
+init2 y y
+init3 y y y
+
+
# Selecting values
select_val S=aiq Fail=f Size=u Rest=* => const_select_val(S, Fail, Size, Rest)