On Wed, Aug 29, 2018 at 9:22 AM, Palmer Dabbelt <pal...@sifive.com> wrote: > Thanks Jim -- I'm afraid at least part of this was my mess, as I had to go > add in the ZERO_EXTEND_LOAD hackery to work around some bug in this file > that I couldn't figure out how to fix in a better way.
ZERO_EXTEND_LOAD is exactly the same as SUBX, so is redundant. That is the main reason why I dropped it. > IIRC the issue I found was in booting a Linux kernel that was built with > "-mcmodel=medany". If I'm reading our current kernel port correctly that's > the default for 64-bit systems, but I'm not sure when we flipped over so I > think it's worth checking -- I know at the time I fixed the bug it wasn't > the default :). You should be able to do a "make V=1" inside Linux to just > see the compiler command lines. By default, 32-bit kernels are built medlow, and 64-bit kernels are built medany. That is in the riscv Kconfig file. Before committing the patch, I did apply it to freedom-u-sdk, build a 64-bit kernel, and boot both on qemu and spike, so I think we are OK here. I did find a few optimization problems via the gcc testsuite while trying to improve the file. The most interesting one, and maybe the one you hit earlier, is with non-extended loads, which because of LOAD_EXTEND_OP we actually have to use zero-extending loads for char/short loads, but sign-extending loads for words, and I had to add a new mode attribute for that. That one took a little time to debug because it didn't fail with trivial testcases, and the miscompilation was non-obvious. Jim