[interp] Use +=, *= etc. Seems to generate identical code though. (mono/mono#16848)
authorJay Krell <jaykrell@microsoft.com>
Tue, 17 Sep 2019 10:23:19 +0000 (03:23 -0700)
committerVlad Brezae <brezaevlad@gmail.com>
Tue, 17 Sep 2019 10:23:19 +0000 (13:23 +0300)
i.e. a = a op b is *not* double evaluating a.

Commit migrated from https://github.com/mono/mono/commit/fb71d475437ffab6fbfb97962f375af5571c775f

src/mono/mono/mini/interp/interp.c

index aabb03f..97c02a9 100644 (file)
@@ -4157,7 +4157,7 @@ common_vcall:
                        MINT_IN_BREAK;
 #define BINOP(datamem, op) \
        --sp; \
-       sp [-1].data.datamem = sp [-1].data.datamem op sp [0].data.datamem; \
+       sp [-1].data.datamem op ## = sp [0].data.datamem; \
        ++ip;
                MINT_IN_CASE(MINT_ADD_I4)
                        BINOP(i, +);
@@ -4303,7 +4303,7 @@ common_vcall:
 
 #define SHIFTOP(datamem, op) \
        --sp; \
-       sp [-1].data.datamem = sp [-1].data.datamem op sp [0].data.i; \
+       sp [-1].data.datamem op ## = sp [0].data.i; \
        ++ip;
 
                MINT_IN_CASE(MINT_SHL_I4)