Commit Graph

206 Commits

Author SHA1 Message Date
Antoni Boucher
eba654c57a Support more SIMD intrinsics 2022-05-03 17:47:46 -04:00
Antoni Boucher
6bfe2b0b05 Support more SIMD intrinsics 2022-05-03 17:47:46 -04:00
Antoni Boucher
ace3250da8 Fix shuffle_vector 2022-05-03 17:47:46 -04:00
Antoni Boucher
a65418666f Implement simd_select_bitmask 2022-05-03 17:47:46 -04:00
Antoni Boucher
ddc152b04d Add more SIMD 2022-05-03 17:47:46 -04:00
Antoni Boucher
4636c59df5 Add more SIMD 2022-05-03 17:47:46 -04:00
Antoni Boucher
5088fb3d3b Cast arguments in SIMD function 2022-05-03 17:47:46 -04:00
antoyo
852735da05
Merge pull request #171 from GuillaumeGomez/update-intrinsics
Update intrinsics conversion generation
2022-05-03 17:47:03 -04:00
Guillaume Gomez
6e1bf49273 Give priority to intrinsics translations from llvm 2022-05-03 23:00:25 +02:00
Guillaume Gomez
618ba484e9 Handle a syntax corner case where a def does not end with a ; 2022-05-03 23:00:25 +02:00
Guillaume Gomez
f402cfe561 Update intrinsics 2022-05-03 21:24:22 +02:00
Guillaume Gomez
19d8617330 Generate intrinsics translations from llvmint as well 2022-05-03 21:24:14 +02:00
Guillaume Gomez
ed0ba311c5 Update intrinsics 2022-05-03 20:55:55 +02:00
Guillaume Gomez
af9149a1c6 Add tool to generate intrinsics conversion automatically 2022-05-03 18:59:04 +02:00
antoyo
37892fc511
Merge pull request #170 from yvt/fix-internal-load-calls
Use the provided pointee type in `<Builder as BuilderMethods>::load`
2022-05-03 11:33:00 -04:00
yvt
351c683674 Use the given pointee type in <Builder as BuilderMethods>::load
This commit updates this method implementation to return an `RValue` of
the given pointee type.

While this parameter does not seem to have much significance at the
moment, it will likely become important as cg_llvm and cg_ssa migrate to
LLVM opaque pointers and get rid of pointercasts.
2022-05-03 13:53:10 +09:00
yvt
a225f0a66b Pass a pointee type to <Builder as BuilderMethods>::load when calling it ourselves
The parameter name isn't very descriptive, but it actually supposed to
take a pointee type. When calling it ourselves, we've been passing a
*pointer* type, which made it impossible to make any meaningful uses of
this parameter in the method implementation. This commit intends to
rectify that.
2022-05-03 13:53:10 +09:00
antoyo
0405aa0065
Merge pull request #163 from yvt/fix-asm-sym
Add inline assembly `sym` operands as GCC input operands
2022-04-30 10:30:20 -04:00
antoyo
248c1c5e45
Merge pull request #168 from rust-lang/config/no-fmt
Add rustfmt config to disable formatting
2022-04-29 23:18:05 -04:00
Antoni Boucher
dc8da94d56 Add rustfmt config to disable formatting 2022-04-29 23:17:44 -04:00
yvt
63ffdfdd17 Add compilation tests with optimization enabled
Introduces a new variant of `tests/lib.rs` that compiles the source
files in `tests/run` with `-Copt-level=3`.
2022-04-30 09:53:06 +09:00
yvt
5d25b8fc45 Convert inline assembly sym operands into GCC input operands
This commit updates `<Builder as AsmBuilderMethods>::codegen_inline_asm`
to convert `sym` operands into `"X" (&func_or_static)` input operands
to indicate the dependency on the referenced symbols and prevent them
from being eliminated.

We follow the suit of the LLVM codegen with a mixture of its differing
techniques for `asm!` and `global_asm!`. The codegen module generates
input operands for the `sym` operands (as in `asm!` in cg_llvm).
However, the codegen module replaces all placeholders with mangled
symbol names before passing the assembly template string to the backend
(as in `global_asm!` in cg_llvm), which means these input operands are
never referenced in the final assembly template string.

Unlike the LLVM codegen, the input operand constraint must be `X`
instead of `s`. If the `s` constraint is used, GCC will employ checks to
make sure that the operand can really be represented by a simple
symbolic constant, thus rejecting symbols requiring GOT, etc. to
resolve. Such checks are unnecessary for Rust `sym` as it's up to
programmers to handle such complex cases, e.g., by manually appending
GOT addressing modifiers to the substituted symbol names.

Using the `X` constraint doesn't seem to generate any extra code, so
this will not compromise the property of naked functions.
2022-04-25 01:55:36 +09:00
antoyo
1d62e95368
Merge pull request #164 from yvt/no-intel-syntax
Don't emit `.intel_syntax` for non-x86 targets
2022-04-24 12:12:49 -04:00
yvt
a0742bdd06 Don't emit .intel_syntax for non-x86 targets 2022-04-24 13:09:57 +09:00
antoyo
b30a8f31f5
Merge pull request #162 from rust-lang/fix/test-script
Fix test.sh --build
2022-04-23 21:32:20 -04:00
Antoni Boucher
889c402258 Fix test.sh --build 2022-04-23 10:48:12 -04:00
antoyo
4210fd49cb
Merge pull request #160 from MikaelUrankar/master
Don't assume /bin/bash is available on every system.
2022-04-15 11:06:01 -04:00
Mikael Urankar
f92779512d Add set -v as we can't pass command line argument with /usr/bin/env 2022-04-15 09:58:25 +02:00
antoyo
c35f4e841e
Merge pull request #158 from rust-lang/feature/gcc12
Add feature for future libgccjit 12 release
2022-04-14 17:20:34 -04:00
MikaelUrankar
330127599a Don't assume /bin/bash is available on every system. 2022-04-14 14:12:06 +02:00
Antoni Boucher
4d7de81199 Add feature for future libgccjit 12 release 2022-04-13 23:01:01 -04:00
antoyo
d69ada6bf3
Merge pull request #156 from yvt/fix-int-ops
Implement `saturating_{add, sub}` for non-native integer types
2022-04-06 10:14:19 -04:00
yvt
a7a09d556a Wrap numbers with black_box in-line, remove one 2022-04-06 22:11:52 +09:00
yvt
5061e3ad16 Remove redundant assertions 2022-04-06 21:49:54 +09:00
yvt
00677e5159 Implement saturating_{add, sub} for non-native integer types
Updates their unsigned code paths to use the `Builder::gcc_` methods
that automatically lower non-native integer operations to native ones.

Also updates the signed code path of `saturating_add` to support non-
native integer types. That of `saturating_sub` already supports this,
so no major changes have been made.
2022-04-06 01:48:37 +09:00
yvt
837a4467bc test: Test more integer types and checked arithmetic in tests/run/int.rs 2022-04-06 01:25:13 +09:00
yvt
56983cf3c6 test: Remove redundant code from tests/run/int.rs 2022-04-01 12:55:00 +09:00
antoyo
341b9f274b
Merge pull request #153 from GuillaumeGomez/general-intrinsics
Sort archs and make the generate predictable
2022-03-31 10:16:51 -04:00
Guillaume Gomez
035ac03521 Add intrinsics not bound to a specific arch 2022-03-31 14:58:31 +02:00
antoyo
403e198f4a
Merge pull request #154 from rust-lang/fix/error-var-tracking
Fix error related to var tracking assignments
2022-03-31 08:40:18 -04:00
Antoni Boucher
ef1a6d7c23 Fix error related to var tracking assignments 2022-03-31 08:40:05 -04:00
antoyo
dac359504c
Merge pull request #152 from GuillaumeGomez/more-intrinsics
Generate all listed architectures from llvmint
2022-03-30 14:26:27 -04:00
Guillaume Gomez
68ac3a4b3b Generate all listed architectures from llvmint 2022-03-30 18:41:57 +02:00
antoyo
0237d9562d
Merge pull request #151 from GuillaumeGomez/x86-intrinsics
Add intrinsic translation for x86 arch
2022-03-30 12:22:19 -04:00
Guillaume Gomez
3970825b92 Add intrinsic translation for x86 arch 2022-03-30 17:37:33 +02:00
antoyo
f537564454
Merge pull request #148 from rust-lang/feature/packed-struct
Feature/packed struct
2022-03-30 09:55:30 -04:00
antoyo
76cf7c2058
Merge pull request #150 from bjorn3/bootstrap_missing_vendor_intrinsics
Add missing vendor intrinsics
2022-03-30 09:47:12 -04:00
bjorn3
9bb797c2ae Add missing vendor intrinsics 2022-03-30 14:16:02 +02:00
Antoni Boucher
927eea3860 Add support for packed struct 2022-03-29 22:52:25 -04:00
antoyo
a445bcb53d
Merge pull request #149 from rust-lang/missing-comments
Add support for target builtins
2022-03-29 22:51:00 -04:00