@@ -2894,10 +2894,10 @@ do_get_tail(
28942894 MSt1 = cond_raise_badarg ({BSOffsetReg , '&' , 2#111 , '!=' , 0 }, MMod , MSt0 ),
28952895 {MSt2 , BSOffseBytesReg } = MMod :copy_to_native_register (MSt1 , BSOffsetReg ),
28962896 MSt3 = MMod :shift_right (MSt2 , BSOffseBytesReg , 3 ),
2897- {MSt4 , TailBytesReg } = MMod :get_array_element (MSt3 , BSBinaryReg , 1 ),
2898- MSt5 = MMod :sub (MSt4 , TailBytesReg , BSOffseBytesReg ),
2897+ {MSt4 , TailBytesReg0 } = MMod :get_array_element (MSt3 , BSBinaryReg , 1 ),
2898+ MSt5 = MMod :sub (MSt4 , TailBytesReg0 , BSOffseBytesReg ),
28992899 {MSt6 , HeapSizeReg } = MMod :call_primitive (MSt5 , ? PRIM_TERM_SUB_BINARY_HEAP_SIZE , [
2900- BSBinaryReg , TailBytesReg
2900+ BSBinaryReg , { free , TailBytesReg0 }
29012901 ]),
29022902 {MSt7 , NewMatchState } = memory_ensure_free_with_extra_root (
29032903 MatchState , Live , {free , HeapSizeReg }, MMod , MSt6
@@ -2907,13 +2907,17 @@ do_get_tail(
29072907 MSt9 = MMod :and_ (MSt8 , MatchStateReg0 , ? TERM_PRIMARY_CLEAR_MASK ),
29082908 MSt10 = MMod :move_array_element (MSt9 , MatchStateReg0 , 1 , BSBinaryReg ),
29092909 MSt11 = MMod :free_native_registers (MSt10 , [MatchStateReg0 ]),
2910- {MSt12 , ResultTerm } = MMod :call_primitive (MSt11 , ? PRIM_TERM_MAYBE_CREATE_SUB_BINARY , [
2911- ctx , BSBinaryReg , {free , BSOffseBytesReg }, TailBytesReg
2912- ]),
2913- MSt13 = MMod :shift_left (MSt12 , TailBytesReg , 3 ),
2914- MSt14 = MMod :add (MSt13 , BSOffsetReg , TailBytesReg ),
2915- MSt15 = MMod :free_native_registers (MSt14 , [TailBytesReg ]),
2916- {MSt15 , ResultTerm , NewMatchState }.
2910+ MSt12 = MMod :and_ (MSt11 , BSBinaryReg , ? TERM_PRIMARY_CLEAR_MASK ),
2911+ {MSt13 , TailBytesReg1 } = MMod :get_array_element (MSt12 , BSBinaryReg , 1 ),
2912+ MSt14 = MMod :sub (MSt13 , TailBytesReg0 , BSOffseBytesReg ),
2913+ MSt15 = MMod :add (MSt14 , BSBinaryReg , ? TERM_PRIMARY_BOXED ),
2914+ {MSt16 , ResultTerm } = MMod :call_primitive (MSt15 , ? PRIM_TERM_MAYBE_CREATE_SUB_BINARY , [
2915+ ctx , BSBinaryReg , {free , BSOffseBytesReg }, TailBytesReg1
2916+ ]),
2917+ MSt17 = MMod :shift_left (MSt16 , TailBytesReg1 , 3 ),
2918+ MSt18 = MMod :add (MSt17 , BSOffsetReg , TailBytesReg1 ),
2919+ MSt19 = MMod :free_native_registers (MSt18 , [TailBytesReg1 ]),
2920+ {MSt19 , ResultTerm , NewMatchState }.
29172921
29182922first_pass_bs_match_equal_colon_equal (
29192923 Fail , MatchState , BSBinaryReg , BSOffsetReg , J0 , Rest0 , MMod , MSt0
0 commit comments