revert vstore()
authorjiang <30155751@qq.com>
Sun, 22 Jun 2014 17:08:54 +0000 (23 01:08 +0800)
committerjiang <30155751@qq.com>
Sun, 22 Jun 2014 17:08:54 +0000 (23 01:08 +0800)
tccgen.c

index b2a7717..387b986 100644 (file)
--- a/tccgen.c
+++ b/tccgen.c
@@ -2552,6 +2552,11 @@ ST_FUNC void vstore(void)
         /* remove bit field info to avoid loops */
         vtop[-1].type.t = ft & ~(VT_BITFIELD | (-1 << VT_STRUCT_SHIFT));
 
+        /* duplicate source into other register */
+        gv_dup();
+        vswap();
+        vrott(3);
+
         if((ft & VT_BTYPE) == VT_BOOL) {
             gen_cast(&vtop[-1].type);
             vtop[-1].type.t = (vtop[-1].type.t & ~VT_BTYPE) | (VT_BYTE | VT_UNSIGNED);
@@ -2583,6 +2588,9 @@ ST_FUNC void vstore(void)
         gen_op('|');
         /* store result */
         vstore();
+
+        /* pop off shifted source from "duplicate source..." above */
+        vpop();
     } else {
 #ifdef CONFIG_TCC_BCHECK
         /* bound check case */