! Check that shift expressions translate to the proper reloc for MOVI and ! SHORI for local and external symbols. This is the 32-bit subset. .text .mode SHmedia start: movi localsym & 65535,r4 movi (localsym >> 0) & 65535,r4 movi (localsym >> 16) & 65535,r4 movi externsym & 65535,r4 movi (externsym >> 0) & 65535,r4 movi (externsym >> 16) & 65535,r4 shori localsym & 65535,r4 shori (localsym >> 0) & 65535,r4 shori (localsym >> 16) & 65535,r4 shori externsym & 65535,r4 shori (externsym >> 0) & 65535,r4 shori (externsym >> 16) & 65535,r4 movi (localsym + 42) & 65535,r4 movi ((localsym + 43) >> 0) & 65535,r4 movi ((localsym + 44) >> 16) & 65535,r4 movi (externsym + 45) & 65535,r4 movi ((externsym + 46) >> 0) & 65535,r4 movi ((externsym + 47) >> 16) & 65535,r4 shori (localsym + 42) & 65535,r4 shori ((localsym + 43) >> 0) & 65535,r4 shori ((localsym + 44) >> 16) & 65535,r4 shori (externsym + 45) & 65535,r4 shori ((externsym + 46) >> 0) & 65535,r4 shori ((externsym + 47) >> 16) & 65535,r4 .data ! Just make localsym have a non-zero offset into .data. .long 0 localsym: .long 0