In x86_64-gen.c/i386-gen.c, gfunc_call will generate structure store for bt == VT_STRUCT. Before generating any code, it is needed fetch cpu flag. As #ifdef TCC_TARGET_PE, gfunc_call() forgot to do this.
Unified · Split
| @@ -409,9 +409,9 @@ ST_FUNC void gfunc_call(int nb_args) · 408 unmodified lines | ||
| 409 | 409 | args_size = 0; |
| 410 | 410 | for(i = 0;i < nb_args; i++) { |
| 411 | 411 | if ((vtop->type.t & VT_BTYPE) == VT_STRUCT) { |
| 412 | − /* fetch cpu flag before generating any code */ | |
| 413 | − if ((vtop->r & VT_VALMASK) == VT_CMP) | |
| 414 | − gv(RC_INT); | |
| 412 | + /* fetch cpu flag before generating any code */ | |
| 413 | + if ((vtop->r & VT_VALMASK) == VT_CMP) | |
| 414 | + gv(RC_INT); | |
| 415 | 415 | size = type_size(&vtop->type, &align); |
| 416 | 416 | /* align to stack align size */ |
| 417 | 417 | size = (size + 3) & ~3; |
| @@ -828,10 +828,10 @@ void gfunc_call(int nb_args) · 827 unmodified lines | ||
| 828 | 828 | continue; /* arguments smaller than 8 bytes passed in registers or on stack */ |
| 829 | 829 | |
| 830 | 830 | if (bt == VT_STRUCT) { |
| 831 | − /* fetch cpu flag before generating any code */ | |
| 832 | − if ((vtop->r & VT_VALMASK) == VT_CMP) | |
| 833 | − gv(RC_INT); | |
| 834 | − /* align to stack align size */ | |
| 831 | + /* fetch cpu flag before generating any code */ | |
| 832 | + if ((vtop->r & VT_VALMASK) == VT_CMP) | |
| 833 | + gv(RC_INT); | |
| 834 | + /* align to stack align size */ | |
| 835 | 835 | size = (size + 15) & ~15; |
| 836 | 836 | /* generate structure store */ |
| 837 | 837 | r = get_reg(RC_INT); |