瀏覽代碼

Patched issue with 64-bit immediates when encoded as negative signed 32-bit value

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6581 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 年之前
父節點
當前提交
6d09af9f98
共有 1 個文件被更改,包括 2 次插入0 次删除
  1. 2 0
      source/FoxAMDBackend.Mod

+ 2 - 0
source/FoxAMDBackend.Mod

@@ -843,6 +843,8 @@ TYPE
 
 				IF virtual.symbol.name # "" THEN size := SHORT(type.sizeInBits DIV 8);
 				ELSIF forbidden16Bit & IsImm16(value) & ~(IsImm8(value)) THEN size := Assembler.bits32;
+				ELSIF (type.sizeInBits = 64) & (type.form = IntermediateCode.UnsignedInteger) & (value > MAX(LONGINT)) THEN 
+					size := 8; (* don't use negative signed 32-bit value  to encode 64-bit unsigned value! *)	
 				ELSE size := 0
 				END;
 				Assembler.InitImm(physical,size ,value);