| ... | ... | @@ -1930,45 +1930,53 @@ pub fn ptrBitWidth(target: Target) u16 { |
| 1930 | 1930 | } |
| 1931 | 1931 | |
| 1932 | 1932 | pub fn stackAlignment(target: Target) u16 { |
| 1933 | | return switch (target.cpu.arch) { |
| 1934 | | .m68k => 2, |
| 1935 | | .amdgcn => 4, |
| 1936 | | .x86 => switch (target.os.tag) { |
| 1937 | | .windows, .uefi => 4, |
| 1938 | | else => 16, |
| 1939 | | }, |
| 1940 | | .arm, |
| 1941 | | .armeb, |
| 1942 | | .thumb, |
| 1943 | | .thumbeb, |
| 1933 | // Overrides for when the stack alignment is not equal to the pointer width. |
| 1934 | switch (target.cpu.arch) { |
| 1935 | .m68k, |
| 1936 | => return 2, |
| 1937 | .amdgcn, |
| 1938 | => return 4, |
| 1939 | .lanai, |
| 1944 | 1940 | .mips, |
| 1945 | 1941 | .mipsel, |
| 1946 | 1942 | .sparc, |
| 1947 | | => 8, |
| 1943 | => return 8, |
| 1948 | 1944 | .aarch64, |
| 1949 | 1945 | .aarch64_be, |
| 1950 | 1946 | .bpfeb, |
| 1951 | 1947 | .bpfel, |
| 1948 | .loongarch32, |
| 1949 | .loongarch64, |
| 1952 | 1950 | .mips64, |
| 1953 | 1951 | .mips64el, |
| 1954 | | .riscv64, |
| 1955 | 1952 | .sparc64, |
| 1956 | | .x86_64, |
| 1957 | 1953 | .ve, |
| 1958 | 1954 | .wasm32, |
| 1959 | 1955 | .wasm64, |
| 1960 | | .loongarch64, |
| 1961 | | => 16, |
| 1962 | | .riscv32, |
| 1963 | | => if (Target.riscv.featureSetHas(target.cpu.features, .e)) 4 else 16, |
| 1964 | | .powerpc64, |
| 1965 | | .powerpc64le, |
| 1956 | => return 16, |
| 1957 | // Some of the following prongs should really be testing the ABI (e.g. for Arm, it's APCS vs |
| 1958 | // AAPCS16 vs AAPCS). But our current Abi enum is not able to handle that level of nuance. |
| 1959 | .arm, |
| 1960 | .armeb, |
| 1961 | .thumb, |
| 1962 | .thumbeb, |
| 1966 | 1963 | => switch (target.os.tag) { |
| 1967 | | else => 8, |
| 1968 | | .linux => 16, |
| 1964 | .netbsd => {}, |
| 1965 | .watchos => return 16, |
| 1966 | else => return 8, |
| 1969 | 1967 | }, |
| 1970 | | else => @divExact(target.ptrBitWidth(), 8), |
| 1971 | | }; |
| 1968 | .powerpc64, |
| 1969 | .powerpc64le, |
| 1970 | => if (target.os.tag == .linux or target.os.tag == .aix) return 16, |
| 1971 | .riscv32, |
| 1972 | .riscv64, |
| 1973 | => if (!Target.riscv.featureSetHas(target.cpu.features, .e)) return 16, |
| 1974 | .x86 => if (target.os.tag != .windows and target.os.tag != .uefi) return 16, |
| 1975 | .x86_64 => return if (target.os.tag == .elfiamcu) 4 else 16, |
| 1976 | else => {}, |
| 1977 | } |
| 1978 | |
| 1979 | return @divExact(target.ptrBitWidth(), 8); |
| 1972 | 1980 | } |
| 1973 | 1981 | |
| 1974 | 1982 | /// Default signedness of `char` for the native C compiler for this target |