changeset 1096:25d3aaf9e058

Fix FS:4 miswrite due to earlier changes for a constant displacement
author Kelly Wilson <wilsonk cpsc.ucalgary.ca>
date Wed, 11 Mar 2009 09:16:41 -0600
parents d6bd818212de
children 4450834402e2
files gen/asm-x86-64.h
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/gen/asm-x86-64.h	Wed Mar 11 14:17:13 2009 +0100
+++ b/gen/asm-x86-64.h	Wed Mar 11 09:16:41 2009 -0600
@@ -2181,9 +2181,11 @@
 
                         if ( operand->segmentPrefix != Reg_Invalid || operand->constDisplacement )
                         {
-                            insnTemplate->printf ( "%d", operand->constDisplacement );
                             if ( operand->symbolDisplacement.dim )
+                            {
+                                insnTemplate->printf ( "%d", operand->constDisplacement );
                                 insnTemplate->writebyte ( '+' );
+                            }
                             //addOperand(fmt, Arg_Integer, newIntExp(operand->constDisplacement), asmcode);
                             if ( opInfo->operands[i] & Opr_Dest )
                                 asmcode->clobbersMemory = 1;
@@ -2308,6 +2310,12 @@
                         }
                         if ( use_star )
                             insnTemplate->writebyte ( '*' );
+                        if ( operand->segmentPrefix != Reg_Invalid || !(operand->constDisplacement))
+                        {
+                            insnTemplate->printf ( "%d", operand->constDisplacement );
+                            if ( opInfo->operands[i] & Opr_Dest )
+                                asmcode->clobbersMemory = 1;
+                        }
                         if ( operand->baseReg != Reg_Invalid || operand->indexReg != Reg_Invalid )
                         {
                             insnTemplate->writebyte ( '(' );