Răsfoiți Sursa

just incase some one wolud help me debugging that\!

mazen 23 ani în urmă
părinte
comite
34df2e8e09
1 a modificat fișierele cu 48 adăugiri și 46 ștergeri
  1. 48 46
      compiler/sparc/cpupara.pas

+ 48 - 46
compiler/sparc/cpupara.pas

@@ -245,61 +245,63 @@ WriteLn('***********************************************');
 									 end;
 								 else
 									 internalerror(2002071002);
-							end;
-							hp:=tparaitem(hp.previous);
-					 end;
-			end;
-
-		function tSparcparamanager.getfuncretparaloc(p : tabstractprocdef) : tparalocation;
-			begin
-				 case p.rettype.def.deftype of
-						orddef,
-						enumdef:
-							begin
-								getfuncretparaloc.loc:=LOC_REGISTER;
-								getfuncretparaloc.register:=R_O0;
-								getfuncretparaloc.size:=def_cgsize(p.rettype.def);
-								if getfuncretparaloc.size in [OS_S64,OS_64] then
-									getfuncretparaloc.registerhigh:=R_O1;
-							end;
-						floatdef:
-							begin
-								getfuncretparaloc.loc:=LOC_FPUREGISTER;
-								getfuncretparaloc.register:=R_F1;
-								getfuncretparaloc.size:=def_cgsize(p.rettype.def);
-							end;
+				end;
+			hp:=TParaItem(hp.previous);
+		end;
+	end;
+function tSparcParaManager.GetFuncRetParaLoc(p:TAbstractProcDef):TParaLocation;
+	begin
+		case p.rettype.def.deftype of
+			orddef,enumdef:
+				begin
+					WriteLn('Allocating i0 as return register');
+					GetFuncRetParaLoc.loc:=LOC_REGISTER;
+					GetFuncRetParaLoc.register:=R_i0;
+					GetFuncRetParaLoc.size:=def_cgsize(p.rettype.def);
+					if GetFuncRetParaLoc.size in [OS_S64,OS_64]
+					then
+						GetFuncRetParaLoc.RegisterHigh:=R_O1;
+				end;
+			floatdef:
+				begin
+					GetFuncRetParaLoc.loc:=LOC_FPUREGISTER;
+					GetFuncRetParaLoc.register:=R_F1;
+					GetFuncRetParaLoc.size:=def_cgsize(p.rettype.def);
+				end;
 						{ smallsets are OS_INT in R3, others are OS_ADDR in R3 -> the same }
 						{ ugly, I know :) (JM)                                             }
-						setdef,
-						variantdef,
-						pointerdef,
-						formaldef,
-						classrefdef,
-						recorddef,
-						objectdef,
-						stringdef,
-						procvardef,
-						filedef,
-						arraydef,
-						errordef:
-							begin
-								getfuncretparaloc.loc:=LOC_REGISTER;
-								getfuncretparaloc.register:=R_O0;
-								getfuncretparaloc.size:=OS_ADDR;
-							end;
-						else
-							internalerror(2002090903);
+			setdef,
+			variantdef,
+			pointerdef,
+			formaldef,
+			classrefdef,
+			recorddef,
+			objectdef,
+			stringdef,
+			procvardef,
+			filedef,
+			arraydef,
+			errordef:
+				begin
+					GetFuncRetParaLoc.loc:=LOC_REGISTER;
+					GetFuncRetParaLoc.register:=R_O0;
+					GetFuncRetParaLoc.size:=OS_ADDR;
 				end;
-			end;
-
+			else
+				internalerror(2002090903);
+		end;
+	end;
 begin
 	 ParaManager:=TSparcParaManager.create;
 end.
 {
 	$Log$
-	Revision 1.4  2002-10-08 21:02:22  mazen
-	* debugging register allocation
+	Revision 1.5  2002-10-09 13:52:19  mazen
+	just incase some one wolud help me debugging that\!
 
+	Revision 1.4  2002/10/08 21:02:22  mazen
+	* debugging register allocation
+	
 	Revision 1.3  2002/10/07 20:33:05  mazen
 	word alignement modified in g_stack_frame