changeset 1304:b995c146366e

Ignore short/long prefix of labels instead of ignoring the whole branch instruction!
author Christian Kamm <kamm incasoftware de>
date Wed, 06 May 2009 19:56:33 +0200
parents c250e03d8a5b
children 316e9ecfeb7d 85b80c4fe48a
files gen/asm-x86-32.h gen/asm-x86-64.h
diffstat 2 files changed, 8 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/gen/asm-x86-32.h	Wed May 06 18:54:20 2009 +0200
+++ b/gen/asm-x86-32.h	Wed May 06 19:56:33 2009 +0200
@@ -1419,12 +1419,6 @@
                 {
                     nextToken();
                 }
-		else if ( token->value == TOKint16 || token->value == TOKint32 )
-                {
-		    //throw away the 'short' in "jle short label;". Works for 'long' also.
-		    operands[0] = operands[1];
-                    return;
-                }
                 else if ( token->value != TOKeof )
                 {
                     ok = false;
@@ -2741,6 +2735,10 @@
             Expression * e;
             Identifier * ident = NULL;
 
+            // get rid of short/long prefixes for branches
+            if (opTakesLabel() && (token->value == TOKint16 || token->value == TOKint64))
+                nextToken();
+
             switch ( token->value )
             {
                 case TOKint32v:
@@ -2887,10 +2885,6 @@
                     ident = Id::__dollar;
                     goto do_dollar;
                     break;
-	        case TOKint16:
-	        case TOKint32:
-		    //This if for the 'short' in "jle short Label;"
-		    return Handled;
                 default:
                     if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath )
                         return Handled;
--- a/gen/asm-x86-64.h	Wed May 06 18:54:20 2009 +0200
+++ b/gen/asm-x86-64.h	Wed May 06 19:56:33 2009 +0200
@@ -1541,12 +1541,6 @@
                 {
                     nextToken();
                 }
-                else if ( token->value == TOKint16 || token->value == TOKint32 || token->value == TOKint64 )
-                {
-                    //throw away the 'short' in "jle short Label;". Works for long also.
-                    operands[0] = operands[1];
-                    return;
-                }
                 else if ( token->value != TOKeof )
                 {
                     ok = false;
@@ -2864,6 +2858,10 @@
             Expression * e;
             Identifier * ident = NULL;
 
+            // get rid of short/long prefixes for branches
+            if (opTakesLabel() && (token->value == TOKint16 || token->value == TOKint64))
+                nextToken();
+
             switch ( token->value )
             {
                 case TOKint32v:
@@ -3010,12 +3008,6 @@
                     ident = Id::__dollar;
                     goto do_dollar;
                     break;
-                case TOKint16:
-                case TOKint32:
-                case TOKint64:
-                    //This is for the 'short' in "jle short Label;"
-                    return Handled;
-                    break;
                 default:
                     if ( op == Op_FMath0 || op == Op_FdST0ST1 || op == Op_FMath )
                         return Handled;