Skip to content
  • Adam Jackson's avatar
    Fix build on i686 · 9e6e003e
    Adam Jackson authored and Matt Turner's avatar Matt Turner committed
    Presumably this only matters for i686 because amd64 implies sse2, but:
    
    BUILDSTDERR: In file included from gen4_vertex.c:34:
    BUILDSTDERR: gen4_vertex.c: In function 'emit_vertex':
    BUILDSTDERR: sna_render_inline.h:40:26: error: inlining failed in call to always_inline 'vertex_emit_2s': target specific option mismatch
    BUILDSTDERR:  static force_inline void vertex_emit_2s(struct sna *sna, int16_t x, int16_t y)
    BUILDSTDERR:                           ^~~~~~~~~~~~~~
    BUILDSTDERR: gen4_vertex.c:308:25: note: called from here
    BUILDSTDERR:  #define OUT_VERTEX(x,y) vertex_emit_2s(sna, x,y) /* XXX assert(!too_large(x, y)); */
    BUILDSTDERR:                          ^~~~~~~~~~~~~~~~~~~~~~~~
    BUILDSTDERR: gen4_vertex.c:360:2: note: in expansion of macro 'OUT_VERTEX'
    BUILDSTDERR:   OUT_VERTEX(dstX, dstY);
    BUILDSTDERR:   ^~~~~~~~~~
    
    The bug here appears to be that emit_vertex() is declared 'sse2' but
    vertex_emit_2s is merely always_inline. gcc8 decides that since you said
    always_inline you need to have explicitly cloned it for every
    permutation of targets. Merely saying inline seems to do the job of
    cloning vertex_emit_2s as much as necessary.
    
    So to reiterate: if you say always-inline, it won't, but if you just say
    maybe inline, it will. Thanks gcc, that's helpful.
    9e6e003e