On 2017-04-07 14:02, Lars Knoll wrote:
There might be a little catch with regards to structs containing
members that are 8 bytes in size (aka quint64). Are those getting
passed in registers on 32bit ARM?

struct struct_16Bytes
{
    unsigned long long first, second;
};

unsigned long long test(struct_16Bytes s)
{
    return s.second;
}

Generates:
        mov     r0, r2 ; Each member fills in two registers
        mov     r1, r3
        bx      lr


If I change the signature to: "test(const struct_16Bytes &s)", then it generates: ldr r2, [r0, #8] ; ldrs are slow, since they read from memory
        ldr     r1, [r0, #12]
        mov     r0, r2
        bx      lr



(Tested on ARM 32bit, clang -target arm-none-linux-gnueabi)




Regards,
--
SĂ©rgio Martins | sergio.mart...@kdab.com | Senior Software Engineer
Klarälvdalens Datakonsult AB, a KDAB Group company
Tel: Sweden (HQ) +46-563-540090, USA +1-866-777-KDAB(5322)
KDAB - The Qt, C++ and OpenGL Experts
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to