Index: lib/builtins/CMakeLists.txt =================================================================== --- lib/builtins/CMakeLists.txt +++ lib/builtins/CMakeLists.txt @@ -347,7 +347,11 @@ arm/aeabi_memmove.S arm/aeabi_memset.S arm/aeabi_uidivmod.S - arm/aeabi_uldivmod.S) + arm/aeabi_uldivmod.S + arm/aeabi_uread4.c + arm/aeabi_uread8.c + arm/aeabi_uwrite4.c + arm/aeabi_uwrite8.c) set(arm_Thumb1_JT_SOURCES arm/switch16.S Index: lib/builtins/arm/aeabi_uread4.c =================================================================== --- /dev/null +++ lib/builtins/arm/aeabi_uread4.c @@ -0,0 +1,18 @@ +//===-- aeabi_uread4.c - EABI unaligned read implementation ---------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include +#include "../int_lib.h" + +AEABI_RTABI si_int __aeabi_uread4(char* p) { + struct unaligned_int { + si_int v; + } __attribute__((__packed__, __may_alias__)); + return ((struct unaligned_int*)p)->v; +} Index: lib/builtins/arm/aeabi_uread8.c =================================================================== --- /dev/null +++ lib/builtins/arm/aeabi_uread8.c @@ -0,0 +1,18 @@ +//===-- aeabi_uread8.c - EABI unaligned read implementation ---------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include +#include "../int_lib.h" + +AEABI_RTABI di_int __aeabi_uread8(char* p) { + struct unaligned_int { + di_int v; + } __attribute__((__packed__, __may_alias__)); + return ((struct unaligned_int*)p)->v; +} Index: lib/builtins/arm/aeabi_uwrite4.c =================================================================== --- /dev/null +++ lib/builtins/arm/aeabi_uwrite4.c @@ -0,0 +1,19 @@ +//===-- aeabi_uwrite4.c - EABI unaligned write implementation -------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include +#include "../int_lib.h" + +AEABI_RTABI void __aeabi_uwrite4(si_int value, char* p) { + struct unaligned_int { + si_int v; + } __attribute__((__packed__, __may_alias__)); + ((struct unaligned_int*)p)->v = value; +} + Index: lib/builtins/arm/aeabi_uwrite8.c =================================================================== --- /dev/null +++ lib/builtins/arm/aeabi_uwrite8.c @@ -0,0 +1,19 @@ +//===-- aeabi_uwrite8.c - EABI unaligned write implementation -------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include +#include "../int_lib.h" + +AEABI_RTABI void __aeabi_uwrite8(di_int value, char* p) { + struct unaligned_int { + di_int v; + } __attribute__((__packed__, __may_alias__)); + ((struct unaligned_int*)p)->v = value; +} +