From: Hartmut B. <har...@te...> - 2003-02-05 06:19:13
|
> -----Original Message----- > From: min...@li... > [mailto:min...@li...] On Behalf Of > Danny Smith > Sent: Tuesday, February 04, 2003 11:48 PM > To: min...@li... > Subject: Re: [MinGW-dvlpr] Returning LARGE_INTEGER values > > > I ve rebuilt gcc 3.4 with this addition to cygwin.h: > > /* MSVC returns structs of up to 8 bytes via registers. */ > #undef RETURN_IN_MEMORY > #define RETURN_IN_MEMORY(TYPE) \ > (TYPE_MODE (TYPE) == BLKmode || \ > (AGGREGATE_TYPE_P (TYPE) && int_size_in_bytes(TYPE) > 8 )) > > And this is result of testcase: > > Source: > /* large.c */ > #include <windows.h> > > LARGE_INTEGER WINAPI LargeIntegerAdd (LARGE_INTEGER, LARGE_INTEGER); > LARGE_INTEGER WINAPI > MyLargeIntegerAdd (LARGE_INTEGER i1, LARGE_INTEGER i2) > { > LARGE_INTEGER res; > res.QuadPart = i1.QuadPart + i2.QuadPart; > return res; > } > > gcc -S large.c > > .file "large.c" > .text > .globl _MyLargeIntegerAdd@16 > .def _MyLargeIntegerAdd@16; .scl 2; .type 32; .endef > _MyLargeIntegerAdd@16: > pushl %ebp > movl %esp, %ebp > subl $24, %esp > movl 8(%ebp), %eax > movl 12(%ebp), %edx > movl %eax, -8(%ebp) > movl %edx, -4(%ebp) > movl 16(%ebp), %eax > movl 20(%ebp), %edx > movl %eax, -16(%ebp) > movl %edx, -12(%ebp) > movl -16(%ebp), %eax > movl -12(%ebp), %edx > addl -8(%ebp), %eax > adcl -4(%ebp), %edx > movl %eax, -24(%ebp) > movl %edx, -20(%ebp) > movl -24(%ebp), %eax > movl -20(%ebp), %edx > leave > ret $16 > > Looks like what you want. Can you comapre with MS output and confirm? > > Danny > That's what I need. The LARGE_INTEGER return value of the function MyLargeIntegerAdd is returned in edx:eax. - Hartmut |