[Mono-bugs] [Bug 63085][Nor] Changed - Bitwise shift might return an incorrect value.

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Tue, 17 Aug 2004 10:13:02 -0400 (EDT)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by vargaz@freemail.hu.

http://bugzilla.ximian.com/show_bug.cgi?id=63085

--- shadow/63085	2004-08-14 16:13:57.000000000 -0400
+++ shadow/63085.tmp.3098	2004-08-17 10:13:02.000000000 -0400
@@ -2,13 +2,13 @@
 Product: Mono: Runtime
 Version: unspecified
 OS: SUSE 9.1
 OS Details: 
 Status: NEW   
 Resolution: 
-Severity: 
+Severity: Unknown
 Priority: Normal
 Component: misc
 AssignedTo: mono-bugs@ximian.com                            
 ReportedBy: agallero@netscape.net               
 QAContact: mono-bugs@ximian.com
 TargetMilestone: ---
@@ -54,6 +54,49 @@
 windows and run it under .NET framework it works fine.
 
 ------- Additional Comments From agallero@netscape.net  2004-08-14 16:13 -------
 Created an attachment (id=9092)
 Test code.
 
+
+------- Additional Comments From vargaz@freemail.hu  2004-08-17 10:13 -------
+This is due to a bug in the long register allocation code:
+
+processing:	18 long_shr R8 <- R10 R12 clobbers: s
+	shortcut assignment of R12 to ECX
+	assigned dreg (long) %eax to dest R8
+	assigned hreg (long-high) %edx to dest R9
+	freeable %edx (R9) (born in 18)
+	freeable %eax (R8) (born in 18)
+	assigned sreg1 (long) %eax to sreg1 R10
+	assigned sreg1 (long-high) %edx to sreg1 R11
+
+...
+
+processing:	15 sub R14 <- R15 R16 clobbers: 1
+	assigned dreg %ecx to dest R14
+	freeable %ecx (R14) (born in 15)
+	assigned sreg1 %ecx to R15
+	start regmask to assign R16: 0x00000007 (R1 <- R1 R16)
+		excluding sreg1 %ecx
+		excluding dreg %ecx
+		available regmask: 0x00000005
+		selected register %eax has assignment 0
+	SPILLED LOAD (1 at 0xffffffe0(%ebp)) R0 (freed %eax)
+	assigned sreg2 %eax to R16
+
+processing:	11 loadi4_membase R10 <- %ebp
+	assigned dreg %eax to dest R10
+	freeable %eax (R10) (born in 11)
+
+Here, %eax is spilled at instruction 15, but no spilled store is 
+generated at instruction 11. Thats probably because the rs->isymbolic
+array entries are not set around line 1896 in mini-x86.c (and 
+possibly other places). More generally: the local reg allocation code
+is a mess, the handling of iassign and isymbolic probably needs to be
+put into a separate function so it is easier to keep them in sync.
+
+
+
+
+
+