[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] how to compile stik/sting stuff with gcc4
This qualifies as guru material, you knowledge of GCC is astounding
I dont envy the 32 functions that need adjustuing, but I would have no
problem doing it with those instructions
Thanks again for the Gold
I presume the resulting header or sting/stik will be made public
One last question, does "It is defined in include/compiler.h" imply
there are more changes to be made elsewhere?
Paul
2010/1/12 Vincent Rivière <vincent.riviere@freesbee.fr>:
> Miro Kropacek wrote:
>>
>> inet.c: In function 'inet_send':
>> inet.c:137: error: asm-specifier for variable 'retv' conflicts with asm
>> clobber list
>
> Oh, this header is huge.
> Here are the instructions.
>
> The file mint/osbind.h can be used as a model.
>
> Example:
> #define trap_1_w(n) \
> __extension__ \
> ({ \
> register long retvalue __asm__("d0"); \
> \
> __asm__ volatile \
> ( \
> "movw %1,sp@-\n\t" \
> "trap #1\n\t" \
> "addql #2,sp\n\t" \
> : "=r"(retvalue) /* outputs */ \
> : "g"(n) /* inputs */ \
> : __CLOBBER_RETURN("d0") "d1", "d2", "a0", "a1", "a2" /* clobbered
> regs */ \
> AND_MEMORY \
> ); \
> retvalue; \
> })
>
>
> 1) Use the __CLOBBER_RETURN("d0") macro in the clobber list when the output
> list contain a variable mapped to d0. It is the case here for the retvalue
> variable, the compiler is told to allocate it in d0. GCC 2.x requires d0 to
> be put in the clobber list, but GCC 4.x is clever enough to see it on
> output, then it fails. The macro does the right thing with every compiler.
> It is defined in include/compiler.h
> Beware, if no output variable is mapped to d0, you must use "d0" alone
> without the macro !
>
> 2) Look at the end of line character. "\n\t" is the standard, it produces a
> perfectly aligned assembler source code when you use gcc -S. Perfect for
> debugging. ";" like in your source is valid, too, but everything is put on a
> single line, so it is unreadable.
> It is usually better to avoid to put "\n\t" on the last line, here it is a
> bad example.
> This change is not mandatory, it is only for the readability of the
> intermediate assembler code.
>
> 3) Look at the multiline strings. In my example, two adjacent strings are
> automatically concatened by the compiler, that's good. In your old file, the
> string is opened at the beginning, it contains embedded newlines, then it is
> closed at the end. This causes problems to something, I don't remember well,
> if it is not GCC, it is the binutils. This should be fixed.
>
> 4) If you care about ColdFire, you should replace "addqw #8,sp" by "addql
> #8,sp", which does exactly the same without performance loss, and which is
> ColdFire compatible.
>
> 5) When the stack correction is >8, you should use "lea sp@(12),sp" instead
> of "addw #12,sp", to be both faster and ColdFire compatible.
>
> 6) I see "a2" is missing from the clobber lists, is it really guaranteed
> that it will never be trashed ?
>
> 7) The inline assembler use that horrible MIT syntax, however gas has been
> supporting the normal Motorola syntax for ages.
>
> Now, you have some work to do.
>
> --
> Vincent Rivière
>
>
>