mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 12:59:04 +00:00
Merge pull request #2750 from cartr/thumbv4-aeabi
compiler-rt: Support thumb versions older than armv6
This commit is contained in:
commit
e79e8993e6
@ -405,15 +405,15 @@ const use_thumb_1 = usesThumb1(builtin.arch);
|
||||
|
||||
fn usesThumb1(arch: builtin.Arch) bool {
|
||||
return switch (arch) {
|
||||
.arm => switch (arch.arm) {
|
||||
.arm => |sub_arch| switch (sub_arch) {
|
||||
.v6m => true,
|
||||
else => false,
|
||||
},
|
||||
.armeb => switch (arch.armeb) {
|
||||
.armeb => |sub_arch| switch (sub_arch) {
|
||||
.v6m => true,
|
||||
else => false,
|
||||
},
|
||||
.thumb => switch (arch.thumb) {
|
||||
.thumb => |sub_arch| switch (sub_arch) {
|
||||
.v5,
|
||||
.v5te,
|
||||
.v4t,
|
||||
@ -423,7 +423,7 @@ fn usesThumb1(arch: builtin.Arch) bool {
|
||||
=> true,
|
||||
else => false,
|
||||
},
|
||||
.thumbeb => switch (arch.thumbeb) {
|
||||
.thumbeb => |sub_arch| switch (sub_arch) {
|
||||
.v5,
|
||||
.v5te,
|
||||
.v4t,
|
||||
@ -471,6 +471,22 @@ test "usesThumb1" {
|
||||
//etc.
|
||||
}
|
||||
|
||||
const use_thumb_1_pre_armv6 = usesThumb1PreArmv6(builtin.arch);
|
||||
|
||||
fn usesThumb1PreArmv6(arch: builtin.Arch) bool {
|
||||
return switch (arch) {
|
||||
.thumb => |sub_arch| switch (sub_arch) {
|
||||
.v5, .v5te, .v4t => true,
|
||||
else => false,
|
||||
},
|
||||
.thumbeb => |sub_arch| switch (sub_arch) {
|
||||
.v5, .v5te, .v4t => true,
|
||||
else => false,
|
||||
},
|
||||
else => false,
|
||||
};
|
||||
}
|
||||
|
||||
nakedcc fn __aeabi_memcpy() noreturn {
|
||||
@setRuntimeSafety(false);
|
||||
if (use_thumb_1) {
|
||||
@ -505,7 +521,16 @@ nakedcc fn __aeabi_memmove() noreturn {
|
||||
|
||||
nakedcc fn __aeabi_memset() noreturn {
|
||||
@setRuntimeSafety(false);
|
||||
if (use_thumb_1) {
|
||||
if (use_thumb_1_pre_armv6) {
|
||||
asm volatile (
|
||||
\\ eors r1, r2
|
||||
\\ eors r2, r1
|
||||
\\ eors r1, r2
|
||||
\\ push {r7, lr}
|
||||
\\ b memset
|
||||
\\ pop {r7, pc}
|
||||
);
|
||||
} else if (use_thumb_1) {
|
||||
asm volatile (
|
||||
\\ mov r3, r1
|
||||
\\ mov r1, r2
|
||||
@ -527,7 +552,15 @@ nakedcc fn __aeabi_memset() noreturn {
|
||||
|
||||
nakedcc fn __aeabi_memclr() noreturn {
|
||||
@setRuntimeSafety(false);
|
||||
if (use_thumb_1) {
|
||||
if (use_thumb_1_pre_armv6) {
|
||||
asm volatile (
|
||||
\\ adds r2, r1, #0
|
||||
\\ movs r1, #0
|
||||
\\ push {r7, lr}
|
||||
\\ bl memset
|
||||
\\ pop {r7, pc}
|
||||
);
|
||||
} else if (use_thumb_1) {
|
||||
asm volatile (
|
||||
\\ mov r2, r1
|
||||
\\ movs r1, #0
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user