[all-commits] [llvm/llvm-project] dd369c: [compiler-rt] Fix tests of __aeabi_(idivmod|uidivm...

Victor Campos via All-commits all-commits at lists.llvm.org
Tue Feb 11 01:50:18 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: dd369c771e215ebf7bf2d09e874643788e49d334
      https://github.com/llvm/llvm-project/commit/dd369c771e215ebf7bf2d09e874643788e49d334
  Author: Victor Campos <victor.campos at arm.com>
  Date:   2025-02-11 (Tue, 11 Feb 2025)

  Changed paths:
    M compiler-rt/test/builtins/Unit/arm/aeabi_idivmod_test.c
    M compiler-rt/test/builtins/Unit/arm/aeabi_uidivmod_test.c
    M compiler-rt/test/builtins/Unit/arm/aeabi_uldivmod_test.c

  Log Message:
  -----------
  [compiler-rt] Fix tests of __aeabi_(idivmod|uidivmod|uldivmod) to support big endian (#126277)

This patch makes these functions' tests work in big endian mode:
 - `__aeabi_idivmod`.
 - `__aeabi_uidivmod`.
 -  `__aeabi_uldivmod`.

The three functions return a struct containing two fields, quotient and
remainder, via *value in regs* calling convention. They differ in the
integer type of each field.

In the tests of the first two, a 64-bit integer is used as the return
type of the call. And as consequence of the ABI rules for structs
(Composite Types), the quotient resides in `r0` and the remainder in
`r1` regardless of endianness. So, in order to access each component
from the 64-bit integer in the caller code, care must be taken to access
the correct bits as they do depend on endianness in this case.

In the test of the third one, the caller code has inline assembly to
access the components. This assembly code assumed little endian, so it
had to be made flexible for big endian as well.

`_YUGA_BIG_ENDIAN` is defined in `int_endianness.h`. It's a macro
internal to compiler-rt that's in theory compatible with more toolchains
than gcc and clang.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list