# HG changeset patch # User Christian Kamm # Date 1241632593 -7200 # Node ID b995c146366ee6cc88991b710e51a7abfee92a3e # Parent c250e03d8a5bd5aff0caaa70d19b5de6170df287 Ignore short/long prefix of labels instead of ignoring the whole branch instruction! diff -r c250e03d8a5b -r b995c146366e gen/asm-x86-32.h --- 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; diff -r c250e03d8a5b -r b995c146366e gen/asm-x86-64.h --- 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;