Andrew Kelley
53c86febcb
stage2: packed struct fixes for big-endian targets
2022-06-07 22:47:08 -07:00
Andrew Kelley
3e30ba3f20
stage2: better codegen for byte-aligned packed struct fields
...
* Sema: handle overaligned packed struct field pointers
* LLVM: handle byte-aligned packed struct field pointers
2022-06-07 21:05:40 -07:00
Andrew Kelley
6ff7b437ff
Merge pull request #11813 from Vexu/stage2
...
`zig2 build test-std` finale
2022-06-07 20:07:28 -04:00
Jakub Konka
3cb3873382
Merge pull request #11814 from ziglang/x64-stack-handling
...
x64: improves stack handling, fixes a heisenbug, adds micro-optimisations
2022-06-07 23:22:20 +02:00
Jakub Konka
6c59aa9e02
Merge pull request #11806 from koachan/sparc64-codegen
...
stage2: sparc64: Some more Air lowerings
2022-06-07 21:24:56 +02:00
Jakub Konka
27dad11ef1
x64: remove outdated TODO comment
2022-06-07 21:05:11 +02:00
Veikka Tuominen
6de9eea7bc
stage2 llvm: fix float/int conversion compiler-rt calls
2022-06-07 21:27:06 +03:00
Veikka Tuominen
fbd7e4506f
stage2: implement asm with multiple outputs
2022-06-07 21:27:06 +03:00
Veikka Tuominen
e4c0b848a4
Sema: allow simple else body even when all errors handled
2022-06-07 21:27:06 +03:00
Veikka Tuominen
d5e3d5d74c
Sema: make analyzeIsNonErr even lazier for inferred error sets
2022-06-07 21:27:06 +03:00
Jakub Konka
76ad7af4d8
x64: pull common codepath between store and genSetStack into a helper
2022-06-07 19:33:43 +02:00
Jakub Konka
03068ce6a6
x64: clean up store helper
2022-06-07 19:33:43 +02:00
Jakub Konka
0c72760454
x64: optimise element offset calculation if dealing with immediates
...
If `index` MCValue is actually an immediate, we can calculate offset
directly at "comptime" rather than at runtime.
2022-06-07 19:33:43 +02:00
Jakub Konka
fc015231ad
x64: account for non-pow-two stores via register deref
...
In this case, we need to proceed rather carefully to avoid writing
containing register width rather than the precise amount of bytes.
2022-06-07 19:33:43 +02:00
Jakub Konka
117f9f69e7
x64: simplify saving registers to stack in prologue
2022-06-07 19:33:40 +02:00
Andrew Kelley
e9fc58eab7
LLVM: handle extern function name collisions
...
Zig allows multiple extern functions with the same name, and the
backends have to handle this possibility.
For LLVM, we keep a sparse map of collisions, and then resolve them in
flushModule(). This introduces some technical debt that will have to be
resolved when adding incremental compilation support to the LLVM
backend.
2022-06-07 00:47:10 -04:00
Jakub Konka
d9b0c984aa
Merge pull request #11794 from ziglang/elf-macho-alignment
...
elf+macho: use explicit alignment on Decl if specified
2022-06-07 01:03:15 +02:00
Andrew Kelley
d1bfc83774
Merge pull request #11783 from ziglang/stage2-try
...
introduce a "try" ZIR and AIR instruction
2022-06-06 19:01:39 -04:00
Jakub Konka
920f1dcd27
Merge pull request #11804 from ziglang/elf-dwarf-unions
...
dwarf: fix incorrect type relocations for union payloads
2022-06-07 00:22:36 +02:00
Veikka Tuominen
14685e59b2
stage2: use correct type (u29) for alignment
2022-06-06 13:11:54 -07:00
Veikka Tuominen
84000aa820
Sema: fix inline call of func using ret_ptr with comptime only type
2022-06-06 13:11:50 -07:00
Veikka Tuominen
8fa88c88c2
AstGen: fix coercion scope type when stores are eliminated
2022-06-06 13:11:50 -07:00
Veikka Tuominen
cb5d2b691a
Sema: validate equality on store to comptime field
2022-06-06 13:11:50 -07:00
Veikka Tuominen
a040ccb42f
Sema: fix coerce result ptr outside of functions
2022-06-06 13:11:50 -07:00
joachimschmidt557
8ca6dc33d1
stage2 AArch64: implement try AIR instruction
2022-06-06 21:27:36 +02:00
Jakub Konka
e05de31a5f
dwarf: fix incorrect type reloc for unions
...
Split type relocs into two kinds: local and global. Global relocs
use a global type resolver and calculate offset to the existing
definition of a type abbreviation.
Local relocs use offset in the abbrev section of the containing
atom plus addend to generate a local relocation.
2022-06-06 19:58:51 +02:00
Jakub Konka
0cab01adbf
elf: refactor and enhance logging symtab
2022-06-06 19:58:47 +02:00
Koakuma
ec7f2a105f
stage2: sparc64: Implement airPtrElemPtr
2022-06-06 21:17:09 +07:00
Koakuma
f6eb83c91c
stage2: sparc64: Implement airArrayToSlice
2022-06-06 21:17:09 +07:00
Koakuma
f87dd285bb
stage2: sparc64: binOp/mul: Use template from add
2022-06-06 20:34:53 +07:00
Koakuma
31f24dbc55
stage2: sparc64: Implement airWrapErrUnionErr
2022-06-06 20:34:53 +07:00
Koakuma
c00d493a00
stage2: sparc64: Add some notes about stack space allocation
2022-06-06 20:34:53 +07:00
Koakuma
5d61f32887
stage2: sparc64: Implement airSlice
2022-06-06 20:34:53 +07:00
Koakuma
8b70abfcc6
stage2: sparc64: Fix & optimize 64-bit truncRegister
2022-06-06 20:34:53 +07:00
Koakuma
4d50e52c37
stage2: sparc64: Implement SPARCv9 xor, xnor, & not
2022-06-06 20:34:53 +07:00
Koakuma
97f9bf7e90
stage2: sparc64: Add BPr relocation to performReloc
2022-06-06 20:34:53 +07:00
Koakuma
23150de9c4
stage2: sparc64: Implement airNot
2022-06-06 20:34:53 +07:00
Koakuma
9ad74b6087
stage2: sparc64: Implement SPARCv9 addcc and movcc
2022-06-06 20:34:53 +07:00
Koakuma
97c43afefe
stage2: sparc64: Spill CCR before doing calls
2022-06-06 20:34:53 +07:00
Koakuma
2dfe307d60
stage2: sparc64: Some bookkeeping fixes
2022-06-06 20:34:53 +07:00
Koakuma
89b4195c69
stage2: sparc64: Account for delay slot in airBlock
2022-06-06 20:34:53 +07:00
Koakuma
3220e0b61c
stage2: sparc64: Proper handling of compare flags
2022-06-06 20:34:53 +07:00
Koakuma
9db81fee5d
stage2: sparc64: Implement airStructFieldVal
2022-06-06 20:34:53 +07:00
Koakuma
3d662cfaf4
stage2: sparc64: Implement airAddSubOverflow
2022-06-06 20:34:53 +07:00
Koakuma
093332c02e
stage2: sparc64: Implement condition code spilling
2022-06-06 20:34:53 +07:00
Koakuma
38aa431e03
stage2: sparc64: Fix CompareOperator <-> ICondition mapping
2022-06-06 20:34:52 +07:00
joachimschmidt557
a34f3ff04a
stage2 ARM: implement try AIR instruction
2022-06-06 14:22:40 +02:00
Gregory Anders
135b91aecd
Treat blocks with "return" as "noreturn"
...
Block statements that end with "break" should not be considered
"noreturn" for the enclosing scope, but other "noreturn" instructions
(return, panic, compile error, etc.) should be. This differentiation
necessitates handling "break" differently from the other "noreturn"
instructions when inside a block statement.
2022-06-06 13:13:52 +03:00
Jakub Konka
5dade176d8
sema: set new Decl alignment to 0 for generic call instantiation
2022-06-05 17:31:22 +02:00
Jakub Konka
95966f6fd7
elf+macho: use explicit alignment on decl is specified
2022-06-05 16:46:50 +02:00