mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 09:32:00 +01:00 
			
		
		
		
	* regvar fixes from Peter
This commit is contained in:
		
							parent
							
								
									0cf348b3df
								
							
						
					
					
						commit
						2b030488b2
					
				| @ -267,6 +267,10 @@ implementation | |||||||
|                    { reference in nested procedures, variable needs to be in memory } |                    { reference in nested procedures, variable needs to be in memory } | ||||||
|                    make_not_regable(self); |                    make_not_regable(self); | ||||||
|                  end; |                  end; | ||||||
|  |                { static variables referenced in procedures, variable needs to be in memory } | ||||||
|  |                if (symtable.symtabletype=staticsymtable) and | ||||||
|  |                   (symtable.symtablelevel<>current_procinfo.procdef.parast.symtablelevel) then | ||||||
|  |                  make_not_regable(self); | ||||||
|                { fix self type which is declared as voidpointer in the |                { fix self type which is declared as voidpointer in the | ||||||
|                  definition } |                  definition } | ||||||
|                if vo_is_self in tvarsym(symtableentry).varoptions then |                if vo_is_self in tvarsym(symtableentry).varoptions then | ||||||
| @ -1141,7 +1145,10 @@ begin | |||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.129  2004-09-26 17:45:30  peter |   Revision 1.130  2004-10-06 19:26:50  jonas | ||||||
|  |     * regvar fixes from Peter | ||||||
|  | 
 | ||||||
|  |   Revision 1.129  2004/09/26 17:45:30  peter | ||||||
|     * simple regvar support, not yet finished |     * simple regvar support, not yet finished | ||||||
| 
 | 
 | ||||||
|   Revision 1.128  2004/06/20 08:55:29  florian |   Revision 1.128  2004/06/20 08:55:29  florian | ||||||
|  | |||||||
| @ -1375,17 +1375,12 @@ implementation | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     procedure tvarsym.ppuwrite(ppufile:tcompilerppufile); |     procedure tvarsym.ppuwrite(ppufile:tcompilerppufile); | ||||||
|       var |  | ||||||
|         hvo : tvaroptions; |  | ||||||
|       begin |       begin | ||||||
|          inherited writesym(ppufile); |          inherited writesym(ppufile); | ||||||
|          ppufile.putbyte(byte(varspez)); |          ppufile.putbyte(byte(varspez)); | ||||||
|          ppufile.putlongint(fieldoffset); |          ppufile.putlongint(fieldoffset); | ||||||
|          ppufile.puttype(vartype); |          ppufile.puttype(vartype); | ||||||
|          { symbols which are load are never candidates for a register, |          ppufile.putsmallset(varoptions); | ||||||
|            turn off the regable } |  | ||||||
|          hvo:=varoptions-[vo_regable,vo_fpuregable]; |  | ||||||
|          ppufile.putsmallset(hvo); |  | ||||||
|          if [vo_is_C_var,vo_is_dll_var]*varoptions<>[] then |          if [vo_is_C_var,vo_is_dll_var]*varoptions<>[] then | ||||||
|            ppufile.putstring(_mangledname^); |            ppufile.putstring(_mangledname^); | ||||||
|          ppufile.writeentry(ibvarsym); |          ppufile.writeentry(ibvarsym); | ||||||
| @ -2216,7 +2211,10 @@ implementation | |||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.178  2004-10-01 15:22:22  peter |   Revision 1.179  2004-10-06 19:26:50  jonas | ||||||
|  |     * regvar fixes from Peter | ||||||
|  | 
 | ||||||
|  |   Revision 1.178  2004/10/01 15:22:22  peter | ||||||
|     * don't add stabs for register variables |     * don't add stabs for register variables | ||||||
| 
 | 
 | ||||||
|   Revision 1.177  2004/09/26 17:45:30  peter |   Revision 1.177  2004/09/26 17:45:30  peter | ||||||
|  | |||||||
| @ -1632,13 +1632,17 @@ unit cgx86; | |||||||
|       var |       var | ||||||
|         href : treference; |         href : treference; | ||||||
|         r : integer; |         r : integer; | ||||||
|  |         hreg : tregister; | ||||||
|       begin |       begin | ||||||
|         { Copy registers from temp } |         { Copy registers from temp } | ||||||
|         href:=current_procinfo.save_regs_ref; |         href:=current_procinfo.save_regs_ref; | ||||||
|         for r:=low(saved_standard_registers) to high(saved_standard_registers) do |         for r:=low(saved_standard_registers) to high(saved_standard_registers) do | ||||||
|           if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then |           if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then | ||||||
|             begin |             begin | ||||||
|               a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE)); |               hreg:=newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE); | ||||||
|  |               { Allocate register so the optimizer does remove the load } | ||||||
|  |               a_reg_alloc(list,hreg); | ||||||
|  |               a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg); | ||||||
|               inc(href.offset,sizeof(aint)); |               inc(href.offset,sizeof(aint)); | ||||||
|             end; |             end; | ||||||
|         tg.UnGetTemp(list,current_procinfo.save_regs_ref); |         tg.UnGetTemp(list,current_procinfo.save_regs_ref); | ||||||
| @ -1675,7 +1679,10 @@ unit cgx86; | |||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.128  2004-10-05 20:41:02  peter |   Revision 1.129  2004-10-06 19:27:35  jonas | ||||||
|  |     * regvar fixes from Peter | ||||||
|  | 
 | ||||||
|  |   Revision 1.128  2004/10/05 20:41:02  peter | ||||||
|     * more spilling rewrites |     * more spilling rewrites | ||||||
| 
 | 
 | ||||||
|   Revision 1.127  2004/10/04 20:46:22  peter |   Revision 1.127  2004/10/04 20:46:22  peter | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe