mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 13:31:40 +01:00 
			
		
		
		
	 71deda6f50
			
		
	
	
		71deda6f50
		
	
	
	
	
		
			
			implementation (without loc_©mmregister support)
  * moved ncgutil.gen_load_return_value() to hlcgobj, and factored out
    architecture-specific behaviour to load an uninitialised function result
    into a virtual method (+ JVM-specific implementation of that method),
    gen_load_uninitialized_function_result()
  + added hlcgx86 unit and thlcgx86 type to override the
    thlcgobj.gen_load_uninitialized_function_result() method for x87
    function results; the i386 and x86_64 units now instantiate thlcgx86
    instead of thlcg2ll
  * moved calling of ncgutil.gen_load_loc_cgpara() from ncgcal also to hlcgobj
  -> returning function results works for JVM
git-svn-id: branches/jvmbackend@18317 -
		
	
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| {
 | |
|     Copyright (c) 1998-2010 by Florian Klaempfl and Jonas Maebe
 | |
|     Member of the Free Pascal development team
 | |
| 
 | |
|     This unit contains routines to create a pass-through high-level code
 | |
|     generator. This is used by most regular code generators.
 | |
| 
 | |
|     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 hlcgx86;
 | |
| 
 | |
| interface
 | |
| 
 | |
| {$i fpcdefs.inc}
 | |
| 
 | |
|   uses
 | |
|     aasmdata,
 | |
|     symtype,symdef,
 | |
|     parabase,
 | |
|     hlcgobj, hlcg2ll;
 | |
| 
 | |
|   type
 | |
| 
 | |
|     { thlcgx86 }
 | |
| 
 | |
|     thlcgx86 = class(thlcg2ll)
 | |
|      protected
 | |
|       procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara); override;
 | |
|     end;
 | |
| 
 | |
| implementation
 | |
| 
 | |
|   uses
 | |
|     cgbase,
 | |
|     cpubase,aasmcpu;
 | |
| 
 | |
| { thlcgx86 }
 | |
| 
 | |
|   procedure thlcgx86.gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara);
 | |
|     begin
 | |
|       { the caller will pop a value from the fpu stack }
 | |
|       if assigned(resloc.location) and
 | |
|          (resloc.location^.loc=LOC_FPUREGISTER) then
 | |
|         list.concat(taicpu.op_none(A_FLDZ));
 | |
|     end;
 | |
| 
 | |
| end.
 |