Unified · Split
| @@ -2543,30 +2543,32 @@ ST_FUNC void vstore(void) · 2542 unmodified lines | ||
| 2543 | 2543 | vtop -=2; |
| 2544 | 2544 | }else{ |
| 2545 | 2545 | size = type_size(&vtop->type, &align); |
| 2546 | −#ifdef TCC_ARM_EABI | |
| 2547 | − /* destination */ | |
| 2548 | − vswap(); | |
| 2549 | − vtop->type.t = VT_PTR; | |
| 2550 | − gaddrof(); | |
| 2546 | +#ifndef TCC_TARGET_X86_64 | |
| 2547 | + /* destination */ | |
| 2548 | + vswap(); | |
| 2549 | + vtop->type.t = VT_PTR; | |
| 2550 | + gaddrof(); | |
| 2551 | 2551 | |
| 2552 | − /* address of memcpy() */ | |
| 2553 | − if(!(align & 7)) | |
| 2554 | − vpush_global_sym(&func_old_type, TOK_memcpy8); | |
| 2555 | − else if(!(align & 3)) | |
| 2556 | − vpush_global_sym(&func_old_type, TOK_memcpy4); | |
| 2557 | − else | |
| 2558 | − vpush_global_sym(&func_old_type, TOK_memcpy); | |
| 2552 | + /* address of memcpy() */ | |
| 2553 | +# ifdef TCC_ARM_EABI | |
| 2554 | + if(!(align & 7)) | |
| 2555 | + vpush_global_sym(&func_old_type, TOK_memcpy8); | |
| 2556 | + else if(!(align & 3)) | |
| 2557 | + vpush_global_sym(&func_old_type, TOK_memcpy4); | |
| 2558 | + else | |
| 2559 | +# endif | |
| 2560 | + vpush_global_sym(&func_old_type, TOK_memcpy); | |
| 2559 | 2561 | |
| 2560 | − vswap(); | |
| 2561 | − /* source */ | |
| 2562 | − vpushv(vtop - 2); | |
| 2563 | − vtop->type.t = VT_PTR; | |
| 2564 | − gaddrof(); | |
| 2565 | − /* type size */ | |
| 2566 | − vpushi(size); | |
| 2567 | − gfunc_call(3); | |
| 2562 | + vswap(); | |
| 2563 | + /* source */ | |
| 2564 | + vpushv(vtop - 2); | |
| 2565 | + vtop->type.t = VT_PTR; | |
| 2566 | + gaddrof(); | |
| 2567 | + /* type size */ | |
| 2568 | + vpushi(size); | |
| 2569 | + gfunc_call(3); | |
| 2568 | 2570 | #else |
| 2569 | − /* destination */ | |
| 2571 | + /* destination */ | |
| 2570 | 2572 | vswap(); |
| 2571 | 2573 | vtop->type.t = VT_PTR; |
| 2572 | 2574 | gaddrof(); |
| @@ -5239,14 +5241,19 @@ static void init_putz(CType *t, Section *sec, unsigned long c, int size) · 2666 unmodified lines | ||
| 5239 | 5241 | if (sec) { |
| 5240 | 5242 | /* nothing to do because globals are already set to zero */ |
| 5241 | 5243 | } else { |
| 5242 | −#ifdef TCC_TARGET_ARM | |
| 5244 | +#ifndef TCC_TARGET_X86_64 | |
| 5243 | 5245 | vpush_global_sym(&func_old_type, TOK_memset); |
| 5244 | 5246 | vseti(VT_LOCAL, c); |
| 5247 | +#ifdef TCC_TARGET_ARM | |
| 5245 | 5248 | vpushs(size); |
| 5246 | 5249 | vpushi(0); |
| 5250 | +#else | |
| 5251 | + vpushi(0); | |
| 5252 | + vpushs(size); | |
| 5253 | +#endif | |
| 5247 | 5254 | gfunc_call(3); |
| 5248 | 5255 | #else |
| 5249 | − vseti(VT_LOCAL, c); | |
| 5256 | + vseti(VT_LOCAL, c); | |
| 5250 | 5257 | gen_putz(vtop, size); |
| 5251 | 5258 | vtop--; |
| 5252 | 5259 | #endif |