> Am 31.03.2018 um 10:42 schrieb Erik Petrich: >> >> I have enabled the assembler to emit 24-bit addresses in the relocation >> records for stm8 like it does for ds390 and mcs51 (even though mcs51 is >> only using 16-bit addresses). So this should allow you to reference the >> individual bytes of the 24-bit address. However, I think additional work >> will still be needed to reference the upper 16 bits of a 24-bit address. >> >> Erik
I noticed you only changed outrxb() in asout.c and not outrw() which has a similar exception. > Thanks. That makes function pointers already quite useful for the large > memory model, and I have made the corresponding changes in the compiler > to enable that use. In particular, calls via function pointers work now, > as do const global function pointers (initialized by the address of a > function). > > The only thing that doesn't work is assigning the address of a function > to a function pointer. For that we'd need the upper 16 bits of a 24-bit > symbol: Code generation wants to load them into 16-bit register x using > ldw. I have tried to just use #(sym >> 16) where 16 bits would be > expected. However, that results in broken code: The linker seems to > write 24 bits into the binary, overwriting the first byte of the > following instruction. > > Philipp In the generated code I see that the lower 16 bits are loaded into x, not the upper. And the most significant byte is loaded into a by using #<sym, but that seems to fail. If you instead use #(sym>>16) it seems alright to me. Maarten ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user