Fix ass to match the EM spec.
authorGeorge Koehler <xkernigh@netscape.net>
Fri, 9 Dec 2016 22:32:42 +0000 (17:32 -0500)
committerGeorge Koehler <xkernigh@netscape.net>
Fri, 9 Dec 2016 22:32:42 +0000 (17:32 -0500)
The spec says, "ASS w: Adjust the stack pointer by w-byte integer".
The w argument "can either be given as argument or on top of the
stack."  Therefore, 'ass 4' would pop the 4-byte integer from the
stack, but 'ass' would pop the size w from the stack, then pop the
w-byte integer.

PowerPC ncg wrongly implemented 'ass' as if it was 'ass 4'.  Fix it to
accept only 'ass 4'.

mach/powerpc/ncg/table

index 9d12698..cf3de92 100644 (file)
@@ -2003,14 +2003,14 @@ PATTERNS
                        gen
                                move %1, SP
 
-       pat loc ass $1==4                  /* Drop 4 bytes from stack */
+       pat loc ass $1==4 && $2==4         /* Drop 4 bytes from stack */
                with exact GPR
                        /* nop */
                with STACK
                        gen
                                addi SP, SP, {CONST, 4}
 
-       pat ass                            /* Adjust stack by variable amount */
+       pat ass $1==4                      /* Adjust stack by variable amount */
                with CONST2 STACK
                        gen
                                move {SUM_RC, SP, %1.val}, SP
@@ -2028,7 +2028,7 @@ PATTERNS
        pat asp                            /* Adjust stack by constant amount */
                leaving
                        loc $1
-                       ass
+                       ass 4