diff options
author | Björn Gustavsson <[email protected]> | 2013-12-03 12:42:06 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2014-01-20 12:22:41 +0100 |
commit | af0c7c0274b843551aa5ac393646d6e59ed89fb2 (patch) | |
tree | 9b8bc7c367a2d6c120cce0447110c000f48c4af7 /lib/asn1 | |
parent | c8266f4dcbafe0afdf291cb562605e968f778f14 (diff) | |
download | otp-af0c7c0274b843551aa5ac393646d6e59ed89fb2.tar.gz otp-af0c7c0274b843551aa5ac393646d6e59ed89fb2.tar.bz2 otp-af0c7c0274b843551aa5ac393646d6e59ed89fb2.zip |
Improve optimization of alignment for encoding
Diffstat (limited to 'lib/asn1')
-rw-r--r-- | lib/asn1/src/asn1ct_imm.erl | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl index 7b352c7872..a7b2e8a23b 100644 --- a/lib/asn1/src/asn1ct_imm.erl +++ b/lib/asn1/src/asn1ct_imm.erl @@ -1143,8 +1143,15 @@ per_enc_length(Bin, Unit, Len, {Lb,Ub}, Aligned, Type) U = unit(Unit, Aligned, Type, Lb*Unit, Ub*Unit), PutBits = [{put_bits,Bin,binary,U}], build_length_cond(Prefix, [[Check|PutLen++PutBits]]); -per_enc_length(Bin, Unit, Len, Sv, Aligned, Type) when is_integer(Sv) -> - NumBits = Sv*Unit, +per_enc_length(Bin, Unit0, Len, Sv, Aligned, Type) when is_integer(Sv) -> + NumBits = Sv*Unit0, + Unit = case NumBits rem 8 of + 0 -> + %% Help out the alignment optimizer. + 8; + _ -> + Unit0 + end, U = unit(Unit, Aligned, Type, NumBits, NumBits), Pb = {put_bits,Bin,binary,U}, [{'cond',[[{eq,Len,Sv},Pb]]}]. @@ -2044,6 +2051,8 @@ enc_opt_al({put_bits,_,binary,[U]}=PutBits, Al) when U rem 8 =:= 0 -> {[PutBits],Al}; enc_opt_al({sub,_,_,_}=Imm, Al) -> {[Imm],Al}; +enc_opt_al({'try',_,_,_,_}=Imm, Al) -> + {[Imm],Al}; enc_opt_al(Imm, _) -> {[Imm],unknown}. |