avoid branching in naked _start function

It is a known issue that C code in naked function will not always compile, especially at -O0. _start does not compile at -O0 because of a branch, which needs to be if-converted using the -simplifycfg optimization. If we want _start to compile at -O0, the branch can be replaced with bit manipulation.