blob: 9f749695910be4aa31c4aa751492a76a33c4fcca [file] [edit]
//===-- aeabi_uwrite4.S - ARM EABI Helper — Unaligned 4-Byte Memory Write--===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// Implements __aeabi_uwrite4 for unaligned memory accesses.
// Reference: Arm RTABI32 Specification.
// https://github.com/ARM-software/abi-aa/blob/main/rtabi32/rtabi32.rst#unaligned-memory-access
//===-------------------------------------------------------------------------------------===//
#include "../assembly.h"
.syntax unified
.p2align 2
DEFINE_COMPILERRT_FUNCTION(__aeabi_uwrite4)
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
lsrs r2, r0, #24
strb r0, [r1]
strb r2, [r1, #3]
lsrs r2, r0, #16
strb r2, [r1, #2]
lsrs r2, r0, #8
strb r2, [r1, #1]
#else
lsrs r2, r0, #8
strb r0, [r1, #3]
strb r2, [r1, #2]
lsrs r2, r0, #16
strb r2, [r1, #1]
lsrs r2, r0, #24
strb r2, [r1]
#endif
bx lr
END_COMPILERRT_FUNCTION(__aeabi_uwrite4)