Răsfoiți Sursa

adjusted parameter order
WINAPI calling convention: push parameters right to left and use leftmost parameters in registers

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7452 8c9fc860-2736-0410-a75d-ab315db34111

felixf 7 ani în urmă
părinte
comite
2377da2446
1 a modificat fișierele cu 3 adăugiri și 2 ștergeri
  1. 3 2
      source/FoxIntermediateBackend.Mod

+ 3 - 2
source/FoxIntermediateBackend.Mod

@@ -742,7 +742,8 @@ TYPE
 						ELSE registerParameters := LEN(registerParameter) 
 						END;
 						
-						formalParameter := procedureType.lastParameter;
+						(* assumption: registers are passed left to right and left parameters are in registers *)
+						formalParameter := procedureType.firstParameter;
 						WHILE (formalParameter # NIL) & (registerNumber < registerParameters) DO
 							IF ~PassInRegister(formalParameter) THEN
 								Error(formalParameter.position,"Calling convention error: cannot be passed as register");
@@ -759,7 +760,7 @@ TYPE
 								ir.Emit(Mov(Basic.invalidPosition,dest, src));
 								implementationVisitor.ReleaseIntermediateOperand(src);
 								INC(registerNumber);
-								formalParameter := formalParameter.prevParameter;
+								formalParameter := formalParameter.nextParameter;
 							END;
 						END;
 					END;