NymphCast: Assembly failure on armv7

On armv7, we get an assembly failure on Alpine Linux. See the CI pipeline here.

The error:

g++ -Os -fomit-frame-pointer -Wall -fPIC -fno-strict-aliasing -o obj/as_callfunc_arm_gcc.o -c ../../source/as_callfunc_arm_gcc.S
../../source/as_callfunc_arm_gcc.S: Assembler messages:
../../source/as_callfunc_arm_gcc.S:336: Error: thumb conditional instruction should be in IT block -- `ldrge r0,[r6]'
../../source/as_callfunc_arm_gcc.S:338: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:340: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:342: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:413: Error: thumb conditional instruction should be in IT block -- `ldrge r0,[r6]'
../../source/as_callfunc_arm_gcc.S:415: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:416: Error: thumb conditional instruction should be in IT block -- `movlt r1,r5'
../../source/as_callfunc_arm_gcc.S:418: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:419: Error: thumb conditional instruction should be in IT block -- `movlt r2,r5'
../../source/as_callfunc_arm_gcc.S:421: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:422: Error: thumb conditional instruction should be in IT block -- `movlt r3,r5'
../../source/as_callfunc_arm_gcc.S:423: Error: thumb conditional instruction should be in IT block -- `movlt r5,#0'
../../source/as_callfunc_arm_gcc.S:503: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6]'
../../source/as_callfunc_arm_gcc.S:505: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:506: Error: thumb conditional instruction should be in IT block -- `movlt r2,r5'
../../source/as_callfunc_arm_gcc.S:508: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:509: Error: thumb conditional instruction should be in IT block -- `movlt r3,r5'
../../source/as_callfunc_arm_gcc.S:510: Error: thumb conditional instruction should be in IT block -- `movlt r5,#0'
../../source/as_callfunc_arm_gcc.S:514: Error: thumb conditional instruction should be in IT block -- `ldrge r7,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:515: Error: thumb conditional instruction should be in IT block -- `strge r7,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:520: Error: thumb conditional instruction should be in IT block -- `movge r5,#4'
../../source/as_callfunc_arm_gcc.S:591: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6]'
../../source/as_callfunc_arm_gcc.S:593: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:595: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:597: Error: thumb conditional instruction should be in IT block -- `movge r11,#4'
../../source/as_callfunc_arm_gcc.S:669: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6]'
../../source/as_callfunc_arm_gcc.S:671: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:673: Error: thumb conditional instruction should be in IT block -- `movge r11,#4'
../../source/as_callfunc_arm_gcc.S:675: Error: thumb conditional instruction should be in IT block -- `movge r11,#8'
../../source/as_callfunc_arm_gcc.S:676: Error: thumb conditional instruction should be in IT block -- `ldrlt r7,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:677: Error: thumb conditional instruction should be in IT block -- `strlt r7,[r6,#12]'

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 16 (16 by maintainers)

Most upvoted comments

I managed to make the AngelScript runtime build on armv7l architectures by adding -Wa,-mimplicit-it=thumb when an armv7l architecture is detected, per the instructions here: https://wiki.ubuntu.com/ARM/Thumb2

This modifies only the projects/gnuc/Makefile file in the AngelScript build system. The AngelScript author has also been made aware of these changes.

Theoretically this modification should not impact building NymphCast on other platforms, but it should be tested regardless.

Yup that worked, thanks! 😄

Reproduced under Debian Buster armhf with GCC 8.3.0.

g++ -Wall -fPIC -fno-strict-aliasing -o obj/as_callfunc_arm_gcc.o -c ../../source/as_callfunc_arm_gcc.S
../../source/as_callfunc_arm_gcc.S: Assembler messages:
../../source/as_callfunc_arm_gcc.S:336: Error: thumb conditional instruction should be in IT block -- `ldrge r0,[r6]'
../../source/as_callfunc_arm_gcc.S:338: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:340: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:342: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:413: Error: thumb conditional instruction should be in IT block -- `ldrge r0,[r6]'
../../source/as_callfunc_arm_gcc.S:415: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:416: Error: thumb conditional instruction should be in IT block -- `movlt r1,r5'
../../source/as_callfunc_arm_gcc.S:418: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:419: Error: thumb conditional instruction should be in IT block -- `movlt r2,r5'
../../source/as_callfunc_arm_gcc.S:421: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:422: Error: thumb conditional instruction should be in IT block -- `movlt r3,r5'
../../source/as_callfunc_arm_gcc.S:423: Error: thumb conditional instruction should be in IT block -- `movlt r5,#0'
../../source/as_callfunc_arm_gcc.S:503: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6]'
../../source/as_callfunc_arm_gcc.S:505: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:506: Error: thumb conditional instruction should be in IT block -- `movlt r2,r5'
../../source/as_callfunc_arm_gcc.S:508: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:509: Error: thumb conditional instruction should be in IT block -- `movlt r3,r5'
../../source/as_callfunc_arm_gcc.S:510: Error: thumb conditional instruction should be in IT block -- `movlt r5,#0'
../../source/as_callfunc_arm_gcc.S:514: Error: thumb conditional instruction should be in IT block -- `ldrge r7,[r6,#12]'
../../source/as_callfunc_arm_gcc.S:515: Error: thumb conditional instruction should be in IT block -- `strge r7,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:520: Error: thumb conditional instruction should be in IT block -- `movge r5,#4'
../../source/as_callfunc_arm_gcc.S:591: Error: thumb conditional instruction should be in IT block -- `ldrge r1,[r6]'
../../source/as_callfunc_arm_gcc.S:593: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:595: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:597: Error: thumb conditional instruction should be in IT block -- `movge r11,#4'
../../source/as_callfunc_arm_gcc.S:669: Error: thumb conditional instruction should be in IT block -- `ldrge r2,[r6]'
../../source/as_callfunc_arm_gcc.S:671: Error: thumb conditional instruction should be in IT block -- `ldrge r3,[r6,#4]'
../../source/as_callfunc_arm_gcc.S:673: Error: thumb conditional instruction should be in IT block -- `movge r11,#4'
../../source/as_callfunc_arm_gcc.S:675: Error: thumb conditional instruction should be in IT block -- `movge r11,#8'
../../source/as_callfunc_arm_gcc.S:676: Error: thumb conditional instruction should be in IT block -- `ldrlt r7,[r6,#8]'
../../source/as_callfunc_arm_gcc.S:677: Error: thumb conditional instruction should be in IT block -- `strlt r7,[r6,#12]'
make[1]: *** [Makefile:160: obj/as_callfunc_arm_gcc.o] Error 1