فهرست منبع

revert optimistaion of plus

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7046 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 سال پیش
والد
کامیت
c982c62f41
2فایلهای تغییر یافته به همراه7 افزوده شده و 4 حذف شده
  1. 3 3
      source/FoxAMDBackend.Mod
  2. 4 1
      source/FoxIntermediateBackend.Mod

+ 3 - 3
source/FoxAMDBackend.Mod

@@ -994,7 +994,7 @@ TYPE
 					TicketToOperand(ticket, tmp);
 					ticket := NIL;
 				END;
-				IF Assembler.IsRegisterOperand(physical) THEN
+				IF Assembler.IsRegisterOperand(physical) & (type.sizeInBits > 8) THEN
 					Assembler.InitMem(physical,SHORTINT(type.length * type.sizeInBits DIV 8) , physical.register, virtual.offset);
 					emitter.Emit2(InstructionSet.opLEA, tmp,physical);
 				ELSE
@@ -1495,8 +1495,9 @@ TYPE
 		VAR op1,op2: Assembler.Operand; tmp: IntermediateCode.Operand;
 			t: CodeGenerators.Ticket;
 			type: IntermediateCode.Type;
+			offset: LONGINT;
 		BEGIN
-			IF (vdest.mode = IntermediateCode.ModeRegister) & (vsrc.mode = IntermediateCode.ModeRegister) & (vsrc.offset # 0) THEN
+			IF (vdest.mode = IntermediateCode.ModeRegister) & (vsrc.mode = IntermediateCode.ModeRegister) & (vsrc.type.sizeInBits > 8) & (vsrc.offset # 0)THEN
 				(* MOV R1, R2+offset => LEA EAX, [EBX+offset] *)
 				tmp := vsrc;
 				IntermediateCode.MakeMemory(tmp,vsrc.type);
@@ -1511,7 +1512,6 @@ TYPE
 					UnSpill(t); (* make sure this has not spilled *)
 					MakeOperand(vdest,part, op1,NIL);
 				END;
-
 				emitter.Emit2(InstructionSet.opLEA,op1,op2);
 			ELSE
 				MakeOperand(vsrc,part,op2,NIL);

+ 4 - 1
source/FoxIntermediateBackend.Mod

@@ -3361,12 +3361,15 @@ TYPE
 					Emit(Add(position,result.tag,left.tag,right.tag))
 				ELSE
 					InitOperand(result,ModeValue);
-					IF SemanticChecker.IsIntegerType(leftType) THEN 
+					(*! IF SemanticChecker.IsIntegerType(leftType) THEN 
 						AddInt(result.op, left.op, right.op) ;
 					ELSE
+					*)
 						Reuse2a(result.op,left.op,right.op,dest);
 						Emit(Add(position,result.op,left.op,right.op));
+						(*
 					END;
+					*)
 				END;
 				ReleaseOperand(left); ReleaseOperand(right);
 			|Scanner.Minus: