Commit Graph
34717 Commits
Author SHA1 Message Date
kcbanner a4690ecb1f Cause a compilation error to occur if using @extern with is_dll_import in a comptime scope.
Add a note about thread local / dll import being the cause.
2024-10-22 12:41:35 -04:00
kcbanner ee25757245 Add support for specifying dll_storage_class in @extern 2024-10-22 12:41:35 -04:00
kcbanner 2d888a8e63 tests: re-enable tests that now pass on aarch64-windows 2024-10-22 11:39:29 +02:00
kcbanner 85d87c9ca1 coff: fix incorrect default image_base values and re-enable shared library tests on Windows
This was the cause of aarch64-windows shared libraries causing  "bad image" errors
during load-time linking. I also re-enabled the tests that were surfacing this bug.
2024-10-21 22:54:52 -07:00
Mario Nachbaur 9f84f7f921 watchOS: add os to aarch64 architecture
Needed for creating libraries that run both on
physical Apple Watches and the watchOS simulator.
2024-10-21 09:24:24 +02:00
Alex Rønne Petersen 6c1e306484 llvm: Add some missing fnptr alignment specifications in DataLayoutBuilder. 2024-10-20 09:21:17 +02:00
Alex Rønne Petersen 43344833c5 link.Dwarf: Fix function alignment calculation to match the rest of the linker.
In particular, for user-specified alignment values, we need to do
max(user_align, minFunctionAlignment()) to respect the ABI minimum.
2024-10-20 09:21:17 +02:00
Alex Rønne Petersen 762ad4c6f4 link: Use defaultFunctionAlignment() when function alignment is unspecified.
max(user_align, minFunctionAlignment()) is only appropriate when the user has
actually given an explicit, non-zero alignment value.
2024-10-20 09:21:17 +02:00
Alex Rønne Petersen ef72b91ac2 compiler: Remove uses of defaultFunctionAlignment() in the frontend.
minFunctionAlignment() is something we can know ahead of time for any given
target because it's a matter of ABI. However, defaultFunctionAlignment() is a
matter of optimization and every backend can do it differently depending on any
number of factors. For example, LLVM will base the choice on the CPU model in
its aarch64 backend. So just don't use this value in the frontend.
2024-10-20 09:21:17 +02:00
Alex Rønne Petersen d2f04e919c compiler: Update defaultFunctionAlignment()/minFunctionAlignment() for more targets.
defaultFunctionAlignment() can be made more sophisticated over time based on the
CPU model and/or features. For now, I've picked some reasonable values for the
CPUs that are most commonly used in practice. (Values are sourced from LLVM.)
2024-10-20 09:21:17 +02:00
Alex Rønne Petersen 40104f2145 compiler: Disallow function alignment for nvptx and spirv. 2024-10-20 09:21:14 +02:00
mlugg f7d679ceae riscv: disable failing test
Looks like the self-hosted riscv64 backend can't handle `std.meta.eql`
involving the new `CallingConvention` right now.
2024-10-19 20:06:04 +01:00
mlugg 8d5ac6bdea Sema: add and improve some callconv compile errors 2024-10-19 19:46:07 +01:00
mlugg 73f4c68005 x86_64: handle incoming stack alignment 2024-10-19 19:46:07 +01:00
mlugg 387965a696 x86_64,riscv64: fix incorrect incoming_stack_alignment handling
The whole motivation behind this proposal in the first place was that
the LLVM backend disagrees with the self-hosted backends on what
`@setAlignStack` meant, so we can't just translate the old logic to the
new system! These backends can introduce support for overriding
`incoming_stack_alignment` later on.
2024-10-19 19:46:06 +01:00
mlugg cf39652500 compiler_rt: remove bogus tests
These only worked before because our lowering of the `AAPCS` calling
convention was incorrect in a way which happened to match the ABI of
these functions. The tests aren't actually very helpful -- there are
already tests for `divmoddi4` etc -- so rather than using inline asm on
the caller side to match the ABI, we just delete these two tests.

We were for some reason missing a direct test for `__udivmodsi4`, so one
has been added.
2024-10-19 19:44:53 +01:00
mlugg 289b2f82c3 llvm: fix lowering arm_aapcs_vfp functions 2024-10-19 19:21:33 +01:00
mlugg 28cb887275 Zcu: correct callconvSupported for self-hosted aarch64 2024-10-19 19:21:33 +01:00
mlugg 04ffc1c963 langref: update enum_export_error.zig for callconv changes 2024-10-19 19:21:33 +01:00
mlugg 830230176d std: update uses of .Inline callconv 2024-10-19 19:21:33 +01:00
mlugg 3ef8bb6354 llvn: fix incorrect mips64 callconv handling 2024-10-19 19:21:32 +01:00
mlugg 1d1e8e1105 link.Dwarf: handle avr_signal and avr_builtin callconvs 2024-10-19 19:21:32 +01:00
mlugg bde68fdebc std.Target: correct C callconv on hardfloat ARM 2024-10-19 19:21:32 +01:00
mlugg 1f11eed3d1 llvm: fix lowering of avr_interrupt and m68k_interrupt callconvs 2024-10-19 19:21:32 +01:00
mlugg ed862b05ae std.builtin.CallingConvention: remove deprecated RISC-V privilege mode
See https://github.com/riscv/riscv-isa-manual/commit/b6cade07034d39e65134a879a5c3369d50e0df0e
2024-10-19 19:21:32 +01:00
mlugg 0b786059b5 compiler: avoid unreasonable eval branch quotas
Using `@FieldType` (#21702).
2024-10-19 19:21:17 +01:00
mlugg 2319d62f21 std.builtin.CallingConvention: include exact architecture tags in comments 2024-10-19 19:15:24 +01:00
mlugg d466c08e05 Sema: minor cleanup 2024-10-19 19:15:24 +01:00
mlugg cb48376bec cbe,translate-c: support more callconvs
There are several more that we could support here, but I didn't feel
like going down the rabbit-hole of figuring them out. In particular,
some of the Clang enum fields aren't specific enough for us, so we'll
have to switch on the target to figure out how to translate-c them. That
can be a future enhancement.
2024-10-19 19:15:24 +01:00
mlugg 67580ede5e std.builtin.CallingConvention: RISC-V PrivilegeLevel -> PrivilegeMode
The RISC-V specification uses these terms a little interchangably, but
"mode" seems more correct here.
2024-10-19 19:15:24 +01:00
mlugg a2c519ba67 link: add clarifying comment 2024-10-19 19:15:24 +01:00
mlugg 6657982e56 std.builtin.CallingConvention: don't provide bogus winapi value 2024-10-19 19:15:24 +01:00
mlugg 2d9a167cd2 std.Target: rename defaultCCallingConvention and Cpu.Arch.fromCallconv 2024-10-19 19:15:23 +01:00
mlugg cbfe00b17d std.zig.render: fix callconv(.Inline) -> inline fn promotion 2024-10-19 19:15:23 +01:00
mlugg 4be0cf30fc test: update for CallingConvention changes
This also includes some compiler and std changes to correct error
messages which weren't properly updated before.
2024-10-19 19:15:23 +01:00
mlugg ec19086aa0 compiler: remove @setAlignStack
This commit finishes implementing #21209 by removing the
`@setAlignStack` builtin in favour of `CallingConvention` payloads. The
x86_64 backend is updated to use the stack alignment given in the
calling convention (the LLVM backend was already updated in a previous
commit).

Resolves: #21209
2024-10-19 19:15:23 +01:00
mlugg bc797a97b1 std: update for new CallingConvention
The old `CallingConvention` type is replaced with the new
`NewCallingConvention`. References to `NewCallingConvention` in the
compiler are updated accordingly. In addition, a few parts of the
standard library are updated to use the new type correctly.
2024-10-19 19:15:23 +01:00
mlugg 36405b9b43 stage1: update zig1.wasm
As well as being necessary for the `CallingConvention` changes, this
update includes the following notable changes:

* Fix unlabeled `break` targeting the wrong scope in the presence of
  labeled continue, unblocking #21422
* Implement `@FieldType`
* Implement `@splat` on arrays

Signed-off-by: mlugg <mlugg@mlugg.co.uk>
2024-10-19 19:13:41 +01:00
mlugg 51706af908 compiler: introduce new CallingConvention
This commit begins implementing accepted proposal #21209 by making
`std.builtin.CallingConvention` a tagged union.

The stage1 dance here is a little convoluted. This commit introduces the
new type as `NewCallingConvention`, keeping the old `CallingConvention`
around. The compiler uses `std.builtin.NewCallingConvention`
exclusively, but when fetching the type from `std` when running the
compiler (e.g. with `getBuiltinType`), the name `CallingConvention` is
used. This allows a prior build of Zig to be used to build this commit.
The next commit will update `zig1.wasm`, and then the compiler and
standard library can be updated to completely replace
`CallingConvention` with `NewCallingConvention`.

The second half of #21209 is to remove `@setAlignStack`, which will be
implemented in another commit after updating `zig1.wasm`.
2024-10-19 19:08:59 +01:00
mlugg 8573836892 incremental: disable flaky test 2024-10-18 09:46:03 +01:00
mlugg 097766bba3 compiler: implement @FieldType
Resolves: #21702
2024-10-18 08:50:40 +01:00
Andrew Kelley fffbb511db Merge pull request #21736 from alexrp/qemu-9.1
ci: Update to QEMU 9.1.0 in x86_64-linux scripts
2024-10-17 19:50:42 -07:00
Alex Rønne Petersen 8bfc36f091 ci: Update to QEMU 9.1.0 in x86_64-linux scripts. 2024-10-18 00:55:20 +02:00
Alex Rønne Petersen b113415871 ci: Remove -fwasmtime from aarch64-linux scripts.
This is covered by the x86_64-linux scripts. Also remove the TODO comments
related to -fqemu for the same reason.
2024-10-18 00:55:18 +02:00
Alex Rønne Petersen ff594eae49 std.Target: Make Abi.default() more smarter.
This builds on 221bd829bc with more research I did
for test/llvm_targets.zig.
2024-10-18 00:10:43 +02:00
Andrew Kelley 8504e1f550 Merge pull request #21610 from alexrp/riscv-abis
Fix some RISC-V ABI issues and add ILP32/LP64 (soft float) to module tests
2024-10-17 12:54:44 -07:00
wooster0 816dfca0b5 langref: update builtin variadic functions
Documentation was outdated.
2024-10-17 11:51:06 +03:00
Alex Rønne Petersen d38ed893c6 Merge pull request #21726 from alexrp/target-api
`std.Target`: Some miscellaneous API improvements
2024-10-17 02:49:34 +02:00
Justin Braben 4a2a0f50ca fix compilation errors for fs and fs.Dir (#21643)
* fix compilation errors for fs and fs.Dir

* mem.span instead of mem.sliceTo

* Updating symLinkAbsoluteW function parameters

* Update with expected rename semantics
2024-10-17 01:08:58 +02:00
Alex Rønne Petersen 549a7eba40 std.Target: Rename OS version range functions to drop the "get" prefix. 2024-10-16 22:25:29 +02:00