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