Feature request 160 https://sourceforge.net/p/sdcc/feature-requests/160/#af0e is probably related. It's about idata though. (To compile the dated example "idata" needs to be prepended with dual underscore.)
you can get to the intended code: rfe_587.c:13: length = ((uint8_t)note >> 4) & 0xf; 000016 E5*01 [12] 167 mov a,_note 000018 C4 [12] 168 swap a 000019 54 0F [12] 169 anl a,#0x0f 00001B F5*00 [12] 170 mov _length,a by giving the compiler an (uint8_t) hint. Appending a compilable snippet.
Feature request: Allow RGB with Alpha Channel as background color
There is little to fear. The 8051 architecture reserves 3 bytes at the start for an LJMP, then there are small (8 bytes) code blocks reserved for each IRQ. Usually these also contain a LJMP but very small IRQ routines might fit in there too. It would be extremely unusual for an 8051 FPGA implementation to break the assumption cited in your original post "address = (number * 8) + 3". In fact it could be argued that this should not be called a 8051 implementation any more. So you should be fine by...
Csmith (fuzzing tool) exposes errors
two random thoughts: Compare the .asm listing files (with a tool comparing directories and ignoring white-space changes (on Windows e.g. TotalCommander)). Check the include files actually used (there might be surprises because file name matching is case-insensitive on Windows).
Hi Christiano, within the above disassembly the code generated for your function...
sorry, meant to say 8 9 23. (8 7 23 actually is worse)