SDCC 4.5.0 for PDK14 generates incorrect code for XOR operation with io register(sfr).
With "sdcc -mpdk14 -S -o main.asm main.c" command
Simple code like below (_pa is an io reg,ster)
t = _pa;
if (_pa ^ t) {
_pa ^= 0x1;
}
generates
; main.c: 11: t = __pa;
mov.io a, __pa
; main.c: 12: if (_pa ^ t) {
xor a, __pa
cneqsn a, #0x00
Here "xor a, pa" accesses a memory location not to the io reg, and causes unexpected results.