"branch" instruction encoding
I compare code generated by 4.6 2012q4 and 4.7 2013q2 and I found significant difference on assembler branch instruction encoding.
Code from 2012q4 looks like:
D100 bne test
But code from 2013q2 like
F0408001 bne test
Differnece is clear: old version use encoding T1 and new version encoding T3 (instruction "BNE.W" in "BNE" place)
Why new version create bigger code than previous? It make problems with compare and branch instruction CBZ/CBNZ because it have max +128 range (64 or less instructions). Code can be compiled on old version, on new compilation fail "Error: branch out of range" because many instructions inside CBZ skip area are significantly bigger.
Is it problem on this GCC port or in GCC generally?
Question information
- Language:
- English Edit question
- Status:
- Answered
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
This question was reopened
- by jdobry
Can you help with this problem?
Provide an answer of your own, or ask jdobry for more information if necessary.