Commit Graph

64 Commits

Author SHA1 Message Date
Andrew Kelley 62c25af802 add higher level arg-parsing API + misc. changes
* add @noInlineCall - see #640
   This fixes a crash in --release-safe and --release-fast modes
   where the optimizer inlines everything into _start and
   clobbers the command line argument data.
   If we were able to verify that the user's code never reads
   command line args, we could leave off this "no inline"
   attribute.
 * add i29 and u29 primitive types. u29 is the type of alignment,
   so it makes sense to be a primitive.
   probably in the future we'll make any `i` or `u` followed by
   digits into a primitive.
 * add `aligned` functions to Allocator interface
 * add `os.argsAlloc` and `os.argsFree` so that you can get
   a `[]const []u8`, do whatever arg parsing you want, and then free
   it. For now this uses the other API under the hood, but it could
   be reimplemented to do a single allocation.
 * add tests to make sure command line argument parsing works.
2017-12-06 18:12:05 -05:00
Andrew Kelley cf96b6f87b update to LLVM 5.0.1rc2 2017-12-01 13:44:28 -05:00
Andrew Kelley f276fd0f37 basic union support
See #144
2017-11-15 13:04:18 -05:00
Marc Tiehuis 795703a39c Add emit command-line option (#580)
Add emit command-line option
2017-11-03 09:09:33 -04:00
Andrew Kelley d7e28f991d remove CXX ABI workaround
the actual solution is you must compile zig with the same
compiler that compiled llvm, lld, and clang.

reverts 8d60ffe314
2017-10-23 22:37:59 -04:00
Andrew Kelley 562f91e875 clean up some resources 2017-10-15 21:06:04 -04:00
Andrew Kelley aa78827db2 add module flag to emit CodeView for COFF object files
see #516
2017-10-10 18:04:02 -04:00
Andrew Kelley b8ee3a8143 add -mllvm support
useful for debugging crashes in llvm optimizer
2017-09-17 17:46:16 -04:00
Josh Wolfe 1449e71de8 cleanup whitespace 2017-09-01 10:27:04 -07:00
Andrew Kelley 3f5dd08ca8 codegen: all stores specify align value
See #37
2017-08-30 04:23:52 -04:00
Andrew Kelley c5c9d98065 introduce align keyword
* remove `@setGlobalAlign`
 * add align keyword for setting alignment on functions and
   variables.
 * loads and stores use alignment from pointer
 * memcpy, memset use alignment from pointer
 * add syntax for pointer alignment
 * slices can have volatile
 * add u2, i2 primitives
 * ignore preferred align and use abi align everywhere
 * back to only having alignOf builtin.
   preferredAlignOf is too tricky to be useful.
   See #432. Partial revert of
   e726925e80.

See #37
2017-08-29 07:51:34 -04:00
Andrew Kelley 2bd6c60752 update for llvm 5.0.0rc1 2017-08-26 00:34:40 -04:00
Andrew Kelley 35d3444e27 more intuitive left shift and right shift operators
Before:
 * << is left shift, not allowed to shift 1 bits out
 * <<% is left shift, allowed to shift 1 bits out
 * >> is right shift, allowed to shift 1 bits out

After:
 * << is left shift, allowed to shift 1 bits out
 * >> is right shift, allowed to shift 1 bits out
 * @shlExact is left shift, not allowed to shift 1 bits out
 * @shrExact is right shift, not allowed to shift 1 bits out

Closes #413
2017-08-09 10:09:38 -04:00
Andrew Kelley 6a93dda3e1 progress toward windows hello world working 2017-06-14 00:04:34 -04:00
Andrew Kelley 29defd705d back to AT&T syntax for assembly
this reverts 5c04730534.

sadly the quality of the intel dialect in llvm's assembly
parser has many frustrating bugs, and generally has unfortunate
syntax.

the plan is to use AT&T for now since it at least works,
and eventually zig will have its own assembly parser for
x86 and it will be as close to NASM as possible.
2017-04-30 11:28:11 -04:00
Andrew Kelley bf67427c67 fix crash when using zig to link
without explicit dynamic linker
2017-04-13 01:15:25 -04:00
Andrew Kelley 41144a8566 ability to inline at function callsite
closes #306
2017-04-13 00:13:54 -04:00
Andrew Kelley 7f47b0c271 run alwaysinline pass in debug mode
before this commit, the optimized IR code that is displayed in
--verbose mode is not actually what gets emitted to an object
file.

that is now corrected, and we make sure to run the alwaysinliner
pass even in debug mode, so you can rely on "inline" keyword
inlining a function, guaranteed.

See #306
2017-04-11 03:37:44 -04:00
Andrew Kelley 5c04730534 use intel dialect for inline assembly
closes #242
2017-03-23 18:59:43 -04:00
Andrew Kelley d10bbd28e9 use lld instead of system linker 2017-03-13 11:54:56 -04:00
Andrew Kelley cd31f875a6 update to llvm 4.0 2017-03-10 02:29:01 -05:00
Andrew Kelley 573f3f8d48 coldcc works better
* Only use Cold Calling Convention on x86
 * Add the cold attribute to functions marked with coldcc
2017-02-06 13:50:19 -05:00
Andrew Kelley b9c943b066 tell LLVM the target sub arch type 2017-02-05 18:23:54 -05:00
Andrew Kelley 74d41ce44b infer hard float from target environments that imply it 2017-02-05 00:16:49 -05:00
Andrew Kelley 1fa4d2a5af rename LLVMZig to ZigLLVM 2016-09-10 20:53:57 -04:00
Andrew Kelley 20eb749ad6 generate debug info for global constants
See #41
2016-09-04 22:32:23 -07:00
Andrew Kelley 4e7effd3d3 port to llvm 3.9 2016-09-04 18:30:40 -07:00
Andrew Kelley 404defd99b add div_exact builtin fn
closes #149
2016-05-07 20:53:16 -07:00
Andrew Kelley 100802cdc0 add debug safety for left shifting
See #46
2016-05-06 15:46:38 -07:00
Andrew Kelley c95e497857 add cmpxchg builtin function 2016-05-04 18:19:49 -07:00
Andrew Kelley a299de2265 better alignment value for stack variables
fixes debug info sometimes not being available for parameters
2016-04-28 15:10:27 -07:00
Andrew Kelley 4815c03caa better parameter codegen
* ability to take address of a parameter (closes #97)
 * debug symbols work for parameters
2016-04-27 17:34:53 -07:00
Andrew Kelley 7026bed462 fix debug symbols regression after llvm 3.8.0 2016-04-09 14:21:55 -07:00
Andrew Kelley 76e1541803 update to llvm 3.8.0 2016-03-08 18:56:14 -07:00
Andrew Kelley 58c13aa949 rename 'environ' to 'env_type'
environ appears to clash with another symbol in mingw land
2016-02-16 20:03:41 -07:00
Andrew Kelley 9bf9be9937 fix build on GCC 2016-02-12 14:07:12 -07:00
Andrew Kelley 2bf6c28bc3 ability to cross compile
hello_libc.zig can produce a windows build
2016-02-11 01:33:27 -07:00
Andrew Kelley 54a8b6a110 cleanup target data organization 2016-02-10 16:58:15 -07:00
Andrew Kelley b642604691 targets command shows which ones are native 2016-02-10 16:35:07 -07:00
Andrew Kelley 1ff2edf67e add "targets" command to list architectures, oses, abis 2016-02-10 15:41:50 -07:00
realazthat 54fbe7560e Added code for generating nonnull attributes 2016-02-05 16:29:26 -05:00
Andrew Kelley b87d0abefe fix debug info for bool type 2016-02-04 14:02:37 -07:00
Andrew Kelley 815d9a7994 fix debug info for arrays being 1 element too short 2016-02-03 02:44:21 -07:00
Andrew Kelley 41b95cc237 parseh: correct debug for forward decls
also C typedefs emit simply `const Foo = Bar;`
since in C you can implicitly cast from a typedef
child to parent but in zig you can't.
2016-01-31 17:48:19 -07:00
Andrew Kelley 32821e7098 add function pointer support
See #14
2016-01-18 16:42:45 -07:00
Andrew Kelley 3a326d5005 pave the road for function pointers
See #14
2016-01-18 08:50:10 -07:00
Andrew Kelley 8d60ffe314 solve the mystery of undefined reference error
big surprise, C++ is to blame
2016-01-15 17:12:26 -07:00
Andrew Kelley 2061cd50c0 resolve enum types and emit debug info 2016-01-11 00:25:17 -07:00
Andrew Kelley fb1e3a5be9 codegen: emit debug metadata for parameters 2016-01-02 20:42:32 -07:00
Andrew Kelley e4cb28dbf2 structs have debug information 2015-12-16 17:11:35 -07:00