~ubuntu-branches/ubuntu/dapper/fpc/dapper

« back to all changes in this revision

Viewing changes to compiler/powerpc/nppcld.pas

  • Committer: Bazaar Package Importer
  • Author(s): Carlos Laviola
  • Date: 2005-05-30 11:59:10 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050530115910-x5pbzm4qqta4i94h
Tags: 2.0.0-2
debian/fp-compiler.postinst.in: forgot to reapply the patch that
correctly creates the slave link to pc(1).  (Closes: #310907)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
{
2
 
    $Id: nppcld.pas,v 1.2 2004/03/05 22:17:11 jonas Exp $
 
2
    $Id: nppcld.pas,v 1.9 2005/02/14 17:13:10 peter Exp $
3
3
    Copyright (c) 1998-2002 by Florian Klaempfl
4
4
 
5
5
    Generate ppc assembler for nodes that handle loads and assignments
31
31
 
32
32
    type
33
33
      tppcloadnode = class(tcgloadnode)
 
34
        procedure pass_2; override;
34
35
        procedure generate_picvaraccess;override;
35
36
      end;
36
37
 
48
49
      nld;
49
50
 
50
51
 
 
52
    procedure tppcloadnode.pass_2;
 
53
      var
 
54
        l : tasmsymbol;
 
55
        ref : treference;
 
56
      begin
 
57
        case target_info.system of
 
58
          system_powerpc_darwin:
 
59
            begin
 
60
              if (symtableentry.typ = procsym) and
 
61
                 (tprocsym(symtableentry).owner.symtabletype in [staticsymtable,globalsymtable]) and
 
62
                 (
 
63
                  (not tprocsym(symtableentry).owner.iscurrentunit) or
 
64
                  (po_external in tprocsym(symtableentry).procdef[1].procoptions)
 
65
                 ) then
 
66
                begin
 
67
                  l:=objectlibrary.getasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr');
 
68
                  if not(assigned(l)) then
 
69
                    begin
 
70
                      l:=objectlibrary.newasmsymbol('L'+tprocsym(symtableentry).procdef[1].mangledname+'$non_lazy_ptr',AB_COMMON,AT_DATA);
 
71
                      picdata.concat(tai_symbol.create(l,0));
 
72
                      picdata.concat(tai_const.create_indirect_sym(objectlibrary.newasmsymbol(tprocsym(symtableentry).procdef[1].mangledname,AB_EXTERNAL,AT_DATA)));
 
73
                      picdata.concat(tai_const.create_32bit(0));
 
74
                    end;
 
75
                  reference_reset_symbol(ref,l,0);
 
76
                  reference_reset_base(location.reference,cg.getaddressregister(exprasmlist),0);
 
77
                  cg.a_load_ref_reg(exprasmlist,OS_ADDR,OS_ADDR,ref,location.reference.base);
 
78
                end
 
79
              else
 
80
                inherited pass_2;
 
81
            end;
 
82
          else
 
83
            inherited pass_2;
 
84
        end;
 
85
      end;
 
86
 
51
87
    procedure tppcloadnode.generate_picvaraccess;
52
88
      var
53
89
        l : tasmsymbol;
56
92
        case target_info.system of
57
93
          system_powerpc_darwin:
58
94
            begin
59
 
              if (tvarsym(symtableentry).owner.unitid<>0) or (vo_is_dll_var in tvarsym(symtableentry).varoptions) then
 
95
              if (vo_is_dll_var in tglobalvarsym(symtableentry).varoptions) or
 
96
                 ((tglobalvarsym(symtableentry).owner.symtabletype in [staticsymtable,globalsymtable]) and
 
97
                  not(tglobalvarsym(symtableentry).owner.iscurrentunit)) then
60
98
                begin
61
 
                  l:=objectlibrary.getasmsymbol('L'+tvarsym(symtableentry).mangledname+'$non_lazy_ptr');
 
99
                  l:=objectlibrary.getasmsymbol('L'+tglobalvarsym(symtableentry).mangledname+'$non_lazy_ptr');
62
100
                  if not(assigned(l)) then
63
101
                    begin
64
 
                      l:=objectlibrary.newasmsymbol('L'+tvarsym(symtableentry).mangledname+'$non_lazy_ptr',AB_COMMON,AT_DATA);
 
102
                      l:=objectlibrary.newasmsymbol('L'+tglobalvarsym(symtableentry).mangledname+'$non_lazy_ptr',AB_COMMON,AT_DATA);
65
103
                      picdata.concat(tai_symbol.create(l,0));
66
 
                      picdata.concat(tai_const_symbol.create_indirect(objectlibrary.newasmsymbol(tvarsym(symtableentry).mangledname,AB_EXTERNAL,AT_DATA)));
 
104
                      picdata.concat(tai_const.create_indirect_sym(objectlibrary.newasmsymbol(tglobalvarsym(symtableentry).mangledname,AB_EXTERNAL,AT_DATA)));
67
105
                      picdata.concat(tai_const.create_32bit(0));
68
106
                    end;
69
107
 
87
125
end.
88
126
{
89
127
  $Log: nppcld.pas,v $
90
 
  Revision 1.2  2004/03/05 22:17:11  jonas
91
 
    * fixed importing of variables from shared libraries, but disabled
92
 
      PIC support for now. You have to save/restore r31 when you us it! :)
93
 
      Also, it's not necessary to support the imported variables
94
 
 
95
 
  Revision 1.1  2004/03/02 17:32:12  florian
96
 
    * make cycle fixed
97
 
    + pic support for darwin
98
 
    + support of importing vars from shared libs on darwin implemented
 
128
  Revision 1.9  2005/02/14 17:13:10  peter
 
129
    * truncate log
 
130
 
 
131
  Revision 1.8  2005/01/24 18:13:46  jonas
 
132
    * fixed bug introduced in revision 1.6
 
133
 
 
134
  Revision 1.7  2005/01/20 17:47:01  peter
 
135
    * remove copy_value_on_stack and a_param_copy_ref
 
136
 
 
137
  Revision 1.6  2005/01/19 22:19:41  peter
 
138
    * unit mapping rewrite
 
139
    * new derefmap added
 
140
 
99
141
}