~ubuntu-branches/ubuntu/lucid/erlang/lucid

« back to all changes in this revision

Viewing changes to lib/hipe/rtl/hipe_rtl_binary_match.erl

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-11-06 18:54:42 UTC
  • mfrom: (3.3.4 sid)
  • Revision ID: james.westby@ubuntu.com-20091106185442-bqxb11qghumvmvx2
Tags: 1:13.b.2.1-dfsg-1ubuntu1
* Merge with Debian testing; remaining Ubuntu changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to. (LP #438365)
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
197
197
gen_rtl({bs_test_tail, NumBits}, [NewMs], [Ms], TrueLblName, FalseLblName) ->
198
198
  {[Offset,BinSize], ExCode} = extract_matchstate_vars([offset,binsize], Ms),
199
199
    update_ms(NewMs, Ms) ++ ExCode ++
200
 
    [hipe_rtl:mk_alu(Offset, Offset, add, hipe_rtl:mk_imm(NumBits)),
 
200
    [add_to_offset(Offset, Offset, hipe_rtl:mk_imm(NumBits), FalseLblName),
201
201
     hipe_rtl:mk_branch(Offset, eq, BinSize, TrueLblName, FalseLblName)];
202
202
gen_rtl({bs_test_unit, Unit}, [], [Ms], TrueLblName, FalseLblName) ->
203
203
  {[Offset,BinSize], ExCode} = extract_matchstate_vars([offset,binsize], Ms),
208
208
gen_rtl({bs_test_tail, NumBits}, [], [Ms], TrueLblName, FalseLblName) ->
209
209
  {[Offset,BinSize], ExCode} = extract_matchstate_vars([offset,binsize], Ms),
210
210
    ExCode ++
211
 
    [hipe_rtl:mk_alu(Offset, Offset, add, hipe_rtl:mk_imm(NumBits)),
 
211
    [add_to_offset(Offset, Offset, hipe_rtl:mk_imm(NumBits), FalseLblName),
212
212
     hipe_rtl:mk_branch(Offset, eq, BinSize, TrueLblName, FalseLblName)];
213
213
gen_rtl({bs_skip_bits_all, Unit, _Flags}, Dst, [Ms], 
214
214
        TrueLblName, FalseLblName) ->
375
375
   create_loops(N-1, Unit, RestString, IntFun)].
376
376
 
377
377
update_and_test(Reg, Unit, Offset, Value, FalseLblName) ->
378
 
  [hipe_rtl:mk_alu(Offset, Offset, add, hipe_rtl:mk_imm(Unit*?BYTE_SIZE)),
 
378
  [add_to_offset(Offset, Offset, hipe_rtl:mk_imm(Unit*?BYTE_SIZE), FalseLblName),
379
379
   just_test(Reg, Value, FalseLblName)].
380
380
 
381
381
just_test(Reg, Value, FalseLblName) ->
631
631
 
632
632
skip_bits2(Ms, NoOfBits, TrueLblName, FalseLblName) ->
633
633
  [NewOffset] = create_gcsafe_regs(1),
634
 
  [SuccessLbl,TempLbl] = create_lbls(2),
 
634
  [TempLbl] = create_lbls(1),
635
635
  {[Offset,BinSize], ExCode} = extract_matchstate_vars([offset,binsize], Ms),
636
636
  ExCode ++
637
 
  [hipe_rtl:mk_alub(NewOffset, NoOfBits, add, Offset, overflow, 
638
 
                    FalseLblName, hipe_rtl:label_name(SuccessLbl),0.01),
639
 
   SuccessLbl,
640
 
   hipe_rtl:mk_branch(BinSize, lt, NewOffset, FalseLblName, 
641
 
                      hipe_rtl:label_name(TempLbl), 0.01),
642
 
   TempLbl,
643
 
   update_offset(NewOffset,Ms),
644
 
   hipe_rtl:mk_goto(TrueLblName)].
 
637
    add_to_offset(NewOffset, NoOfBits, Offset, FalseLblName) ++
 
638
    [hipe_rtl:mk_branch(BinSize, 'ltu', NewOffset, FalseLblName, 
 
639
                        hipe_rtl:label_name(TempLbl), 0.01),
 
640
     TempLbl,
 
641
     update_offset(NewOffset,Ms),
 
642
     hipe_rtl:mk_goto(TrueLblName)].
 
643
 
 
644
add_to_offset(Result, Extra, Original, _FalseLblName) ->
 
645
  %% TODO: MAke this unsigned overflow to FalseLblName
 
646
  [hipe_rtl:mk_alu(Result, Extra, add, Original)].
645
647
 
646
648
%%%%%%%%%%%%%%%%%%%%%%% Code for start match %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
647
649
 
707
709
  lists:unzip([extract_matchstate_var(Name, Ms) || Name <- List]).
708
710
 
709
711
check_size(Offset, Size, BinSize, Tmp1, ContLblName, FalseLblName) ->
710
 
  [hipe_rtl:mk_alu(Tmp1, Offset, add, Size),
 
712
  [add_to_offset(Tmp1, Offset, Size, FalseLblName),
711
713
   hipe_rtl:mk_branch(Tmp1, leu, BinSize, ContLblName, FalseLblName, 0.99)].
712
714
 
713
715
check_size(Offset, Size, _BinSize, Tmp1, true, ContLblName, _FalseLblName) ->
1006
1008
       hipe_rtl:mk_alu(Dst, Dst, 'or', Tmp1),
1007
1009
       hipe_rtl:mk_alu(Offset, Offset, add, hipe_rtl:mk_imm(1))]
1008
1010
  end; 
1009
 
load_bytes(Dst, Base, Offset, {Signedness, Endianess},4) ->
 
1011
load_bytes(Dst, Base, Offset, {Signedness, Endianess}, 4) ->
1010
1012
  case Endianess of
1011
1013
    big ->
1012
1014
      hipe_rtl_arch:load_big_4(Dst, Base, Offset, Signedness);