Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to build glibc with HW FPU properly #14

Open
VVIsaev opened this issue Sep 3, 2021 · 1 comment
Open

How to build glibc with HW FPU properly #14

VVIsaev opened this issue Sep 3, 2021 · 1 comment
Assignees
Labels

Comments

@VVIsaev
Copy link

VVIsaev commented Sep 3, 2021

I tried to build glibc with following configuration:

$ CROSS_COMPILE=arc64-linux-gnu- ASFLAGS='-mfpu=fpud' CFLAGS='-O2 -mfpu=fpud' CXXFLAGS='-O2 -mfpu=fpud' ../configure --target=arc64-linux-gnu --host=arc64-linux-gnu --build=x86_64 --enable-shared --disable-profile --disable-werror --without-gd --prefix=/home/isaev/tmp/glibc-gnuhf
$ make

Then I checked __longjmp() in libc.so.6, see source:

...
        LDR.as r24,   r0, 15

#if defined(__ARCV3__)
        LDR.as r25,   r0, 16
        LDR.as r26,   r0, 17
#endif

#if defined (__ARC_FLOAT_ABI_HARD__)
        FLDR.as f16,  r0, 18
...
        FLDR.as f31,  r0, 33
#endif

        MOVR.f r0, r1
        j.d    [blink]
...

But in built libc I do't see such code:

0000000000035608 <__longjmp>:
...
   35644:       100f 0e58               ldl.as  r24,[r0,15]
   35648:       1010 0e59               ldl.as  r25,[r0,16]
   3564c:       1011 0e5a               ldl.as  r26,[r0,17]
   35650:       580a 8040               movl.f  r0,r1
   35654:       2021 07c0               j.d     [blink]
...

So I don't see fp related code in __longjmp.

@abrodkin
Copy link
Member

Somehow adding libc_cv_cc_submachine="-mfpu=fpud" to your configure command-line helps. Likely due to https://sourceware.org/bugzilla/show_bug.cgi?id=10118 & a fix for it https://sourceware.org/bugzilla/attachment.cgi?id=3927&action=diff:

000000000003570c <__longjmp>:
   3570c:»      1000 0e5f           »   ldl.as» blink,[r0]
   35710:»      1001 0e5c           »   ldl.as» sp,[r0,1]
   35714:»      1002 0e5b           »   ldl.as» fp,[r0,2]
   35718:»      1003 0e5e           »   ldl.as» r30,[r0,3]
   3571c:»      1004 0e4d           »   ldl.as» r13,[r0,4]
   35720:»      1005 0e4e           »   ldl.as» r14,[r0,5]
   35724:»      1006 0e4f           »   ldl.as» r15,[r0,6]
   35728:»      1007 0e50           »   ldl.as» r16,[r0,7]
   3572c:»      1008 0e51           »   ldl.as» r17,[r0,8]
   35730:»      1009 0e52           »   ldl.as» r18,[r0,9]
   35734:»      100a 0e53           »   ldl.as» r19,[r0,10]
   35738:»      100b 0e54           »   ldl.as» r20,[r0,11]
   3573c:»      100c 0e55           »   ldl.as» r21,[r0,12]
   35740:»      100d 0e56           »   ldl.as» r22,[r0,13]
   35744:»      100e 0e57           »   ldl.as» r23,[r0,14]
   35748:»      100f 0e58           »   ldl.as» r24,[r0,15]
   3574c:»      1010 0e59           »   ldl.as» r25,[r0,16]
   35750:»      1011 0e5a           »   ldl.as» r26,[r0,17]
   35754:»      e012 041a           »   fld64.as»       f16,[r0,18]
   35758:»      e013 045a           »   fld64.as»       f17,[r0,19]
   3575c:»      e014 049a           »   fld64.as»       f18,[r0,20]
   35760:»      e015 04da           »   fld64.as»       f19,[r0,21]
   35764:»      e016 051a           »   fld64.as»       f20,[r0,22]
   35768:»      e017 055a           »   fld64.as»       f21,[r0,23]
   3576c:»      e018 059a           »   fld64.as»       f22,[r0,24]
   35770:»      e019 05da           »   fld64.as»       f23,[r0,25]
   35774:»      e01a 061a           »   fld64.as»       f24,[r0,26]
   35778:»      e01b 065a           »   fld64.as»       f25,[r0,27]
   3577c:»      e01c 069a           »   fld64.as»       f26,[r0,28]
   35780:»      e01d 06da           »   fld64.as»       f27,[r0,29]
   35784:»      e01e 071a           »   fld64.as»       f28,[r0,30]
   35788:»      e01f 075a           »   fld64.as»       f29,[r0,31]
   3578c:»      e020 079a           »   fld64.as»       f30,[r0,32]
   35790:»      e021 07da           »   fld64.as»       f31,[r0,33]
   35794:»      580a 8040           »   movl.f» r0,r1
   35798:»      2021 07c0           »   j.d»    [blink]
   3579c:»      20ca 0061           »   mov.eq» r0,0x1

And now we need to figure out how to do that consistently. My guess is configuring GCC with --with-fpu=fpud (like we do in Buildroot when enabled BR2_GCC_TARGET_FPU, see https://github.com/foss-for-synopsys-dwc-arc-processors/buildroot/blob/arc64/arch/Config.in.arc#L111) should be good enough as then regardless of ASFLAGS GCC will have __ARC_FLOAT_ABI_HARD__ defined by default.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants