~ubuntu-branches/ubuntu/lucid/fpc/lucid-proposed

« back to all changes in this revision

Viewing changes to fpcsrc/compiler/i386/n386set.pas

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-10-09 23:29:00 UTC
  • mfrom: (4.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20081009232900-553f61m37jkp6upv
Tags: 2.2.2-4
[ Torsten Werner ]
* Update ABI version in fpc-depends automatically.
* Remove empty directories from binary package fpc-source.

[ Mazen Neifer ]
* Removed leading path when calling update-alternatives to remove a Linitian
  error.
* Fixed clean target.
* Improved description of packages. (Closes: #498882)

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
        last : TConstExprInt;
83
83
        indexreg : tregister;
84
84
        href : treference;
 
85
        jtlist: tasmlist;
 
86
        sectype: TAsmSectiontype;
85
87
 
86
88
        procedure genitem(list:TAsmList;t : pcaselabel);
87
89
          var
100
102
          end;
101
103
 
102
104
      begin
 
105
        last:=min_;
103
106
        if not(jumptable_no_range) then
104
107
          begin
105
 
             { case expr less than min_ => goto elselabel }
106
 
             cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,opsize,jmp_lt,aint(min_),hregister,elselabel);
 
108
             { a <= x <= b <-> unsigned(x-a) <= (b-a) }
 
109
             cg.a_op_const_reg(current_asmdata.CurrAsmList,OP_SUB,opsize,aint(min_),hregister);
107
110
             { case expr greater than max_ => goto elselabel }
108
 
             cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,opsize,jmp_gt,aint(max_),hregister,elselabel);
 
111
             cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,opsize,OC_A,aint(max_)-aint(min_),hregister,elselabel);
 
112
             min_:=0;
109
113
          end;
110
114
        current_asmdata.getjumplabel(table);
111
115
        { make it a 32bit register }
118
122
        href.scalefactor:=4;
119
123
        emit_ref(A_JMP,S_NO,href);
120
124
        { generate jump table }
121
 
        new_section(current_procinfo.aktlocaldata,sec_data,current_procinfo.procdef.mangledname,sizeof(aint));
122
 
        current_procinfo.aktlocaldata.concat(Tai_label.Create(table));
123
 
        last:=min_;
124
 
        genitem(current_procinfo.aktlocaldata,hp);
 
125
        if (target_info.system = system_i386_darwin) then
 
126
          begin
 
127
            jtlist:=current_asmdata.asmlists[al_const];
 
128
            sectype:=sec_rodata;
 
129
          end
 
130
        else
 
131
          begin
 
132
            jtlist:=current_procinfo.aktlocaldata;
 
133
            sectype:=sec_data;
 
134
          end;
 
135
        new_section(jtlist,sectype,current_procinfo.procdef.mangledname,sizeof(aint));
 
136
        jtlist.concat(Tai_label.Create(table));
 
137
        genitem(jtlist,hp);
125
138
      end;
126
139
 
127
140
 
161
174
                  if first then
162
175
                    begin
163
176
                       { have we to ajust the first value ? }
164
 
                       if (t^._low>get_min_value(left.resultdef)) then
 
177
                       if (t^._low>get_min_value(left.resultdef)) or (get_min_value(left.resultdef)<>0) then
165
178
                         cg.a_op_const_reg(current_asmdata.CurrAsmList, OP_SUB, opsize, aint(t^._low), hregister);
166
179
                    end
167
180
                  else