Mercurial > projects > ldc
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;