| @@ -379,7 +379,7 @@ static uint8_t fastcallw_regs[2] = { TREG_ECX, TREG_EDX }; · 378 unmodified lines |
| 379 | returning via struct pointer. */ | 379 | returning via struct pointer. */ |
| 380 | ST_FUNC int gfunc_sret(CType *vt, int variadic, CType *ret, int *ret_align, int *regsize) | 380 | ST_FUNC int gfunc_sret(CType *vt, int variadic, CType *ret, int *ret_align, int *regsize) |
| 381 | { | 381 | { |
| 382 | #if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD | 382 | #if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD || TARGETOS_OpenBSD |
| 383 | int size, align; | 383 | int size, align; |
| 384 | *ret_align = 1; // Never have to re-align return values for x86 | 384 | *ret_align = 1; // Never have to re-align return values for x86 |
| 385 | *regsize = 4; | 385 | *regsize = 4; |
| @@ -495,7 +495,7 @@ ST_FUNC void gfunc_call(int nb_args) · 109 unmodified lines |
| 495 | args_size -= 4; | 495 | args_size -= 4; |
| 496 | } | 496 | } |
| 497 | } | 497 | } |
| 498 | #if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD | 498 | #if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD || TARGETOS_OpenBSD |
| 499 | else if ((vtop->type.ref->type.t & VT_BTYPE) == VT_STRUCT) | 499 | else if ((vtop->type.ref->type.t & VT_BTYPE) == VT_STRUCT) |
| 500 | args_size -= 4; | 500 | args_size -= 4; |
| 501 | #endif | 501 | #endif |
| @@ -545,7 +545,7 @@ ST_FUNC void gfunc_prolog(Sym *func_sym) · 43 unmodified lines |
| 545 | func_sub_sp_offset = ind; | 545 | func_sub_sp_offset = ind; |
| 546 | /* if the function returns a structure, then add an | 546 | /* if the function returns a structure, then add an |
| 547 | implicit pointer parameter */ | 547 | implicit pointer parameter */ |
| 548 | #if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD | 548 | #if defined(TCC_TARGET_PE) || TARGETOS_FreeBSD || TARGETOS_OpenBSD |
| 549 | size = type_size(&func_vt,&align); | 549 | size = type_size(&func_vt,&align); |
| 550 | if (((func_vt.t & VT_BTYPE) == VT_STRUCT) | 550 | if (((func_vt.t & VT_BTYPE) == VT_STRUCT) |
| 551 | && (size > 8 || (size & (size - 1)))) { | 551 | && (size > 8 || (size & (size - 1)))) { |
| @@ -586,7 +586,7 @@ ST_FUNC void gfunc_prolog(Sym *func_sym) · 34 unmodified lines |
| 586 | /* pascal type call or fastcall ? */ | 586 | /* pascal type call or fastcall ? */ |
| 587 | if (func_call == FUNC_STDCALL || func_call == FUNC_FASTCALLW) | 587 | if (func_call == FUNC_STDCALL || func_call == FUNC_FASTCALLW) |
| 588 | func_ret_sub = addr - 8; | 588 | func_ret_sub = addr - 8; |
| 589 | #if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD | 589 | #if !defined(TCC_TARGET_PE) && !TARGETOS_FreeBSD || TARGETOS_OpenBSD |
| 590 | else if (func_vc) | 590 | else if (func_vc) |
| 591 | func_ret_sub = 4; | 591 | func_ret_sub = 4; |
| 592 | #endif | 592 | #endif |