Unified · Split
| @@ -2552,6 +2552,11 @@ ST_FUNC void vstore(void) · 2551 unmodified lines | ||
| 2552 | 2552 | /* remove bit field info to avoid loops */ |
| 2553 | 2553 | vtop[-1].type.t = ft & ~(VT_BITFIELD | (-1 << VT_STRUCT_SHIFT)); |
| 2554 | 2554 | |
| 2555 | + /* duplicate source into other register */ | |
| 2556 | + gv_dup(); | |
| 2557 | + vswap(); | |
| 2558 | + vrott(3); | |
| 2559 | + | |
| 2555 | 2560 | if((ft & VT_BTYPE) == VT_BOOL) { |
| 2556 | 2561 | gen_cast(&vtop[-1].type); |
| 2557 | 2562 | vtop[-1].type.t = (vtop[-1].type.t & ~VT_BTYPE) | (VT_BYTE | VT_UNSIGNED); |
| @@ -2583,6 +2588,9 @@ ST_FUNC void vstore(void) · 25 unmodified lines | ||
| 2583 | 2588 | gen_op('|'); |
| 2584 | 2589 | /* store result */ |
| 2585 | 2590 | vstore(); |
| 2591 | + | |
| 2592 | + /* pop off shifted source from "duplicate source..." above */ | |
| 2593 | + vpop(); | |
| 2586 | 2594 | } else { |
| 2587 | 2595 | #ifdef CONFIG_TCC_BCHECK |
| 2588 | 2596 | /* bound check case */ |