[Freemint-list] What's wrong with this code?

Thorsten Otto admin at tho-otto.de
Thu Aug 17 21:03:44 MSD 2017


On Donnerstag, 17. August 2017 14:10:09 CEST Miro Kropáček wrote:
> pc16550.c:1852:10: error: memory input 0 is not directly addressable

Those are because of the %0+4 etc in the asm, that does not work. The solution 
there would be to pass intr_iovar[0] etc instead of doing the arithmetic in 
the asm.

>pc16550.c:1852:28: error: memory input 1 is not directly addressable

Thats seems be a oversight in the m68k constraints. There is no constraint for 
specifying symbolic references for calls, like in other backends. Whatever i 
try, i either get that error or output like "bsr #_pc16550_int" which is 
nonsense of course. Could be solved by loading the address of the function 
into a register first, and passing that as input.

Your patch wouldn't have worked anyway. The functions are interrupt functions, 
and the declaration of the input parameters might generate code that loads 
those values into registers first (generating code to save/restore these), but 
the inline asm does a rte already.


I have attached a patch that should solve this (relative to your patch since 
it was already applied to master). It also gets rids of that hackish 
pc16550_intx function whose only purpose was to hide the other functions.

Thorsten

PS.: i think most of the asm stuff can be totally eliminated.  There is no 
need to save/restore d2/a2 in the interrupt handler, because that will be done 
also in the called function. But i cannot test this, so i left it as it is.

PPS: some day someone should go and translate all those german comments, also 
in a lot of other source files...

-------------- next part --------------
A non-text attachment was scrubbed...
Name: pc16550.patch
Type: text/x-patch
Size: 4133 bytes
Desc: not available
Url : http://mail.atariforge.org/pipermail/freemint-list/attachments/20170817/426429ef/attachment.bin 


More information about the Freemint-list mailing list