authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-06-27 21:59:45-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-07-04 15:47:07-07:00
log78eb3c561746a4dd86a67f927d244a3e8f46ad00
tree74030f8599dd7d134935a3cd610e0ebd74a34ff1
parent8ae92fd17ee9a3d46e4f441864a8544b440c0b2d

bootstrap: support aarch64 in 32-bit mode

* `CMakeLists.txt`: support the weird `uname -m` output. * `CMakeLists.txt`: detect and use the C compiler's default arm mode. * cbe: support gcc with both `f128` and `u128` emulated. * std.os.linux.thumb: fix incorrectly passed asm inputs.

5 files changed, 33 insertions(+), 45 deletions(-)

CMakeLists.txt+22-11
...@@ -689,17 +689,28 @@ target_link_libraries(zigcpp LINK_PUBLIC...@@ -689,17 +689,28 @@ target_link_libraries(zigcpp LINK_PUBLIC
689 ${CMAKE_THREAD_LIBS_INIT}689 ${CMAKE_THREAD_LIBS_INIT}
690)690)
691691
692string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" HOST_TARGET_ARCH)692string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" ZIG_HOST_TARGET_ARCH)
693if(HOST_TARGET_ARCH STREQUAL "amd64")693if(ZIG_HOST_TARGET_ARCH STREQUAL "amd64")
694 set(HOST_TARGET_ARCH "x86_64")694 set(ZIG_HOST_TARGET_ARCH "x86_64")
695elseif(HOST_TARGET_ARCH STREQUAL "arm64")695elseif(ZIG_HOST_TARGET_ARCH STREQUAL "arm64")
696 set(HOST_TARGET_ARCH "aarch64")696 set(ZIG_HOST_TARGET_ARCH "aarch64")
697elseif(ZIG_HOST_TARGET_ARCH STREQUAL "armv7l")
698 set(ZIG_HOST_TARGET_ARCH "arm")
699elseif(ZIG_HOST_TARGET_ARCH STREQUAL "armv7b")
700 set(ZIG_HOST_TARGET_ARCH "armeb")
697endif()701endif()
698string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" HOST_TARGET_OS)702if(ZIG_HOST_TARGET_ARCH MATCHES "^arm(eb)?$")
699if(HOST_TARGET_OS STREQUAL "darwin")703 include(CheckSymbolExists)
700 set(HOST_TARGET_OS "macos")704 check_symbol_exists(__thumb__ "" ZIG_HOST_TARGET_DEFAULTS_TO_THUMB)
705 if(ZIG_HOST_TARGET_DEFAULTS_TO_THUMB)
706 string(REGEX REPLACE "^arm" "thumb" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}")
707 endif()
708endif()
709string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" ZIG_HOST_TARGET_OS)
710if(ZIG_HOST_TARGET_OS STREQUAL "darwin")
711 set(ZIG_HOST_TARGET_OS "macos")
701endif()712endif()
702set(HOST_TARGET_TRIPLE "${HOST_TARGET_ARCH}-${HOST_TARGET_OS}")713set(ZIG_HOST_TARGET_TRIPLE "${ZIG_HOST_TARGET_ARCH}-${ZIG_HOST_TARGET_OS}" CACHE STRING "Host zig target triple.")
703714
704if(MSVC)715if(MSVC)
705 set(ZIG_WASM2C_COMPILE_FLAGS "")716 set(ZIG_WASM2C_COMPILE_FLAGS "")
...@@ -749,7 +760,7 @@ set(BUILD_ZIG2_ARGS...@@ -749,7 +760,7 @@ set(BUILD_ZIG2_ARGS
749 --name zig2 -femit-bin="${ZIG2_C_SOURCE}"760 --name zig2 -femit-bin="${ZIG2_C_SOURCE}"
750 --mod "build_options::${ZIG_CONFIG_ZIG_OUT}"761 --mod "build_options::${ZIG_CONFIG_ZIG_OUT}"
751 --deps build_options762 --deps build_options
752 -target "${HOST_TARGET_TRIPLE}"763 -target "${ZIG_HOST_TARGET_TRIPLE}"
753)764)
754765
755add_custom_command(766add_custom_command(
...@@ -767,7 +778,7 @@ set(BUILD_COMPILER_RT_ARGS...@@ -767,7 +778,7 @@ set(BUILD_COMPILER_RT_ARGS
767 --name compiler_rt -femit-bin="${ZIG_COMPILER_RT_C_SOURCE}"778 --name compiler_rt -femit-bin="${ZIG_COMPILER_RT_C_SOURCE}"
768 --mod "build_options::${ZIG_CONFIG_ZIG_OUT}"779 --mod "build_options::${ZIG_CONFIG_ZIG_OUT}"
769 --deps build_options780 --deps build_options
770 -target "${HOST_TARGET_TRIPLE}"781 -target "${ZIG_HOST_TARGET_TRIPLE}"
771)782)
772783
773add_custom_command(784add_custom_command(
lib/std/os/linux/thumb.zig+7-7
...@@ -17,7 +17,7 @@ pub fn syscall0(number: SYS) usize {...@@ -17,7 +17,7 @@ pub fn syscall0(number: SYS) usize {
17 \\ svc #017 \\ svc #0
18 \\ ldr r7, [%[tmp], #4]18 \\ ldr r7, [%[tmp], #4]
19 : [ret] "={r0}" (-> usize),19 : [ret] "={r0}" (-> usize),
20 : [tmp] "{r1}" (buf),20 : [tmp] "{r1}" (&buf),
21 : "memory"21 : "memory"
22 );22 );
23}23}
...@@ -32,7 +32,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {...@@ -32,7 +32,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
32 \\ svc #032 \\ svc #0
33 \\ ldr r7, [%[tmp], #4]33 \\ ldr r7, [%[tmp], #4]
34 : [ret] "={r0}" (-> usize),34 : [ret] "={r0}" (-> usize),
35 : [tmp] "{r1}" (buf),35 : [tmp] "{r1}" (&buf),
36 [arg1] "{r0}" (arg1),36 [arg1] "{r0}" (arg1),
37 : "memory"37 : "memory"
38 );38 );
...@@ -48,7 +48,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {...@@ -48,7 +48,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
48 \\ svc #048 \\ svc #0
49 \\ ldr r7, [%[tmp], #4]49 \\ ldr r7, [%[tmp], #4]
50 : [ret] "={r0}" (-> usize),50 : [ret] "={r0}" (-> usize),
51 : [tmp] "{r2}" (buf),51 : [tmp] "{r2}" (&buf),
52 [arg1] "{r0}" (arg1),52 [arg1] "{r0}" (arg1),
53 [arg2] "{r1}" (arg2),53 [arg2] "{r1}" (arg2),
54 : "memory"54 : "memory"
...@@ -65,7 +65,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {...@@ -65,7 +65,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
65 \\ svc #065 \\ svc #0
66 \\ ldr r7, [%[tmp], #4]66 \\ ldr r7, [%[tmp], #4]
67 : [ret] "={r0}" (-> usize),67 : [ret] "={r0}" (-> usize),
68 : [tmp] "{r3}" (buf),68 : [tmp] "{r3}" (&buf),
69 [arg1] "{r0}" (arg1),69 [arg1] "{r0}" (arg1),
70 [arg2] "{r1}" (arg2),70 [arg2] "{r1}" (arg2),
71 [arg3] "{r2}" (arg3),71 [arg3] "{r2}" (arg3),
...@@ -83,7 +83,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)...@@ -83,7 +83,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
83 \\ svc #083 \\ svc #0
84 \\ ldr r7, [%[tmp], #4]84 \\ ldr r7, [%[tmp], #4]
85 : [ret] "={r0}" (-> usize),85 : [ret] "={r0}" (-> usize),
86 : [tmp] "{r4}" (buf),86 : [tmp] "{r4}" (&buf),
87 [arg1] "{r0}" (arg1),87 [arg1] "{r0}" (arg1),
88 [arg2] "{r1}" (arg2),88 [arg2] "{r1}" (arg2),
89 [arg3] "{r2}" (arg3),89 [arg3] "{r2}" (arg3),
...@@ -102,7 +102,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,...@@ -102,7 +102,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
102 \\ svc #0102 \\ svc #0
103 \\ ldr r7, [%[tmp], #4]103 \\ ldr r7, [%[tmp], #4]
104 : [ret] "={r0}" (-> usize),104 : [ret] "={r0}" (-> usize),
105 : [tmp] "{r5}" (buf),105 : [tmp] "{r5}" (&buf),
106 [arg1] "{r0}" (arg1),106 [arg1] "{r0}" (arg1),
107 [arg2] "{r1}" (arg2),107 [arg2] "{r1}" (arg2),
108 [arg3] "{r2}" (arg3),108 [arg3] "{r2}" (arg3),
...@@ -130,7 +130,7 @@ pub fn syscall6(...@@ -130,7 +130,7 @@ pub fn syscall6(
130 \\ svc #0130 \\ svc #0
131 \\ ldr r7, [%[tmp], #4]131 \\ ldr r7, [%[tmp], #4]
132 : [ret] "={r0}" (-> usize),132 : [ret] "={r0}" (-> usize),
133 : [tmp] "{r6}" (buf),133 : [tmp] "{r6}" (&buf),
134 [arg1] "{r0}" (arg1),134 [arg1] "{r0}" (arg1),
135 [arg2] "{r1}" (arg2),135 [arg2] "{r1}" (arg2),
136 [arg3] "{r2}" (arg3),136 [arg3] "{r2}" (arg3),
lib/zig.h-12
...@@ -3178,18 +3178,6 @@ zig_bitCast_float(f64, uint64_t)...@@ -3178,18 +3178,6 @@ zig_bitCast_float(f64, uint64_t)
3178zig_bitCast_float(f80, zig_u128)3178zig_bitCast_float(f80, zig_u128)
3179zig_bitCast_float(f128, zig_u128)3179zig_bitCast_float(f128, zig_u128)
31803180
3181#define zig_cast_f16 (zig_f16)
3182#define zig_cast_f32 (zig_f32)
3183#define zig_cast_f64 (zig_f64)
3184
3185#if _MSC_VER && !zig_has_f128
3186#define zig_cast_f80
3187#define zig_cast_f128
3188#else
3189#define zig_cast_f80 (zig_f80)
3190#define zig_cast_f128 (zig_f128)
3191#endif
3192
3193#define zig_convert_builtin(ExternResType, ResType, operation, ExternArgType, ArgType, version) \3181#define zig_convert_builtin(ExternResType, ResType, operation, ExternArgType, ArgType, version) \
3194 zig_extern ExternResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \3182 zig_extern ExternResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \
3195 zig_compiler_rt_abbrev_##ArgType), zig_compiler_rt_abbrev_##ResType), version)(ExternArgType); \3183 zig_compiler_rt_abbrev_##ArgType), zig_compiler_rt_abbrev_##ResType), version)(ExternArgType); \
src/codegen/c.zig+1-6
...@@ -732,9 +732,7 @@ pub const DeclGen = struct {...@@ -732,9 +732,7 @@ pub const DeclGen = struct {
732 // All unsigned ints matching float types are pre-allocated.732 // All unsigned ints matching float types are pre-allocated.
733 const repr_ty = mod.intType(.unsigned, bits) catch unreachable;733 const repr_ty = mod.intType(.unsigned, bits) catch unreachable;
734734
735 try writer.writeAll("zig_cast_");735 try writer.writeAll("zig_make_");
736 try dg.renderTypeForBuiltinFnName(writer, ty);
737 try writer.writeAll(" zig_make_");
738 try dg.renderTypeForBuiltinFnName(writer, ty);736 try dg.renderTypeForBuiltinFnName(writer, ty);
739 try writer.writeByte('(');737 try writer.writeByte('(');
740 switch (bits) {738 switch (bits) {
...@@ -1049,9 +1047,6 @@ pub const DeclGen = struct {...@@ -1049,9 +1047,6 @@ pub const DeclGen = struct {
10491047
1050 const repr_val = try mod.intValue_big(repr_ty, repr_val_big.toConst());1048 const repr_val = try mod.intValue_big(repr_ty, repr_val_big.toConst());
10511049
1052 try writer.writeAll("zig_cast_");
1053 try dg.renderTypeForBuiltinFnName(writer, ty);
1054 try writer.writeByte(' ');
1055 var empty = true;1050 var empty = true;
1056 if (std.math.isFinite(f128_val)) {1051 if (std.math.isFinite(f128_val)) {
1057 try writer.writeAll("zig_make_");1052 try writer.writeAll("zig_make_");
stage1/zig.h+3-9
...@@ -3178,17 +3178,11 @@ zig_bitCast_float(f64, uint64_t)...@@ -3178,17 +3178,11 @@ zig_bitCast_float(f64, uint64_t)
3178zig_bitCast_float(f80, zig_u128)3178zig_bitCast_float(f80, zig_u128)
3179zig_bitCast_float(f128, zig_u128)3179zig_bitCast_float(f128, zig_u128)
31803180
3181#define zig_cast_f16 (zig_f16)3181#define zig_cast_f16
3182#define zig_cast_f32 (zig_f32)3182#define zig_cast_f32
3183#define zig_cast_f64 (zig_f64)3183#define zig_cast_f64
3184
3185#if _MSC_VER && !zig_has_f128
3186#define zig_cast_f803184#define zig_cast_f80
3187#define zig_cast_f1283185#define zig_cast_f128
3188#else
3189#define zig_cast_f80 (zig_f80)
3190#define zig_cast_f128 (zig_f128)
3191#endif
31923186
3193#define zig_convert_builtin(ExternResType, ResType, operation, ExternArgType, ArgType, version) \3187#define zig_convert_builtin(ExternResType, ResType, operation, ExternArgType, ArgType, version) \
3194 zig_extern ExternResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \3188 zig_extern ExternResType zig_expand_concat(zig_expand_concat(zig_expand_concat(__##operation, \