~ubuntu-branches/debian/squeeze/erlang/squeeze

« back to all changes in this revision

Viewing changes to lib/hipe/arm/hipe_arm_ra_ls.erl

  • Committer: Bazaar Package Importer
  • Author(s): Erlang Packagers, Sergei Golovan
  • Date: 2006-12-03 17:07:44 UTC
  • mfrom: (2.1.11 feisty)
  • Revision ID: james.westby@ubuntu.com-20061203170744-rghjwupacqlzs6kv
Tags: 1:11.b.2-4
[ Sergei Golovan ]
Fixed erlang-base and erlang-base-hipe prerm scripts.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
%%% -*- erlang-indent-level: 2 -*-
 
2
%%% $Id$
 
3
%%% Linear Scan register allocator for ARM
 
4
 
 
5
-module(hipe_arm_ra_ls).
 
6
-export([ra/3]).
 
7
 
 
8
ra(Defun, SpillIndex, Options) ->
 
9
  NewDefun = Defun, %% hipe_${ARCH}_ra_rename:rename(Defun,Options),
 
10
  CFG = hipe_arm_cfg:init(NewDefun),
 
11
  SpillLimit = hipe_arm_specific:number_of_temporaries(CFG),
 
12
  alloc(NewDefun, SpillIndex, SpillLimit, Options).
 
13
 
 
14
alloc(Defun, SpillIndex, SpillLimit, Options) ->
 
15
  CFG = hipe_arm_cfg:init(Defun),
 
16
  {Coloring, _NewSpillIndex} =
 
17
    regalloc(
 
18
      CFG,
 
19
      hipe_arm_registers:allocatable_gpr()--
 
20
      [hipe_arm_registers:temp3(),
 
21
       hipe_arm_registers:temp2(),
 
22
       hipe_arm_registers:temp1()],
 
23
      [hipe_arm_cfg:start_label(CFG)],
 
24
      SpillIndex, SpillLimit, Options,
 
25
      hipe_arm_specific),
 
26
  {NewDefun, _DidSpill} =
 
27
    hipe_arm_ra_postconditions:check_and_rewrite(
 
28
      Defun, Coloring, 'linearscan'),
 
29
  TempMap = hipe_temp_map:cols2tuple(Coloring, hipe_arm_specific),
 
30
  {TempMap2,_NewSpillIndex2} =
 
31
    hipe_spillmin:stackalloc(CFG, [], SpillIndex, Options,
 
32
                             hipe_arm_specific, TempMap),
 
33
  Coloring2 =
 
34
    hipe_spillmin:mapmerge(hipe_temp_map:to_substlist(TempMap), TempMap2),
 
35
  {NewDefun, Coloring2}.
 
36
 
 
37
regalloc(CFG, PhysRegs, Entrypoints, SpillIndex, DontSpill, Options, Target) ->
 
38
  hipe_ls_regalloc:regalloc(
 
39
    CFG, PhysRegs, Entrypoints, SpillIndex, DontSpill, Options, Target).