mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 11:18:18 +02:00

specific descendent classes and moved the code that deals with this in the code generator also to target-specific classes -> only ifdefs left in pdecvar git-svn-id: trunk@27379 -
70 lines
2.1 KiB
ObjectPascal
70 lines
2.1 KiB
ObjectPascal
{
|
|
Copyright (c) 1998-2002 by Florian Klaempfl
|
|
|
|
Generate i386/i8086 assembler for memory related nodes
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
****************************************************************************
|
|
}
|
|
unit ni86mem;
|
|
|
|
{$i fpcdefs.inc}
|
|
|
|
interface
|
|
uses
|
|
globtype,
|
|
cgbase,cpuinfo,cpubase,
|
|
node,nmem,ncgmem,nx86mem;
|
|
|
|
type
|
|
ti86addrnode = class(tcgaddrnode)
|
|
protected
|
|
procedure set_absvarsym_resultdef; virtual; abstract;
|
|
function typecheck_non_proc(realsource: tnode; out res: tnode): boolean; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
cutils,verbose,
|
|
aasmtai,aasmdata,
|
|
cgutils,cgobj,
|
|
nld,
|
|
symconst,symdef,symcpu;
|
|
|
|
{*****************************************************************************
|
|
TI86ADDRNODE
|
|
*****************************************************************************}
|
|
|
|
function ti86addrnode.typecheck_non_proc(realsource: tnode; out res: tnode): boolean;
|
|
begin
|
|
res:=nil;
|
|
{ if we are getting the address of an absolute sym, check whether it's
|
|
a near or a far pointer }
|
|
if (realsource.nodetype=loadn) and
|
|
((tloadnode(realsource).symtableentry.typ=absolutevarsym) and
|
|
tcpuabsolutevarsym(tloadnode(realsource).symtableentry).absseg) then
|
|
begin
|
|
set_absvarsym_resultdef;
|
|
result:=true;
|
|
end
|
|
else
|
|
result:=inherited;
|
|
end;
|
|
|
|
|
|
end.
|