From b0f890f35540f076fecf7944dc9cc5c798fd975e Mon Sep 17 00:00:00 2001 From: WalterW Date: Wed, 22 Apr 2015 18:46:10 -0400 Subject: [PATCH] Don't sign extend 32 bit unsigned constants in iasm. --- src/iasm.c | 7 ++++++- test/runnable/iasm64.d | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/iasm.c b/src/iasm.c index ba65d6b249c3..0c2633a5f9c1 100644 --- a/src/iasm.c +++ b/src/iasm.c @@ -4422,12 +4422,17 @@ static OPND *asm_primary_exp() break; case TOKint32v: - case TOKuns32v: o1 = new OPND(); o1->disp = (d_int32)asmtok->int64value; asm_token(); break; + case TOKuns32v: + o1 = new OPND(); + o1->disp = (d_uns32)asmtok->uns64value; + asm_token(); + break; + case TOKint64v: case TOKuns64v: o1 = new OPND(); diff --git a/test/runnable/iasm64.d b/test/runnable/iasm64.d index fe2f0b698cdb..679c2614dfc6 100644 --- a/test/runnable/iasm64.d +++ b/test/runnable/iasm64.d @@ -6561,6 +6561,19 @@ L1: pop RAX; /****************************************************/ +void testconst() +{ + ulong result; + asm + { + mov RAX, 0xFFFF_FFFFu; + mov result, RAX; + } + assert (result == 0xFFFF_FFFFu); +} + +/****************************************************/ + void test9965() { ubyte* p; @@ -6721,6 +6734,7 @@ int main() test9965(); test12849(); test12968(); + testconst(); printf("Success\n"); return 0;