Commit Graph

2404 Commits

Author SHA1 Message Date
MerryMage
52b8039367 A32: Implement VFPv5 VRINT{R,Z} 2020-06-22 19:35:32 +01:00
MerryMage
47bc99ad9f asimd_load_store_structures: Fix 2-byte aligned vld1.16
Previously incorrectly undefined
2020-06-22 18:46:22 +01:00
Lioncash
dd8d5497da A32: Implement ASIMD VQRDMULH 2020-06-22 17:31:57 +01:00
Lioncash
0b7a111b54 A32: Implement ASIMD VQDMULH 2020-06-22 17:31:57 +01:00
Lioncash
39488e4aad A32: Implement ASIMD VRSHRN 2020-06-21 23:15:43 +01:00
Lioncash
86b0e5c1c5 A32: Implement ASIMD VQSHRN 2020-06-21 23:15:43 +01:00
Lioncash
85222e3e65 A32: Implement ASIMD VQSHRUN
We can leverage ShiftRightNarrowing() to implement this.
2020-06-21 23:15:43 +01:00
MerryMage
562a98bcf9 A32: Implement ASIMD VCVT (between floating-point and fixed-point) 2020-06-21 20:23:40 +01:00
MerryMage
6f56043a73 A32: Implement ASIMD VFMA, VFMS 2020-06-21 20:21:53 +01:00
Lioncash
aa0358d324 A32: Implement ASIMD VMLAL/VMLSL (integer) 2020-06-21 20:03:19 +01:00
Lioncash
eab26b404a A32: Implement ASIMD VABAL 2020-06-21 20:01:08 +01:00
Lioncash
98581839ca A32: Implement ASIMD VABDL 2020-06-21 19:55:00 +01:00
MerryMage
db85e7ced5 asimd: Add missing three registers of different lengths instructions 2020-06-21 19:54:32 +01:00
Lioncash
95919594d1 A32: Implement ASIMD VQSHL/VQSHLU (immediate) 2020-06-21 19:26:30 +01:00
MerryMage
3557576ece A32: Implement ASIMD AESD, AESE, AESIMC, AESMC 2020-06-21 18:39:57 +01:00
Fernando Sahmkow
2fa1c1d13c A32: Allow cleaning up exclusive state from the interface.
This function is normally required for emulating certain OS mechanisms.
2020-06-21 18:18:33 +01:00
MerryMage
df58a429ee A32: Implement ASIMD VQRSHRN 2020-06-21 17:41:18 +01:00
MerryMage
589d717af5 A32: Implement ASIMD VQRSHRUN 2020-06-21 17:41:18 +01:00
MerryMage
e009d99924 A32: Implement ASIMD VSHRN 2020-06-21 17:41:18 +01:00
MerryMage
473949d486 asimd_load_store_structures: Suppress MSVC shift warning 2020-06-21 17:41:18 +01:00
MerryMage
8f0f1cfd66 A32: Implement ASIMD VST{1,2,3,4} (single n-element structure from one lane) 2020-06-21 16:27:33 +01:00
MerryMage
5a597f415c A32: Implement A32 VLD{1,2,3,4} (single n-element structure to one lane) 2020-06-21 16:22:43 +01:00
MerryMage
f221912409 bit_util: Bits without template arguments 2020-06-21 16:07:59 +01:00
MerryMage
3202e4c539 A32: Implement ASIMD VLD{1,2,3,4} (single n-element structure to all lanes) 2020-06-21 15:25:26 +01:00
MerryMage
d7197745ac emit_x64_vector_floating_point: fpcr_controlled is unused when fsize == 16 in EmitFPVectorToFixed 2020-06-21 14:46:06 +01:00
MerryMage
b32fc5ab0f a64_emit_x64: EmitVAddrLookup: Use bzhi instruction when silently_mirror_page_table is active and BMI2 is available 2020-06-21 14:46:06 +01:00
MerryMage
809dfe9c54 A32: Implement ASIMD VCVT (between floating-point and integer) 2020-06-21 14:28:25 +01:00
MerryMage
43a4b2a0b8 ir_emitter: Remove dummy fpcr_controlled arguments from scalar FP instructions 2020-06-21 14:28:25 +01:00
MerryMage
c836b389c8 emit_x64_vector_floating_point: Add fpcr_controlled argument to all IR instructions 2020-06-21 14:28:25 +01:00
MerryMage
33a81dae68 asimd: VEXT was being shadowed 2020-06-21 13:12:19 +01:00
MerryMage
bf093395d8 A32: Implement ASIMD VMOVN 2020-06-21 12:35:39 +01:00
MerryMage
c7785cd982 A32: Implement ASIMD VUZP and VZIP 2020-06-21 12:34:55 +01:00
MerryMage
603cd09c8f A32: Implement ASIMD VTRN 2020-06-21 12:14:13 +01:00
MerryMage
a8b481ab63 simd_permute: Implement TRN{1,2} in terms of VectorTranspose 2020-06-21 12:14:13 +01:00
MerryMage
7d1e103ff5 IR: Implement VectorTranspose 2020-06-21 12:14:13 +01:00
MerryMage
9cc11681dc A32: Implement ASIMD VMLAL, VMLSL, VMULL (scalar) 2020-06-21 10:31:30 +01:00
MerryMage
69a1d58a2b A32: Implement ASIMD VMULL 2020-06-21 10:00:24 +01:00
Lioncash
8c23f02330 A32: Implement ASIMD VABD 2020-06-21 07:54:21 +01:00
Lioncash
fc1633a2ea A32: Implement ASIMD VABA 2020-06-21 07:54:21 +01:00
Lioncash
bdb92f7055 asimd: Split out VABA/VABD decoders
These differ in bit encodings anyway
2020-06-21 07:54:21 +01:00
Lioncash
230fa02648 A32: Implement ASIMD VMLA/VMLS (scalar)
While we're at it, we can join the implementation of VMUL into a common
function.
2020-06-21 07:51:17 +01:00
MerryMage
239ee289cf A32: Implement VDUP (scalar) 2020-06-21 00:22:42 +01:00
Lioncash
a8efe3f0f5 A32: Implement ASIMD VACGE/VACGT 2020-06-21 00:02:48 +01:00
Lioncash
e319257ec0 A32: Implement VCEQ/VCGE/VCGT (floating point) 2020-06-21 00:02:48 +01:00
Lioncash
faefb264a6 A32: Implement ASIMD VCEQ (integer) 2020-06-21 00:02:48 +01:00
Lioncash
7276993352 A32: Implement ASIMD VCGE (integer) 2020-06-21 00:02:48 +01:00
Lioncash
7292320445 A32: Implement ASIMD VCGT (integer) 2020-06-21 00:02:48 +01:00
MerryMage
fda4e11887 A32: Implement ASIMD VMOV (general-purpose register to scalar) 2020-06-20 23:40:48 +01:00
MerryMage
7ec22b4e1d A32: Implement ASIMD VMOV (scalar to general-purpose register) 2020-06-20 23:30:56 +01:00
MerryMage
8bbc9fdbb6 A32: Implement ASIMD VTBX 2020-06-20 22:35:31 +01:00
Lioncash
06f7229c57 A32: Implement ASIMD VPADAL (integer) 2020-06-20 22:28:47 +01:00
Lioncash
266c6a2000 A32: Implement ASIMD VPADDL (integer) 2020-06-20 22:28:47 +01:00
Lioncash
4bb286ac23 A32: Implement ASIMD VPADD (integer) 2020-06-20 21:22:14 +01:00
Lioncash
1ffeeeb6a2 A32: Implement ASIMD VMAX/VMIN (integer) 2020-06-20 21:20:47 +01:00
Lioncash
945b757b6c A32: Implement ASIMD VMLA/VMLS (integer) 2020-06-20 21:20:21 +01:00
MerryMage
715db8381f A32: Implement ASIMD VMUL (scalar) 2020-06-20 20:34:08 +01:00
MerryMage
b0beecdd41 A32: Implement ASIMD VTBL 2020-06-20 19:25:14 +01:00
MerryMage
28f27bc19d A32: Implement ASIMD VEXT 2020-06-20 19:05:14 +01:00
MerryMage
e8c460c167 A32: Implement ASIMD VDUP (ARM core register) 2020-06-20 16:02:43 +01:00
MerryMage
15ee562dd0 decoder/asimd: Add misc data-processing instructions 2020-06-20 15:39:00 +01:00
MerryMage
92cb4a5a34 A32: Implement ASIMD VRSQRTE 2020-06-20 15:13:22 +01:00
MerryMage
6f59c2cd8e A32: Implement ASIMD VRECPE 2020-06-20 15:07:06 +01:00
MerryMage
d3dc50d718 A32: Implement ASIMD VRSQRTS 2020-06-20 15:06:06 +01:00
MerryMage
8f506c80c3 A32: Implement ASIMD VRECPS 2020-06-20 14:39:05 +01:00
MerryMage
9eef4f7471 A32: Implement ASIMD VMLA, VMLS (floating-point) 2020-06-20 14:31:06 +01:00
MerryMage
60f6e729ac A32: Implement ASIMD VABD (floating-point) 2020-06-20 14:25:04 +01:00
MerryMage
f58e247ef3 A32: Implement ASIMD VPADD (floating-point) 2020-06-20 14:25:04 +01:00
MerryMage
e006f0a205 A32: Implement ASIMD VSUB (floating-point) 2020-06-20 14:20:28 +01:00
MerryMage
4c939b9d0a A32: Implement ASIMD VADD (floating-point) 2020-06-20 14:20:28 +01:00
MerryMage
5ec8e48593 A32: Implement ASIMD VMUL (floating-point)
* Also add fpcr_controlled arguments to FPVectorMul IR instruction
* Merge ASIMD floating-point instruction implementations
2020-06-20 14:20:28 +01:00
MerryMage
bb4f3aa407 A32: Implement ASIMD VMAX, VMIN (floating-point) 2020-06-20 03:21:07 +01:00
Lioncash
8d067d5d60 A32: Implement ASIMD VMUL (integer and polynomial) 2020-06-20 00:53:56 +01:00
Lioncash
ed6ca58058 A32: Implement ASIMD VCEQ, VCGE, VCGT, VCLE, VCLT with zero
Fairly self-explanatory, we can leverage the existing IR functions for
the purpose of these instructions.

In the integer case, we can just insert function pointers
into an array and index it, given all comparison primitives exist
already for the integer side of things.
2020-06-20 00:50:40 +01:00
MerryMage
656419286c ir: Add fpcr_controlled argument to FPVector{Equal,Greater,GreaterEqual} 2020-06-20 00:50:40 +01:00
MerryMage
1b3a70a83c backend/x64: Implement separate MSXCSR for ASIMDStandardValue 2020-06-20 00:00:36 +01:00
MerryMage
d3664b03fe ir_emitter: Default fpcr_controlled arguments to true 2020-06-19 22:51:23 +01:00
Lioncash
794440cf8d A32: Implement ASIMD VRSHL 2020-06-19 21:27:48 +01:00
Lioncash
682621ef1a A32: Implement ASIMD VQSHL (register) 2020-06-19 21:27:48 +01:00
Lioncash
e46fb98cc5 A32: Implement ASIMD VSHL (register) 2020-06-19 21:27:48 +01:00
MerryMage
ad96b2b18d VFPv5: Implement VCVT{A,N,P,M} 2020-06-19 20:31:43 +01:00
MerryMage
6a965b80d6 VFPv5: Implement VRINT{A,N,P,M} 2020-06-19 20:24:13 +01:00
MerryMage
3e252cdbfc VFPv5: Implement VSEL 2020-06-19 19:44:45 +01:00
MerryMage
669d05caca VFPv5: Implement VMINNM 2020-06-19 19:44:45 +01:00
MerryMage
6e7ea151a3 VFPv5: Implement VMAXNM 2020-06-19 19:39:01 +01:00
MerryMage
4df3b2f97f vfp: Add decoders for VFPv5
These instructions were introduced in the Cortex-M7
2020-06-19 19:24:32 +01:00
MerryMage
55c021fe82 emit_x64_aes: AESNI implementations of all opcodes 2020-06-19 12:11:45 +01:00
Lioncash
551e207661 A32: Implement ASIMD VSUB (integer) 2020-06-19 11:31:38 +01:00
Lioncash
4d6f68525d A32: Implement ASIMD VADD (integer) 2020-06-19 11:31:38 +01:00
Lioncash
fbdae61c13 A32: Implement ASIMD VMVN (register)
Fairly straightforward
2020-06-19 11:31:14 +01:00
MerryMage
b759773b3b a32_emit_x64: EmitVAddrLookup: Use 64-bit registers where required 2020-06-19 00:44:52 +01:00
merry
687c604197
Merge pull request #532 from lioncash/shift
A32: Implement several ASIMD shift instructions
2020-06-19 00:22:18 +01:00
MerryMage
7dd9901de2 a32_emit_x64: Incorrect type in ExclusiveWriteMemory 2020-06-19 00:19:46 +01:00
Lioncash
00b2f9b319 asimd: Prevent misdecodes from occurring
Pointed out by Mary when reviewing the shift code.
2020-06-18 15:04:48 -04:00
MerryMage
87f6e412d0 emit_x64_vector: SSE4.1 implementation of EmitVectorPolynomialMultiply{Long}8 2020-06-18 18:44:00 +01:00
MerryMage
f5b41aabc6 emit_x64_vector: Implement EmitVectorPolynomialMultiplyLong64 in terms of pclmulqdq 2020-06-18 18:04:23 +01:00
MerryMage
d34763242c Revert "A32: Implement ASIMD VCEQ, VCGE, VCGT, VCLE, VCLT with zero"
This reverts commit 179951b10f.

These instructions require StandardFPSCRValue.
2020-06-18 17:38:40 +01:00
Lioncash
179951b10f A32: Implement ASIMD VCEQ, VCGE, VCGT, VCLE, VCLT with zero
Fairly self-explanatory, we can leverage the existing IR functions for
the purpose of these instructions.

In the integer case, we can just insert function pointers
into an array and index it, given all comparison primitives exist
already for the integer side of things.
2020-06-18 17:01:57 +01:00
Lioncash
6ca20c2fe3 A32: Implement ASIMD VSLI 2020-06-18 11:51:08 -04:00
Lioncash
887732d8a8 A32: Implement ASIMD VSRI 2020-06-18 11:28:12 -04:00
Lioncash
8b98c91ecc A32: Implement ASIMD VSHL 2020-06-18 11:18:33 -04:00
Lioncash
69c999bc66 A32: Implement ASIMD VRSRA
Now that we have the accumulation and rounding code in place, VRSRA is
extremely trivial to implement.
2020-06-18 11:03:39 -04:00
Lioncash
14fdd15199 A32: Implement ASIMD VRSHR 2020-06-18 11:00:45 -04:00
Lioncash
276e0b71dc A32: Implement ASIMD VSRA 2020-06-18 11:00:27 -04:00
Lioncash
054dff7cd5 A32: Implement ASIMD VTST 2020-06-18 15:34:05 +01:00
Lioncash
6c142bc5cc A32: Implement ASIMD VSHR 2020-06-18 10:30:20 -04:00
MerryMage
13367a7efd A64: Match A32 page_table code
Here we increase the similarity between the A64 and A32 front-ends in terms of their
page_table handling code. In this commit, we:

* Reserve and use r14 as a register to store the page_table pointer.
* Align the code to be more similar in structure.
* Add a conf member to A32EmitContext.
* Remove scratch argument from EmitVAddrLookup.
2020-06-18 12:22:59 +01:00
Lioncash
08350d06f1 A32: Implement ASIMD VQNEG 2020-06-18 09:49:29 +01:00
Lioncash
f6b665f5a4 A32: Implement ASIMD VQABS 2020-06-18 09:49:29 +01:00
MerryMage
b88c291f81 A32: Detect misaligned memory accesses
This avoids issues with misaligned memory accesses writing into the next page.
2020-06-17 17:51:37 +01:00
MerryMage
9f3277540a Merge A32 and A64 exclusive monitors 2020-06-17 10:33:09 +01:00
Lioncash
4b371c0445 A32: Implement ASIMD VREV{16, 32, 64} 2020-06-17 10:21:59 +01:00
Lioncash
6dd2c94095 A32: Implement ASIMD VABS
Very similar to VNEG in that the only thing that differs is the function
called.
2020-06-16 22:42:18 +01:00
MerryMage
53422bec46 a64_emit_x64: Reduce code duplication in exclusive memory code 2020-06-16 18:16:33 +01:00
MerryMage
a1c9bb94a8 A32: Add yuzu-specific hacks 2020-06-16 17:54:21 +01:00
MerryMage
2c1a4843ad A32 global exlcusive monitor 2020-06-16 17:54:21 +01:00
MerryMage
58abdcce5b backend/x64/a32_*: Rename config to conf
Standardize on one name for both a32_* and a64_*.
2020-06-16 14:56:44 +01:00
MerryMage
7ea521b8bf a32_emit_x64: Change ExclusiveWriteMemory64 to require a single U64 argument 2020-06-16 13:32:50 +01:00
MerryMage
aa341b7eea a32_emit_x64: Make ExclusiveWrite a member function of A32EmitX64 2020-06-16 13:03:17 +01:00
MerryMage
34ef5142e3 a32_emit_x64: Specify callback as template argument
Removes unnecessary switch statement.
2020-06-16 10:23:51 +01:00
MerryMage
58b2c83944 a32_emit_x64: Reduce mov code duplication in {Read,Write}Memory 2020-06-16 10:14:06 +01:00
Lioncash
aabd0d824d A32: Add immediate creation helper
Provides the same helper function that exists within the A64 frontend
for creating immediate values.
2020-06-16 09:54:28 +01:00
Lioncash
93ed3441b7 A32: Implement ASIMD VCLS/VCLZ/VCNT 2020-06-16 09:54:28 +01:00
Lioncash
15b3de95e4 A32: Implement VNEG 2020-06-16 01:53:21 +01:00
MerryMage
2796a85096 interface/a32: Remove descriptor argument from Disassemble 2020-06-12 15:27:42 +01:00
MerryMage
3ccc415c52 emit_x64_saturation: Improve codegen for saturated result in EmitSignedSaturation 2020-06-12 15:24:37 +01:00
MerryMage
e953f67201 emit_x64_packed: PackedAbsDiffSumS8: Fix case when bits above the lower 32 bits are not zero 2020-06-12 15:24:09 +01:00
MerryMage
c4cf0b3e47 exception_handler_posix: Just disable fastmem if initialization fails 2020-06-10 22:52:27 +01:00
MerryMage
55bddc767f backend/x64: Touch PEXT/PDEP code
* Use pext/pdep where not previously used
* Limit pext/pdep to non-AMD platforms due to slowness on AMD
* Use imul/and as alternatives for AMD and non-BMI2 platforms
2020-06-10 22:30:22 +01:00
MerryMage
f495018f53 block_of_code: Encapsulate CPU feature detection code 2020-06-09 21:25:57 +01:00
MerryMage
feddf69cb4 emit_x64_crc32: Use same constants 2020-06-06 20:46:09 +01:00
MerryMage
66a356e6cb emit_x64_crc32: Further improvements to codegen 2020-06-06 19:04:20 +01:00
MerryMage
bb203429c6 crc32: Remove unnecessary masking 2020-06-04 20:33:46 +01:00
MerryMage
bcde135c23 emit_x64_crc32: Improve 64-bit PCLMULQDQ implementation of EmitCRC32ISO
Reduce number of PCLMULQDQs to 3
2020-06-04 19:23:51 +01:00
MerryMage
0f9c70ff42 emit_x64_crc32: Improve PCLMULQDQ implementation of EmitCRC32ISO
Remove use of pshufd
2020-06-03 18:55:58 +01:00
MerryMage
fa6aee434e emit_x64_crc32: PCLMULQDQ implementation of EmitCRC32ISO 2020-06-03 11:16:53 +01:00
MerryMage
b47adaee1d emit_x64_vector: SSSE3 implementation of EmitVectorExtract 2020-06-01 15:41:36 +01:00
MerryMage
f3845cea9a A32: Implement ASIMD VQSUB instruction 2020-05-30 18:19:17 +01:00
MerryMage
16ff880f8f A32: Implement ASIMD VQADD 2020-05-30 16:09:37 +01:00
MerryMage
174fbb74c5 simd_three_same: Use VectorSaturated{Signed,Unsigned}{Add,Sub} in SaturatingArithmeticOperation 2020-05-30 15:55:32 +01:00
MerryMage
4e90754873 IR: Implement VectorSaturated{Signed,Unsigned}{Add,Sub} 2020-05-30 15:55:32 +01:00
MerryMage
3a50d444dc A32: Implement ASIMD VHSUB 2020-05-28 22:29:00 +01:00
MerryMage
205e6c5a56 A32: Implement ASIMD VRHADD 2020-05-28 22:29:00 +01:00
MerryMage
946eb03a3b A32: Implement ASIMD VHADD 2020-05-28 22:29:00 +01:00
MerryMage
f8062345bb asimd_two_regs_misc: Use {Get,Set}Vector 2020-05-28 21:05:30 +01:00
MerryMage
11cec1e3b6 asimd_three_same: Use {Get,Set}Vector 2020-05-28 21:05:16 +01:00
MerryMage
7d0b16de32 asimd_one_reg_modified_immediate: Use {Get,Set}Vector 2020-05-28 20:40:26 +01:00
MerryMage
cae857b8c8 verification_pass: Have an appropriate assertion message 2020-05-28 20:40:11 +01:00
MerryMage
ebddf6cca0 basic_block: Allow printing of invalid instruction pointers 2020-05-28 20:39:50 +01:00
MerryMage
07108246cf A32/IR: Add SetVector and GetVector 2020-05-28 20:39:19 +01:00
MerryMage
93c289b54f Use tsl::robin_map and tsl::robin_set
Replace std::unordered_map and std::unordered_set with the above.
Better performance profile.
2020-05-26 20:51:48 +01:00
Lioncash
c4a4bdd7de frontend: Relocate ExtReg handling to types.h
Same behavior, but deduplicates the code being placed across several
files
2020-05-24 23:55:47 +01:00
Lioncash
1900df5340 frontend: Relocate advanced SIMD expansion to a common file
Deduplicates code a little bit.
2020-05-24 23:55:47 +01:00
Lioncash
fc112e61f2 A32: Implement ASIMD modified immediate functions
Implements VBIC, VMOV, VMVN, and VORR modified immediate instructions.
2020-05-24 23:55:47 +01:00
Lioncash
659d78c9c4 A32: Implement ASIMD VSWP
A trivial one to implement, this just swaps the contents of two
registers in place.
2020-05-22 19:43:24 +01:00
MerryMage
d0075f4ea6 print_info: Use LLVM to disassemble A32 2020-05-17 22:30:46 +01:00
MerryMage
c59a127e86 opcodes: Switch from std::map to std::array
Optimization.
2020-05-17 17:01:39 +01:00
MerryMage
d0b45f6150 A32: Implement ARMv8 VST{1-4} (multiple) 2020-05-17 17:01:39 +01:00
Lioncash
eb332b3836 asimd_three_same: Unify BitwiseInstructionWithDst with BitwiseInstruction
Now that all bitwise instructions are implemented, we can unify all of
them together using if constexpr.
2020-05-16 20:22:12 +01:00
Lioncash
f42b3ad4a0 A32: Implement ASIMD VBIF (register) 2020-05-16 20:22:12 +01:00
Lioncash
ee9a81dcba A32: Implement ASIMD VBIT (register) 2020-05-16 20:22:12 +01:00
Lioncash
d624059ead A32: Implement ASIMD VBSL (register) 2020-05-16 20:22:12 +01:00
Lioncash
66663cf8e7 asimd_three_same: Collapse all bitwise implementations into a single code path
Less code and results in only writing the parts that matter once.
2020-05-16 20:22:12 +01:00
Lioncash
4b5e3437cf A32: Implement ASIMD VEOR (register) 2020-05-16 20:22:12 +01:00
Lioncash
67b284f6fa A32: Implement ASIMD VORN (register) 2020-05-16 20:22:12 +01:00
Lioncash
1fdd90ca2a A32: Implement ASIMD VORR (register) 2020-05-16 20:22:12 +01:00
Lioncash
9b93a9de46 a32_jitstate: Remove obsoleted debug assert 2020-05-16 20:22:12 +01:00
Lioncash
64fa804dd4 A32: Implement ASIMD VBIC (register) 2020-05-16 20:22:12 +01:00
Lioncash
0441ab81a1 A32: Implement ASIMD VAND (register) 2020-05-16 20:22:12 +01:00
Lioncash
1b25e867ae asimd_load_store_structures: Simplify ToExtRegD()
ExtReg has a supplied operator+, so we can make use of that instead.
2020-05-16 11:27:22 -04:00
MerryMage
2169653c50 a64_emit_x64: Invalid regalloc code for EmitA64ExclusiveReadMemory128
Attempted to allocate args[0] after end of allocation scope
2020-05-16 14:11:23 +01:00
MerryMage
1a0bc5ba91 A32/ASIMD: ARMv8: Implement VLD{1-4} (multiple) 2020-05-16 14:11:23 +01:00
MerryMage
e7f1a0d408 A32: ARMv8: Implement LDA{,EX}{,B,D,H} and STL{,EX}{,B,D,H} 2020-05-15 21:07:36 +01:00
Lioncash
af3b65b135 decoder_detail: Mark GetMaskAndExpect() as constexpr
Elides quite a bit of code at runtime when constructing the decoding
tables.
2020-05-11 08:29:06 +01:00
MerryMage
59db2c191a VFPv3: Implement VMOV (immediate) 2020-05-10 15:09:37 +01:00
MerryMage
3c86d58064 VFPv4: Implement VCVTB, VCVTT 2020-05-10 14:45:18 +01:00
MerryMage
010fab9a0e VFPv4: Implement VFMA, VFMS 2020-05-10 14:20:11 +01:00
MerryMage
8e97b10acb VFPv4: Implement VFNMS, VFNMA 2020-05-10 14:14:03 +01:00
MerryMage
6df660c889 fuzz_arm: Ensure all instructions are fuzzed
* VFP instructions were not getting fuzzed due to matching coprocessor instructions (as invalid instructions)
* Fix VPOP writeback for doubles when (imm8 & 1) == 1
* Do not accidentally fuzz unimplemented unconditional instructions
2020-05-10 13:57:39 +01:00
MerryMage
9a38c7324f A32: Add decoders for remaining v7 instructions 2020-05-10 10:50:34 +01:00
MerryMage
8b3bc92bce backend/x64: Reduce conversions required for cpsr_nzcv
The guest program often accesses the NZCV flags directly much less
often than we need to use them for jumps and other such uses.

Therefore, we store our flags in cpsr_nzcv in a x64-friendly format.

This allows for a reduction in conditional jump related code.
2020-05-06 22:38:06 +01:00
Fernando Sahmkow
d7abae1e31 A64: Implement Exceptional Exit. 2020-05-03 01:40:37 +01:00
Fernando Sahmkow
41521ed856 User Config: Add option to specify wall clock CNTPCT. 2020-05-03 01:40:37 +01:00
Fernando Sahmkow
97b9d3e058 Exclusive Monitor: Rework exclusive monitor interface. 2020-05-03 01:40:37 +01:00
Fernando Sahmkow
b5d8b24a3c Exclusive Monitor: Allow clearing a single processor. 2020-05-03 01:40:36 +01:00
Fernando Sahmkow
2068658a82 A64 Interface: Allow changing processor id.
This commit allows the JIT to be used per guest thread and change it's
core when the thread is migrated.
2020-05-03 01:40:36 +01:00
MerryMage
24229ab899 constant_propagation_pass: Don't fold add if we nee flags
Results in incorrect flags
2020-04-29 15:33:12 +01:00
MerryMage
e7166e8ba7 constant_propagation_pass: Fold add and sub 2020-04-29 14:16:17 +01:00
MerryMage
dca983803a translate_arm: ConditionPassed: Some instructions emit no microinstructions 2020-04-24 13:12:13 +01:00
MerryMage
94d0d33e02 Fix single stepping for certain instructions
Several issues:
1. Several terminal instructions did not stop at the end of a single-step block
2. x64 backend for the A32 frontend sometimes polluted upper_location_descriptor with the single-stepping flag

We also introduce the enable_optimizations parameter to the A32 frontend.
2020-04-24 11:44:38 +01:00
MerryMage
c9dec5da8c Squashed 'externals/fmt/' changes from 9e554999c..9bdd1596c
9bdd1596c Update version
d151562bd Fix punctuation in changelog
346500e70 Fix gcc version check
a434a8f77 Update changelog
9eb47d951 Fix markup
51c58a56b Bump version
3fc33f627 Update changelog
2e32db5b9 Update changelog
c1ce6e01f Update changelog
1c3c80dc1 Update changelog
d1d653d89 Implement the L specifier
73c843748 Follow naming conventions
e588b02b1 Fix posix-mock-test
1a62711d0 Reduce binary size
5b0288158 Merge branch 'master' of github.com:fmtlib/fmt
a133187a8 Update changelog
80ce222ca Fix wide print overload (#1609)
770a94ede Use FMT_THROW macro where applicable
2864e8432 Update readme and add compatibility option
21a295c27 Undo comment change
96c68afe6 Fix -Wsign-conversion warnings
664dd88e3 Enable FMT_STRING() use with types other than string literals
69779b4ed Fix handling of small precision in general format
01a172c96 Add .vs to .gitignore
08ca40ea9 Detect /utf-8 in MSVC
dd97f4920 Improve exception safety in dynamic_format_arg_store
295116948 Move FMT_USE_FLOAT and friends to fmt/format.h
d3e668418 Allow disabling floating point support (#1590)
52d0e1bbe Don't use properties when setting FMT_LIB_NAME
5d32ccfc3 Add back missing OUTPUT_NAME in target properties. (#1598)
3cf619de5 Simplify dynamic_format_arg_store
2559983e7 Color formatting fixed for wide strings (fixes issue #1594) (#1596)
026f99178 Simplify dynamic store
9f70fc3e7 Minor tweaks for dynamic_format_arg_store
6012dc9ab Dynamic arguments storage. Implementation of enhancement from issue #1170. (#1584)
85050aa2e Ability to join elements of std::initializer_list was added
ff486a72a Allow leading zeros in precision (#1579)
678341275 Deprecate fmt::char8_t
6f01b6ebb Fix a typo in CMake config: STRINGS -> STRING
61c5a5160 Fix handling of empty tuples (#1588)
02bfd8a9a Add FMT_HAS_CPP14_ATTRIBUTE / FMT_HAS_CPP17_ATTRIBUTE to test for language-specific attributes.
3c24052cf Workaround 'cannot call member function without object' error on gcc 4.9
f72a905eb Fix handling of volatile enums
941d5e147 Workaround broken fallthrough attribute in the PGI compiler (#1583)
ee2b828b9 Tweak a comment
5bb885665 Workaround for broken [[deprecated]] in PGI compiler (#1581)
1c0c59d4a Fix empty debug postfix
b1adaa988 Remove gcc 4.4 workaround
48e8d0ebe set_doc -> set_verbose
ce0097915 Cleanup CMake config
db4a6cfbf is_static_compiled_format -> is_compiled_format
29a1ea795 Fix clang -Wdisabled-macro-expansion warning from FMT_STRING_IMPL.
8a06ca84c Fix ambiguous overloads of format & format_to
153f753bd Deprecate undocumented _u suffix
eafd07986 Improve width computation
0c6919ec7 Make FMT_DEBUG_POSTFIX a cache variable (#1566)
197a5c372 Apply clang-format
68742e1d8 Fix clang -Wsign-conversion warning in grisu_count_digits. (#1573)
1e8493196 Make compile-time checks in format_to handle references
58e6c84f5 Fix simple -Wsign-conversion cases. (#1571)
75a4525e5 Move FMT_CLANG_VERSION definition to core.h (#1568)
6ccb2e241 Add FMT_NORETURN to assert_fail prototype. (#1569)
bed134a4a Tentative fix for default template param in friend error
b2d3a86ec Make FMT_ASSERT work in constexpr on clang 4.0.1
13d82e32b Don't use internal GTest API
2161a73f2 Fix FMT_FORMAT_AS const specifier position (#1554)
e00997b00 improved use of find (#1560)
0415cf235 add const begin and end overload to buffer (#1553)
3bafd0749 Fix to_string docs
f733882b5 Remove misleading FMT_USE_WINDOWS_H
dc22360c3 Workaround broken UDL templates in GCC < 6.4
1f1b50707 Make formatter override implicit conversion to a C string
24924128e Fix a link error in gcc8 (#1548)
c54cd7180 only modify CMAKE_RUNTIME_OUTPUT_DIRECTORY if it is not already set
43e9b29e5 Only use compiler features if available
b55ea5870 string_view::char_type -> value_type (#1539)
4098970db Update README.rst
314e15001 Fix symbol visibility on Linux when compiling with -fvisibility=hidden (#1535)
f499b393d Apply coding conventions
6c30f4144 Configure fmt.pc library name correctly.
1acb73f97 Fix formatting std::chrono::duration types to wide strings (#1533)
09a13244c Disallow passing non-string-literals to FMT_STRING
419db8baa Fix length computation of constexpr C strings
9fc4161f5 fix interal compiler error when building with mingw
25d6916b3 Fix so can work without locale defined
0b2eb6501 Add locale example
fd1cabe46 Workaround a bogus MSVC warning
a844d7ab8 Add namespaces
47d396809 Add more examples
7800173eb Update fill docs
b4218aa0f Test invalid fill
8a3a8177d Bump version
e5f2f8ce7 Add variable-width fill support (#1109)
75765bfad Avoid unnecessary unsigned overflows (#1515)
9bd9738da Remove static and simplify names
bd5f903f2 Add a locale example
06e437fd9 Move docs to the proper place
1bd4f54fa update format
11cc2903e re-fix url link
b124e3e8e fix url link
ffd5f3469 Correct display format
0f0e5ddf5 Add vcpkg installation instructions
1f110702a Remove redundant braces
4ccbe4b5f Avoid namespace clash for fmt
40638a75b Use C++11 compatible std::is_same operations
c8dd9cc99 Use type_identity to block unnecessary template argument deduction (thanks Tim Song)
4bbe57ceb Work-around for nvcc
55b613005 Use C++11-compatible operations
ae3ea156e Fix for older versions of intel compiler
77165fdf8 Use FMT_NOEXCEPT instead of noexcept directly
65ac626c5 Improve join docs
cd0b3f969 check if _SECURE_SCL is defined not equal to 0
cef1e4354 Optimize grisu_gen_digits
0201c8db2 Restructure float_format
9e3f3e8cf Fix handling of output iterators in format_to_n (#1506)
aa07c5765 Move vprint_mojibake to the internal namespace
a73d89e9c Catch invalid uses of fmt::arg
cb8e7caf7 Convert 'char8_t' character sequences to 'char' sequences
b3fd0005d Suppress a bogus -Wdouble-promotion warning
7b478f9de Simplify example
c85efef31 More showpoint fixes and tests (#1498)
455a7c078 Clarify lifetime of basic_format_args
674c326d7 Update syntax.rst
061a9897f Update syntax.rst
d2d1c9c56 warning C4267: 'argument': conversion from 'size_t' to 'DWORD', possible loss of data
b6e19e595 Update apidoc
f219dcd59 Add fmt::bytes
dea7fde8b Deprecate u8string_view
5390e29d4 Enable mojibake
9f6434dcd Improve UTF-8 handling on Windows
dac9a7f99 Improve UTF-8 handling on Windows
3ca9533f3 Flatten forward
7eec036d9 Improve UTF-8 support
e6b37b4af Handle block boundaries in utf8_to_utf16
8cf4c5206 Apply clang-format
74532c23a Make type a scoped enum
b308159be Make round_direction a scoped enum
162995fed Add os.h to docs
8b41362a0 Add trailing decimal point if # is specified (#1476)
1b1c70108 trailing_zeros -> showpoint
d7e72a09e Simplify FMT_STRING_IMPL
2201890d7 Apply clang-format and update inclusion guards
6100ed4bb Eliminate NVCC NVidia compiler emits unreachable code warnings
1afe201ae Handle block boundaries in utf8_to_utf16
cd2b99032 Chore(readme): use https (#1481)
9acf89fef Mitigate MSVC issue with min/max macros (#1480)
9ea42fb26 Rename posix-test to os-test
da2569827 posix.cc -> os.cc
35959a31d Move OS-specific APIs to a separate header
ec2463c90 Implement utf8_to_utf16 using utf8_decode
0012917f6 Add a UTF-8 decoder
9e450911f Give an error on precision overflow
068d20bc3 Avoid shadowing warnings in FMT_STRING
a99fbe67b Apply a typo fix retroactively
adbed11ed Fix a typo
8ab1c5c6e Squelch MSVC warning exporting subclasses of runtime_error (fix for PR #1433) (#1470)
a770009fc Improve error reporting
598e6042d warning C4468: 'fallthrough': attribute must be followed by a case label or a default label
e09814dc9 Merge branch 'master' of github.com:fmtlib/fmt
b272fb360 Extend FMT_FALLTHROUGH compatibily to gcc and clang pre-C++17 (#1469)
f94b7364b Update version
7abec071b Update changelog
b7eb8c892 Prepare for the next release
ae7c50185 Reintroduce sprintf_format for ABI compatibility
9f2e7edae Fix handling of types convertible to std::string_view
fd52de0c6 Add FMT_CUDA_TEST CMake option to enable cuda-test
f675cb887 Remove redundant cast
73a16b827 Fix handling of int128_t in format-impl-test (#1461)
72879db40 Clean-up sign-conversion warnings in public headers
d3aa0c3a2 Clean-up sign-conversion warnings in test code
31de9a1b8 Revert "Clean-up sign-conversion warnings in test code"
227bfe62d Clean-up sign-conversion warnings in test code
95dfdc6cc Update README.rst
5916ff63c Update README.rst
1ab80aa92 Fix handling of types with custom formatters that are convertible to std::string_view
4f4d87661 Remove '%' from the docs
f443bd3ba Ditch decimal_formatter (#1363)
1219b65f2 Relax fallthrough attribute detection
071794ec6 Update version
d22e4ad85 Remove trailing comma
983806b0c Update changelog
02af5beb8 Bump version and update changelog
123e7f7fc Revert #1433 because of build failures (#1450)
168460f02 Remove TYPES
a64f60c84 Remove unneeded FMT_API.
1a599117d Export assert_fail with FMT_API. This fixes dll build.
b160123e3 Update ChangeLog.rst
598158856 Fix compilation with MinGW
8bbe76af3 Add a missing decimal point in exponent notation with trailing zeros
4ca6821e8 Update version
7111a1eb9 Bump version
ae00bbdc9 Update changelog
e71e07d9f Update changlog
0184df702 Update docs
1cbae6e9b Put vprint declarations in one place
159f89e2b Fixing installation directory of '*.dll' files on Windows
4b120b68a Clean up includes
186b225d9 Update changlog
4cbf4888e Update changelog
e31f2b3d0 Update changelog
62da1db62 Avoid wchar_t instantiations
3bc28fcc6 Squelch MSVC warning exporting subclasses of runtime_error
3c05fa46c Update changelog
ba6e330fd digits -> num_bits
6037b3cae Fix dangling else problem in FMT_ASSERT
fafb03fa6 Fix handling of fallback_uintptr
2f9acd183 Remove dependency on <cassert>
aaf829bfb Fix fallback pointer formatting on big endian, take 2
b994a0ab1 Fix handling of missing fraction in snprintf_float
bb205d940 Fix fallback pointer formatting on big endian
ef7369ce9 Update docs
40e4c227d Update changelog
ea54b21e7 Remove invalid noexcept annotation
9cbf4b087 Fix -Wconversion warnings
1200a34e1 Update changelog
9c7e2a6c6 Add missing newline
34e921f6f Update docs
c3be0f593 Refactor floating-point formatting
c68703c9f float_spec -> float_specs
9a21728b0 Remove gen_digits_params
3de36e934 Enable -Wswitch-enum in CI
4afb39bc2 Update README.rst
7ffa62db1 Fix precision handling in snprintf_float
0d07db123 Fix handling of streamable and convertible to string types
d19ed6716 Fix hexfloat buffer reallocation
99b6e928d Fix handling of types with deleted rvalue conversion to string (#1421)
57cd3f72e Update comment
111fc127f Remove fp::operator-
6003ec3f2 Simplify Grisu implementation
8877a6772 Instantiate snprintf_float
75fff1db6 Minor cleanup
28d7191c2 Don't print trailing zero with fixed, precision=0, and showpoint (#1417)
43271ba8e Handle null terminator at the end of the buffer
63a9f3fcd fix bad oss fuzz link in the oss-fuzz badge
4cf59ce73 Integrate Grisu and sprintf digit generators
7395472dd Refactor floating-point formatting
9108b25da Merge branch 'float'
4d366c68b Merge branch 'master' of github.com:fmtlib/fmt
ded1e7679 Refactor floating point formatting
c7edd8e57 Cleanup FP formatting
75108a56f Don't print % for nan and inf
3e1f70fe0 Merge write_fp into write
125fc5e52 Update comment
6793ffc1d Update README.rst
f4fcc5fd2 Update README.rst
4de41aa65 Move basic_writer::write_fp to where it belongs
404a880bd Make parse_arg_id more readable
092d2dc7b Merge safe-duration-cast.h into chrono.h
093e55421 Remove redundant qualification
d0696b0aa warning C4456: declaration of 'num_digits' hides previous local declaration
66d7746bb Use grisu for exponent notation
e9bff7881 Don't parse % unless FMT_DEPRECATED_PERCENT is set
57b6f2966 Deprecate the fmt macro
d79493e5e Remove Grisu2
78842ce0d test: add default constructor for a const value
5420bcce2 Make % an opt-in to improve compatibility with std::format
56a2e2075 Refactor float spec parsing
ed117baa4 Replace bool with float_format and add exponential
f26446290 Move float_spec_handler to internal namespace and update asserts
7e1cb3237 Fix indentation
f67783d7e Clarify that numeric alignment is deprecated
1c6d85f7b Apply coding conventions to examples
4a1da44f9 Apply coding conventions to examples
080b6899d Tweak the docs
c01ec54fd Document and clean basic_format_parse_context
b0c2ab93f Bump version
9b7fe2a4a Don't use POSIX API on UWP
c58b7d9c2 Use overridden locale in ostream
ceff9b0b2 Tweak the docs
3dc8639f8 [docs] Added conda
dcde089b4 Improve POSIX API detection
2145a7bdc Move has_formatter into the public fmt namespace. (#1407)
52ae134f8 Remove broken CI config
0d6dd0cc6 Correct basic_string_view from string ctor
1f918159e [clang-tidy] Replace deprecated C headers
6868f888b [clang-tidy] Add missing override
87cd545a1 [clang-tidy] Replace {} with = default
12f9437e2 [clang-tidy] Use auto
bb0c8bfea [clang-tidy] Add noexcept where move is used
e6e829890 [clang-tidy] Add parentheses to macro arguments
0f0848e4f [clang-tidy] Use braced init list
a1fb5c733 [clang-tidy] Changes suffixes to uppercase
8a411c2bc [clang-tidy] Turn deleted function to public
0047dc10a Mark apidoc as rst
263cdef8a Merge branch 'master' of github.com:fmtlib/fmt
d4ca54253 Update docs
5bb7b28e1 Document members
1409dfe76 Try fix CI
f1559e1d5 Use grouping() from locale for specifier 'n'
ffd05e65e basic_parse_context -> basic_format_parse_context per standard and document
0889856d6 Fix UTF-8 truncation
d6eede9e0 Remove redundant ctor
213e09644 Workaround X11 madness (#1388)
6bfc9af8c Add double support to compile
3487f1b9c Always inline grisu_gen_digits and disable grisu2 by default
791294d17 Apply get_cached_power optimization by jk-jeon
8e700619b Simplify format_handler
58c6f8c7f Make unsigned-integer-overflow sanitizer happy (#1377)
40414b344 Don't emit trailing zeros in exponential notation (#1376)
b7a157401 Simplify grisu_writer
7aa58c30b Simplify NVCC checks
8e9bffa98 clang-format
ce4d87acd Remove obsolete comment and clang-format
21acc2af4 Fix more Visual Studio 2019 pedantic warnings (#1371)
00669427d Patch compiler error when building using nvcc
d39ebf3ff Optimize counting
6498bc6d3 Simplify grisu_writer
a967dcbe2 Improve handling of signs
8498bc97d Initialize all the things
e2ea94067 Handle assymetric boundaries
2bc5585ff Fix computing lower boundaries for smallest normalized double
bb728a572 packed_arg_bitsize -> packed_arg_bits and remove packed_arg_mask
36d1390e6 Implement round half to even
599e0aef4 Support single precision floats in grisu formatting
91f7619cc Fix Visual Studio 2019 pedantic warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?)
c4dc6bef2 Apply clang-format
646966e97 Reduce bigint capacity
a5abe5d95 Handle negative exponent and nonnegative power
1cbc5fa6c Handle negative exponent and rename value/pow10 to numerator/denominator
f7a5748fd Partially implement (FPP)^2
0e94b931a Fix a linkage error introduced by #1360 (#1362)
5e58eb97b Implement add_compare
3a15ea3ea Rename write_double to write_fp
b87ac4d84 Distinguish float from double
a927dda9b Use words for packed constants
dd11d4584 Encode types using 5 bits
b55551f90 Implement more comparison operators
96f91428c  Add defaulted copy and move operations to format_error and system_error  (#1347)
b732f28c0 Deduplicate color vformat and vprint
a82c1dc6d use memory_buffer to make color print behave atomic #1348 (#1351)
2730e9018 Fix compile error in printf with gcc9 (#1354)
e4d6d9d7c Implement divmod
a1079e9fd Fix undefined in format-test (#1349)
b66bb6b71 Fix undefined in core-test and printf-test (#1345)
b60114533 Implement more bigint operations
c41cea8b1 Initial implementation of square
0c7650373 Fix handling of types convertible to std::string_view
057101370 Repoint one more Python 2 link to Python 3
d2c9276fc let README point to python 3 instead of 2
0fc7bd157 Fix ambiguity for types with dodgy conversions
b4f1988c4 Provide overload for `fmt::join` that handles `std::tuple`s
4b8f8fac9 Update README.rst
3b2fc033d Making CUDA test work with CMAKE_MSVC_RUNTIME_LIBRARY
ac59d9f3a workaround VS2019 Update 3 compiler bug. (#1328)
8f27ce4d8 add test for multiple compilation types
89b0c71fa fix name clash in header-only mode
f6a783ad2 fix `get`
ccc8f5db0 Disable integral operator<< (#1316)
20fdb88a1 Remove redundant and nonportable test (#1313)
f29901097 Don't use const char* overload of operator<< (#1309)
758446c80 Fix a warning (#1319) and simplify code
f7aedc5fc Fix shared build on Solaris
840a817ed add oss fuzz badge
79c923ba2 fmt.pc.in: Fix for cross compilation
5dc577c06 Update ChangeLog.rst
c6d1a94a9 Fix fallback_format (#1306)
0656045d0 Fix format overload that takes text_style (#1305)
c85ae23c7 Add max_value
b3bf66576 Implement multiplication and part of assignment from pow of 10
0887887e2 Implement left shift
ac71d853b Refactor normalize and clean up
6649b8e0c value -> bigit
56b5c192a Add a bigint stub and reenable grisu
b2f0b6e44 Tweak comment
3d9f3c163 Integrate new format string compilation
19547d514 Update index.rst
972ffd315 Update README.rst
2ed412fa3 Update README.rst
df4dcf2ec Fixed vs 2015 warning about unused variable when grisu is off
f7a4b4ab9 Make numeric alignment optional
611cf0b3c Format octal 0 as 0
58a8f2f53 Add ccache to the list of projects
1882b9687 Reduce the numer of ifdefs with an empty (u)int128_t fallback
6de0454b4 Add support for built-in __int128 when available
16e3c48bb Move definition of FMT_USE_INT128 to core.h
8ce5f680f Rename internal::is_integral and internal::is_arithmetic
2fd8f9ec8 Initial implementation of optimal compile-time formatter generation
fe642d764 Clarify use of the core API in header-only mode (#1296)
a128b5b2c Simplify format string compilation
466128de0 Remove unused code and refactor
22e98a5b6 Make compile work with user-defined types
f18a3f36a Remove string_view_metadata
7cad33563 Refactor format string compilation
e1ab6bc00 Simplify format string compilation
24a88545d Add -Werror to tests
422e7b9d7 Fix compile-time checks for user-defined types (#1292)
d1dd9d532 Document floating-point n specifier (#1291)
9a56a608e Fix warnings (#1288)
c76957565 FixedEnum -> StrongEnum and make it a regression test
200ee6f10 Fix minor clang-tidy warnings
bcd9b9331 Map not int enum to correct underlying_type (#1286)
345ba07f1 Add a CUDA test
9e2490be4 Rename precision parameter
3f75e2b69 Make buffer_range public and update custom formatting docs (#1281)
744302add Workaround broken [[deprecated]] in Intel compiler (#1273)
f5556225a Eliminate shadow variable warning
ad3c7855e Fix typos.
7512a55aa Update version
9bd2f1f9a Temporarily disable Grisu
b9815cf04 Simplify part_counter
fe00cddde Move part counter to the namespace scope
1a7d172dc which_value -> kind
006c2546f Get rid of basic_prepared_format
4ce006fb6 Simplify format string compilation
e2e557e27 Remove preparator
a5f470eb1 Test and fix compiled format_to_n and formatted_size
4070c1d80 PrepareTest -> CompileTest
f8b59251c Remove unused preparator
643aa4c8c Simplify format string compilation
ffe29a92f Get rid of internal::compile
e94d72366 Fix compiled format string version of format_to_n
a9337395a Remove unused variable
562a9f499 Remove parts_container_concept_check
b257c56e5 Fix size types
1488df339 Bump version
b918e3ff8 Fix docopt usage
23b04ca6d Update usage instructions
5d5918a74 Update usage instructions
413d97b33 Fix formatting in changelog
790fd90f4 Update changelog
c0890be77 Update changelog
5a4b24613 Update the default floating-point format docs (#1270)
45dc3486f Update license
5a353fa8c Draft license
c84d227da Update changelog
b2d4ca154 Workaround an issue with std::filesystem::path being an infinitely deep range (#1268)
2aae6b120 Fix doc for importing header only target with CMake
9f09b8eed Fix a warning
2bb8120d9 Fix a warning
c1e97392b Fix warnings
4e99e09bb Fix warnings
1607a0187 Suppress a warning
e8219952c Restrict fmt::compile to literal strings
544b53733 Update changelog
83c13a1fe Update changelog
2546dafec Update changelog
02c04b173 Update changelog
5360ab0b5 Fix iteration over named arguments (#1168)
b615eca96 Update changelog
22a42c0b0 Cleanup compile implementation
c63624ed4 Update changelog
211d31240 Don't terminate on I/O errors in report_error
ef55e74e0 Update changelog
612669d34 Update changelog
ba63ac8c1 Make format_to a non-member
3fe49163b Revert "Make format_to a non-member"
a5bd3ddb2 Make format_to a non-member
3df0ea34e Remove unnecessary overloads
436acf348 Make formatted_size & format_to_n non-members
823128049 Make format a non-member
1dfa2591b Make operator _a constexpr
6f2dd30e3 Simplify udl_formatter return type
431d0f85c Use basic_string_view in non-template UDL
ad71f5a70 Use forwarding references in UDL template
d0f2f3b81 Update usage.rst
eac2796ce Fix locale detection
ee3625746 Internalize format_part
bbf0bada3 Simplify compile
3730b4f03 Cleanup compile implementation
25ff2efc0 Update changelog
9393fe26f prepare -> compile
b48ffc14a Update changelog
3268531bc Workaround a broken C locale on Windows
8bd59ec93 Use fputws for outputting wide strings
1235f0a24 Fix typo in usage.rst
4fb73d114 Update README.rst
f9ceefb0f Fix a warning and is_negative usage
6bcc3fd21 Fix warnings
6a497e1d0 Fix warnings
e9b9b0aef clang-format
ec24342b2 Fix more warnings
230b24944 Fix sign conversion warnings
cadd92d69 Fix #1232.
41076d1de Use `FMT_THROW` in fmt/color.h.
d561cb47a Opt-in macro to enforce use of compile-time format strings
699fe8e71 Remove const qualification in compile-time checks
da2d33f1f Update changelog
af4734fd1 Fix warnings
a3a74672a Update signatures
c11e68305 Update signatures
dd8cc8b0b Disallow passing views as lvalues
f6f0415b8 typedef -> using
c92dc3746 typedef -> using
e3f20d3e1 Remove gcc 4.4 workaround and use proper alias templates (#940)
b43881232 Clean up is_output_iterator
bc15e3700 typedef -> using
cf5ebf205 Cleanup
9c20e72de Cleanup
79209598f core_format_specs -> sprintf_specs
5488d0b53 spec -> specs
e4f84ee1c Refactor format_specs for #1109 and #940
8e0dcd20b Remove old deprecated functions
1d3e3d8c0 Make the 'n' format specifier work with grisu disabled
bc628f8d4 Fix EXPECT_DEBUG_DEATH_IF_SUPPORTED (#1214)
edd13fcc1 Fix small number rounding with fixed precision in grisu
6a031347e Remove unnecessary qualification
bc14c6ee2 Use the decimal point from locale
476f25cd8 Remove ancient gcc workaround
c9d5a08ed Add the 'n' float format specifier
f487ddbdf thousands_sep -> add_thousands_sep
d8fd1699b Make data names follow naming conventions
c286ffc88 int_traits -> uint32_or_64_t
1289782f0 Get rid of add_thousands_sep
2249f5571 Simplify thousands separator handling and cleanup
e76446958 Cleanup and remove deprecated visit
de37de912 Remove deprecated color API
df1a3a141 Remove null_terminating_iterator
78dec87a4 typedef -> using
ded0a3bb3 Internalize undocumented basic_writer
83174f2a1 Refactor ranges
c2e84ee9c Fix FormatTest.StrError on Solaris
2711cb167 Apply clang format and other minor formatting tweaks
ab0ba8a9d Don't emit decimal point if there are no trailing digits (#1210)
bd3fd3bfd clang-format
260c11590 Fix formatting of 0.0 with  (#1210)
9d97201ed add oss-fuzz support
037b84f21 Fix warnings
e37ee419c Export exceptions destructors
e3488fcae Fix Warning
d5d586561 Move strtod_l check to CMake since it's very system-specific
29ef7d31e Fix a warning
af83192d7 Fix warnings
6952732b6 Remove misplaced checks
b97e5d8c2 Remove deprecated fmt/time.h
572b077db Fix warnings
72e519a4b Add formatter<std::string_view>
635e01fe7 Update <format> to the current wording
0e72c9804 Make undocumented output_range internal
f13906f40 back_insert_range<internal::buffer> -> buffer_range
22ddd4b98 Simplify feature checks
bb827341e Add FMT_FUNC where necessary
64c54703d Cleanup
1c3197b8d Fix warnings
fd2292f13 Cleanup checked iterators
4912cff65 Fix handling of mapped types in compile checks (#1200)
463984383 Cleanup
e29708ee5 uintptr -> fallback_uintptr to avoid confusion with uintptr_t
f03a6c532 Cleanup
6c3d584e6 Simplify warning suppression
12f468388 Make iterator_t an alias template
874d6727e Remove workarounds for pre-C++11 compilers
a9940192f Fix warnings
34b541835 Fix warnings
cbbee1b38 Fix handling of hexfloat
92a44db11 Fix warnings
d05d42751 Remove old msvc workaround from arg_formatter_base and fix warning
d32fe0f3f Fix hadling of nullptr
e5422db4b Fix handling of uintptr_t
9d7b64a25 More cleanup
5e293bd97 Remove unnecessary qualification
4a502d980 Add remove_reference_t
d384cdd39 Make is_contiguous_back_insert_iterator internal
32544b610 More cleanup
39f522a13 get_types -> encode_types
d7d2bebf9 Remove redundant typename
9427f15be Fixed issue with formatting to an array of chars
87fbc6f75 get_type -> mapped_type_constant
a48daa60e Remove remove_volatile
afdbbac75 Cleanup
e33fe14f5 Simplify visit
e895da2ec Clean up value
e1a67b528 Remove TODO
a291f07e1 Clean up argument mapping
5d9100fa2 Move char8_t to fmt/core.h
4faadff0a Add preliminary user-defined type support
5d4873359 Clean up value construction
0f0b42861 Cleanup
209db68b2 Get rid of FMT_CONSTEXPR11
cb4c59495 Deprecate convert_to_int
40779749a is_formattable -> has_formatter
b3cf8613b Make formatter specializations override implicit conversions
3fdba0492 Reduce the number of nontrivial formatter instantiations
f5f3ffac5 Merge string make_value overloads
a38b99a18 Fix a regression in named argument handling introduced by prepare
aa31028b2 char_t_impl -> char_t
0787d6974 Simplify SFINAE
bae00aa8d Simplify is_string
388bb389e integral_constant -> bool_constant
7e39c7e6f Put stringy stuff together
3eff8f94d Update docs
469a4bbd3 Use enable_if_t
d2ee5f240 Merge tests
c264e641e Add conditional_t for pre-C++14
4aa0dc578 Fix docs
064ce6b6c Specialize is_char for character types
7893d8539 Clarify why we cannot have nice things
5bafcb437 Add comments about things broken in MSVC
153024255 Fix signature in the docs
eddb84cfc Fix formatting of exotic characters
7e42c65bb Document a more useful to_string_view overload
1e6e87cb7 Update docs
0c6a6e025 Get rid of the FILE* hack and reword apidocs
1653244c6 Fix compilation issue on VS2019 (#1186) (#1191)
d54e64b3c Make buffer_context an alias template
ec6651087 Remove old is_constructible workarounds and replace typedefs with using
4d4b8c238 FMT_CHAR -> char_t
56d2b9110 Install git
89d6c959b Fix cmake link
76ef39fc5 Update vagrant config
af2c73772 Implement parsing of string_views
9df0e2d1f Implement string parsing
5b7bbf885 Revert "FMT_CHAR -> char_t"
4c650057a FMT_CHAR -> char_t
2833c76f2 Move char_t to template param to reduce symbol size
67feef558 Make enable_if_t more std-like and move to fmt namespace
78daa50ff Fix handling of chrono durations with minimal signed rep
87e4ea290 Fix a warning
c56b17029 Add msvc2019 to CI
c929684e3 inlines count_code_points(basic_string_view<char8_t)
f57227a14 FMT_ENABLE_IF -> enable_if_t
634f707f2 Simplify char_t and remove msvc2013 from CI
406e632bd result_of -> invoke_result_t
49f78a427 Demacrify
637bf3c6d Workaround a bug in clang-format
8302c2f33 fmt::internal::declval -> std::declval
d07cc2026 FMT_EXPLICIT -> explicit, FMT_NULL -> nullptr
4a7966c77 Drop gcc 4.4 from CI
9b3c24b99 One weird trick to simplify docs; doxygen hates it
30bce6c14 Fix a few chrono formatting corner cases (#1178)
e5512c5d5 Use static_assert instead of SFINAE in arg(...)
afc571aed Document join and relax its compiler requirements
ad360a62b add gcc 8 c++17 release build
3cf12d7b1 add gcc 8 c++17 build
bb254d146 Disable std-format-test by default
291ba837f Remove wrong compile-time checks from printf (#1173)
01c631af9 Implement unsigned and long long parsing
4fcd4a4bd Reuse parse_format_string in scan
2346779d6 More documentation fixes
afc1a74a6 Minor documentation fixes
ad0eade47 Remove MSVC nonsense
28c187bcd Capitalize titles
91bb3aaf0 fmtlib.net -> fmt.dev
5e7bdf1b9 Clean up vagrant config
570453f27 Add a vagrant config for testing gcc 4.4
ef6282fc4 Fix gcc 4.4 build
e3e470bb6 Remove deprecated format_decimal
67179dbc2 Remove deprecated format_decimal
a5ffa735d Fix gcc 4.4 build
5ee080463 Experiment with scan API
25b72fc4c Move <format> to tests not to confuse users
d179ec5f8 Simplify Grisu
2a9e8b52d Fix advance_to() and begin() using iterator (#1159)
2c77562b1 Fix ambiguous formatter specialization in fmt/ranges.h (#1123)
98b377529 Add support for exotic string_view iterators (#1156)
b488df6cf Fix Grisu3 stopping conditions
f4dfd6e30 Suppress all clang-target-msvc test warning in CMake and other misc fixes (#1151)
a6e8ed15c Disable UDL templates on GCC 9 by default (#1148)
de5da5091 Fix formatting of extreme durations (#1154)
ea2976e6d Move internal::uintptr_t test to format-impl-test (#1152)
77d6036cd Fix unexpected trailing decimal point (#1153)
ccc318e80 Update README.rst
4c8efd694 Update README.rst
d22d11b5f Update README.rst
e9bab6d02 Improve handling of large durations
f52c09f92 Fix format_to_n docs in 5.1.0
118d8bccc Fix compilation error under MSVC 19.21 (#1140)
6828d549e Add FMT_ENABLE_IF_T
3fd134be0  Move test_count_digits to format-impl-test and disable gtest warnings (#1147)
ca7c1f89d Fixed a compile error under MSVC.
ca978b3d2 Fix handling of nan durations
c1d430e61 Improve handling of negative durations
38a85502e Use the same rep type for seconds to prevent overflow
241414028 Eliminate shadowed variable warnings from gcc-7.2
29c10fbf6 Fix DLL visibility of explicit instantiation "declaration" of internal::basic_data<void> in header format.h and the explicit instantiation "definition" in format.cc (#1134)
4a4d72f91 Fix handling of invalid string in chrono formatting
b3cc9c056 Merge remote-tracking branch 'upstream/master' into invalidcolons
2e3352fd0 provoke assertion
4c721e3a2 Fix chrono formatting with invalid argument id (#1132)
8d8ea21c6 Partially implement Grisu3
40a797564 Remove trailing zeros
cb46397df Fix typo
134904c88 Re-enabled constexpr tests
bd516e342 Convert negative precision to zero in printf (#1127)
5efb24dd2 Add specialization test
946498cfb Fix handling of zero precision
6b2086391 fmt::ptr: support unique_ptr and shared_ptr.
d306585a3 Don't inject internal names into std (#1120)
544b92793 Don't detect C compiler
dc94010fa Remove char_traits (#1117)
397e8dd9d clang-format
2b415b7af Restructure printf_arg_formatter to make it customizable
5d755d0a4 Fix handling of volatile char (#1115)
bade46aae Optimize grisu using uint128_t
41fbaeb3b Add <format> test
8bc0adb9b Get rid of obsolete cmake stuff
1763d0e7a Add MongoDB to "Projects using this library"
f569c1ba2 doc fix: time -> chrono
ccd70f59e Workaround bogus unreachable warnings in MSVC
a4969ebe0 Link to fmt(...) docs from index
a6ad29aa3 Update <format>
52eb3fe27 Update <format>
09e2ac5e4 Update <format>
df4ea0c76 Update <format>
718f60acc Fix shadowing warning (#1105) and clang format
aeb5ad3ce Enable [[noreturn]] some.
280839548 basic_buffer -> buffer
6e37c2003 Use compile features cxx_auto_type cxx_variadic_templates instead of cxx_std_11
3de3d76a3 Add compile features for cmake 3.8+
07d5a86a7 Fix warnings
ab1474ef6 Workaround segfault in doxygen and apply clang-format
918ab77ba Try fixing doc build
735b1fadc Only update key on Linux
3c531b735 Fix expired key error when installing with apt
f10a7e2e4 Test exotic pointer formatting
bd8177177 Add support for platforms without uintptr_t
0302927f5 Optimize pointer formatting
bb6842ba3 Simplify to_string
b23c8633f Detect presence of uintptr_t
b588d7f35 Fix a couple of deprecated things.
018d8b57f Remove broken snprintf
1987db663 clang-format
a6d1ad741 handle fwrite results #1098
e979c782d Extend basic_writer with write() method for doubles with optional format_specs argument
9e1531c1e install pkg-config file into libdir
0a66e4cbb Update README.rst
91acfe685 Fix UBSAN warning
b7e6bf967 clang format
da0ea4161 Make compile-time checks work with fallback formatter (#1088)
7ad3015f5 Added missing typename to FMT_STRING. (#1089)
f0b572da0 Update wording test
6d416cf67 Forward declare is_string<FILE*> specializations
b742f622a Create PR template to help agree to the licensing terms (#1083)
02a6f16b5 Update LICENSE.rst
294fd7df9 Remove isinf workaround
17c6900f8 Update docs
0faa968cc Make floating-point formatting locale-independent
bc784d362 Remove isnan workaround
53379dfd0 Don't set CMAKE_BUILD_TYPE if fmt is a subproject (#1081)
76d326a2a Enable grisu for general format
c21c6b8c4 Move enable_if to template params
ec645ca26 Update readme and doxygen config
ae0b0dab9 Remove obsolete TODO
5466a5b41 Document inherited members
9b392a683 Update readme
0fa65cf32 Add example
fdd0149e7 Update readme
e19a95b27 Update readme
ef3927497 Update readme
a7f68dcc0 Update readme
1428b3429 Update readme
97619e27a More fixed precision tests
dd6cc0e6a Merge time-test into chrono-test
a939c7595 Merge fmt/time.h into fmt/chrono.h
17e4b5392 Make chrono formatting work without exceptions (#1062)
a82b3680d More tests and fixed precision fixes
287342dab cmake: default FMT_PKGCONFIG_DIR to a relative path
e28429ee7 Prevent overflow with zero precision
49bbf3c87 Simplify shadowing warning fix
5e5506f83 Update readme
e06523361 Visual Studio 2017: warning C4456: declaration of 'result' hides previous local declaration
ebec00138 Reword licensing part
8daa3c683 Clarify contribution licensing
0d418a8d5 Update and rename CONTRIBUTING.rst to CONTRIBUTING.md
4c66dad8c Refactor digit generation
b1f7cca89 stop -> handler and swap args
f90d33ca1 error_ulp -> error
78c755dc4 Update readme
f23017015 Update readme
ced8aa8c9 Update readme
77d54251f Update benchmark results
1632f72cb Test get_round_direction
8129b9bc4 Test that the library can be compiled witout locales
835087dd0 Add color-test
4523053e6 Fix typos.
8407f4cb2 Round close to zero fixed precision
49d244c06 Don't emit more than precision digits (#1072)
3466d9c84 Don't override fixed formatting depending on exponent (#1072)
93d22dec3 Implement rounding up and clean up FP formatting
d560ddac2 Temporarily disable Grisu for fixed formatting
2d981bb13 Add documentation for '%' format type. (#1071)
d8434baa0 Declare the size of RESET_COLOR.
8f7780a4f Correct comment
2e526a664 Fix handling of output iterator in ranges
79b79f329 Add support for '%' type to output floating point values as a percentage.
287eaab3b Increment output iterator in basic_writer::write for character types (#1056)
a97757736 Use grisu for fixed precision
327d4b6e9 Fixes for some pedantic warnings (#1054)
8af651be3 Implement fixed precision
187bd1b8b Clarify lifetimes of named_arg parameters (#1051)
4e5694fd0 Update arg signature
82c24edcf Workaround a bogus Qt Creator warning
ed138d794 test: assert-test: fix typo in else-branch of EXPECT_DEBUG_DEATH_IF_SUPPORTED
0476a51cb Add Sublime syntax (#1037)
c5aad69f2 Restore deprecated begin()
5b0006476 Make stopping condition configurable in grisu
a44238f2e Improve grisu
83808076e Minor cleanup
9660ea1bf Simplify format string checks
4a9d67636 Gradle 4.10 >> Gradle 5.2
f041f128f Minor cleanup
e4572e5de Update std implementation
442fa1bd4 Decouple format and parse contexts
744e66bb0 Deprecate format_context::parse_context()
d231d68a8 Fix handling of custom context
01f34d0b0 Fix library deprecation warning
9a0a24f90 Test is_streamable with overloaded comma operators
430e6ac9b Protect against overloaded comma operators in decltype
467520e7a Remove unused macro
5a314a528 Eliminate extra copy on floating-point formatting
9989e7f4e Update benchmark results
31510cb43 Fix warnings from Visual Studio
61c9b563c Replace 'std::result_of' by 'std::invoke_result' where possible (#1025)
864b9a220 Correct the comment
153833683 Remove unnecessary checks
22de5a755 Fix warnings from Travis
355eb6d29 Enable grisu for shortest roundtrip (default) formatting
b8d34e0db Fix rounding
e61cac687 Minor grisu improvements
7fbbfed8c Fix warnings caused by usage of deprecated functionality
c3268f4e5 Remove use cases of deprecated functionality
34951f199 Replace comments regarding deprecation with attributes
3f52336e6 Simplify formatter selection
7ca8fc3b1 Fix a bogus warning
5289dd600 Test formatting of special numbers
bf6529f2c Update docs
070061224 Implement 'chrono' formatting specifiers '%Q' and '%q'
06c005b7b Clarify that compile-time checks don't support named arguments
4f6fda558 Add a grisu test stub
9f70b034e Implement precision for floating-point durations.
7cdb1e5e4 Workaround broken is_default_constructible in MSVC
5f1ceebc7 Make formatter<T> override ostream<< for templates (#952)
1b11b000c Update readme
83f052930 Add code from p0645
fdd8e333c Fix compilation with locales disabled (#1011)
dad1eec84 Workaround unimplemented T... on gcc 4.6.x (#1008)
b0cde860a Implement 'snprintf(OutputIt it, size_t n, const S &format, const Args & ... args)' (#917)
e05dfb088 Fix compile errors due to name-hiding and an unused function argument.
dde095fab Revert "Reorder defines"
4a059914a Reorder defines
58b6f8db4 Format the code using clang-format
9a777b9e1 Implemented fmt::prepare()
da55e96f5 Install ninja to fix android build
dc8f8ce4c Fix handling of dynamic width in chrono formatter
f5cc77cea Get rid of 'null_terminating_iterator' in printf.h (#980)
39623a740 Replaced usage of gtest's internal scoped_ptr with unique_ptr.
ae1de3a8d Add support for using text_style in format and vformat directly (#993) * Closes #993
1b8a216dd Improve docs
b3ad759a0 Bump version and correct changelog

git-subtree-dir: externals/fmt
git-subtree-split: 9bdd1596cef1b57b9556f8bef32dc4a32322ef3e
2020-04-23 21:03:34 +01:00
MerryMage
69061d87fa exception_handler_windows: Ignore irrelevant exceptions 2020-04-23 20:58:24 +01:00
MerryMage
5c0bb5cc63 Remove unreachable code (MSVC warnings) 2020-04-23 16:36:34 +01:00
MerryMage
a8a712c801 Relicense to 0BSD 2020-04-23 15:45:57 +01:00
MerryMage
d51a83d265 constant_propagation_pass: Fold IsZero 2020-04-22 21:07:09 +01:00
MerryMage
df1a0eecaf constant_propagation_pass: Fold shifts 2020-04-22 21:07:09 +01:00
MerryMage
7242388577 A64: Specialize arithmetic shift SBFM aliases 2020-04-22 21:07:09 +01:00
MerryMage
a13392e432 A64: Specialize sign-extension SBFM aliases 2020-04-22 21:07:09 +01:00
MerryMage
4573511fe3 constant_propagation_pass: Prepare for IR matchers 2020-04-22 21:07:09 +01:00
MerryMage
0d7476d3ec constant_propagation_pass: Propagate constants across commutative operations
e.g. (a & b) & c == a & (b & c) where b and c are constants
2020-04-22 21:07:09 +01:00
MerryMage
f59b9fb020 IR: Add ReplicateBit microinstruction 2020-04-22 21:07:09 +01:00
MerryMage
93adcfa5c6 value: Add GetInstRecursive 2020-04-22 21:06:18 +01:00
MerryMage
996d5cb841 ir_opt: Add IdentityRemovalPass 2020-04-22 21:06:18 +01:00
MerryMage
2ae68b13ed value: Add IsIdentity function 2020-04-22 21:06:18 +01:00
MerryMage
8db4d65587 A64/decoder: Use a lookup table instead of doing a linear scan 2020-04-22 21:06:18 +01:00
MerryMage
0c51313479 A64: Add enable_optimizations configuration option
Allow library users to disable optimizations for debugging reasons.
2020-04-22 21:06:18 +01:00
MerryMage
8bef1afb9a emit_x64_floating_point: SSE2 implementation for DenormalsAreZero 2020-04-22 21:06:18 +01:00
MerryMage
7c917f1c12 CMakeLists: Add DYNARMIC_FRONTENDS option
Allows library user to select which frontends to enable
2020-04-22 21:06:18 +01:00
MerryMage
668a43f815 A32: Detect unpredictable LDM/STM instructions 2020-04-22 21:06:18 +01:00
MerryMage
cd1560c664 emit_x64: Do not clear fast_dispatch_table unnecessarily
Reduces invalidation overhead
2020-04-22 21:06:18 +01:00
MerryMage
35402a9a17 a64_emit_x64: Fix location descriptor generation in GenTerminalHandlers 2020-04-22 21:06:18 +01:00
MerryMage
2770115757 emit_x64_data_processing: EmitMaskedShift: Use appropriately sized immediates 2020-04-22 21:06:18 +01:00
MerryMage
cc012a830c exception_handler_windows: Do not attempt to call cb when cb isn't callable 2020-04-22 21:06:18 +01:00
MerryMage
4e83e81e58 backend/x64: Add fastmem support to Windows exception handler 2020-04-22 21:06:18 +01:00
MerryMage
b7b71d65c2 backend/x64: Add POSIX exception handler with fastmem support 2020-04-22 21:06:18 +01:00
MerryMage
2d348d2d68 backend/x64: Add macOS exception handler with fastmem support 2020-04-22 21:06:18 +01:00
MerryMage
4636055646 a32_emit_x64: Implement fastmem 2020-04-22 21:06:17 +01:00
MerryMage
f9b9081d4c a32_emit_x64: Fully wrapped memory fallbacks
In the same style as the A64 backend
2020-04-22 21:06:17 +01:00
MerryMage
ad52c997f4 a32_emit_x64: Use r14 for page_table pointer 2020-04-22 21:06:17 +01:00
MerryMage
49fcfe040c reg_alloc: Explicitly specify GPR and XMM order
This allows each backend to modify what registers they want to use and their preferred orderings
2020-04-22 21:06:17 +01:00
MerryMage
c232ad7971 a32_emit_x64: Make {Read,Write}Memory member functions of A32EmitX64 2020-04-22 21:06:17 +01:00
MerryMage
5267dbb8cf emit_x64_saturation: Prefer changeBit to setBit 2020-04-22 21:06:17 +01:00
MerryMage
9d60d92692 backend/x64: Make ExceptionHandler its own class 2020-04-22 21:06:17 +01:00
MerryMage
325808949f backend/x64: Rename namespace BackendX64 -> Backend::X64 2020-04-22 21:06:17 +01:00
MerryMage
f569d7913c block_of_code: Reduce jmps in dispatcher loop 2020-04-22 21:06:17 +01:00
MerryMage
7e0c415473 block_of_code: Always specify codeptr to run from 2020-04-22 21:06:17 +01:00
MerryMage
b6536115ef A32: Add Step 2020-04-22 21:06:17 +01:00
MerryMage
f69c77391e A64: Add Step
Allow for stepping instruction-by-instruction
2020-04-22 21:06:17 +01:00
MerryMage
09d3c77d74 IR: Add masked shift IR instructions
Also use these in the A64 frontend to avoid the need to mask the shift amount.
2020-04-22 21:06:17 +01:00
MerryMage
bd88286b21 cast_util: Add FptrCast
Reduce unnecessary type duplication when casting a lambda to a function pointer.
2020-04-22 21:06:17 +01:00
MerryMage
fe583aa076 lut_from_list: Reduce number of required template arguments 2020-04-22 21:06:17 +01:00
MerryMage
81fcb4e537 mp: Migrate to shared version of mp library 2020-04-22 21:06:17 +01:00
MerryMage
28e5af20b5 mp/function_info: Add parameter_count_v 2020-04-22 21:04:24 +01:00
MerryMage
aa225a7dc4 bit_util: Add CountLeadingZeros 2020-04-22 21:04:24 +01:00
MerryMage
25e27282e3 a64_emit_x64: Reduce patchpoint sizes 2020-04-22 21:04:23 +01:00
MerryMage
a59c335b05 A64: Add options for detecting misaligned loads and stores 2020-04-22 21:04:23 +01:00
Marshall Mohror
1ebc1895ee A32/x64: Create a global_offset optimization for the page table (#507)
Instead of looking up the page table like:
  table[addr >> 12][addr & 0xFFF]
We can use a global offset on the table to query the memory like:
  table[addr >> 12][addr]

This saves two instructions on *every* memory access within the recompiler.

Original change by degasus in A64 emitter
2020-04-22 21:04:23 +01:00
MerryMage
e10985d179 ir/basic_block: Add FastDispatchHint to TerminalToString
Use a boost::static_visitor to ensure this is caught at compile-time in the future.
2020-04-22 21:04:23 +01:00
Lioncash
af3614553b A64/impl: Move AccType and MemOp enum into general IR emitter header
These will be used by both frontends in the future, so this performs the
migratory changes separate from the changes that will make use of them.
2020-04-22 21:04:23 +01:00
Markus Wick
93668c24be A64/x64: Create a global_offset optimization for the page table.
Instead of looking up the page table like:
  table[addr >> 12][addr & 0xFFF]
We can use a global offset on the table to query the memory like:
  table[addr >> 12][addr]

This saves two instructions on *every* memory access within the recompiler.

Thanks at skmp for the idea.
2020-04-22 21:04:23 +01:00
MerryMage
6325ac23eb a32_emit_x64: Use std::get_if in EmitA32Coproc* 2020-04-22 21:04:23 +01:00
MerryMage
39bd2c034d constant_propagation_pass: Handle GetCarryFromOp for MostSignificantWord 2020-04-22 21:04:23 +01:00
MerryMage
ada66d7092 a32_interface: Remove unused TransferJitState function 2020-04-22 21:04:23 +01:00
MerryMage
b4884a51e0 a32_jitstate: Only transfer required state
Importantly, reset exclusive state upon transfer.
2020-04-22 21:04:23 +01:00
MerryMage
1aa7b62e92 A32/Thumb: Correct behaviour for UDF and Unpredictable instructions
Raise an exception instead of calling the interpreter and ASSERT-ing respectively.
2020-04-22 21:04:23 +01:00
MerryMage
c7d20f3f2f fuzz_arm: Test MSR and MRS instructions against unicorn
* Add always_little_endian option to mach unicorn behavior.
* Correct CPSR.Mode = Usermode
2020-04-22 21:04:23 +01:00
MerryMage
2f06ef5d4e a32_emit_x64: EmitA32SetCpsr: BUGFIX: Actually set CPSR.GE
Was unintentionally masking the writing of CPSR.GE due to 32-bit immediate sign extension.
2020-04-22 21:04:23 +01:00
MerryMage
0a6f822d76 a32_emit_x64: GenTerminalHandlers: Remove unnecessary mov 2020-04-22 21:04:23 +01:00
MerryMage
717bd2fbb2 A64: Add hook_hint_instructions option 2020-04-22 21:04:23 +01:00
MerryMage
396116ee61 A32: Add hook_hint_instructions option 2020-04-22 21:04:23 +01:00
MerryMage
2f2a859615 a32_jitstate: Consolidate upper bits of location descriptor into upper_location_descriptor
Also solves a performance regression initially introduced by b6e8297e369f2dc4758bafe944e51efb8d1a2552,
primarily due to excessively mismatched load/store sizes causing less than optimal load-to-store forwarding.
2020-04-22 21:04:23 +01:00
MerryMage
e41a7dc678 CMakeLists: Temporarily remove export
Unable to export fmt in projects that have DYNARMIC_NO_BUNDLED_FMT enabled
2020-04-22 21:04:22 +01:00
Merry
1c97edac77 Merge pull request #503 from lioncash/cmp
A64: Implement half-precision variants of FCMEQ
2020-04-22 21:04:22 +01:00
Merry
f252a62c1b Merge pull request #502 from lioncash/header
General: Remove unnecessary includes
2020-04-22 21:04:22 +01:00
Lioncash
11d1114a17 A64: Implement all half-precision variants of FCMEQ 2020-04-22 21:04:22 +01:00
Lioncash
22bd95902d backend/x64/reg_alloc: Apply const where applicable
Also tidies up bracing where applicable along the way.
2020-04-22 21:04:22 +01:00
Lioncash
349d4b577a General: Remove unnecessary includes
Removes unnecessary header dependencies that have accumulated over time
as changes have been made. Lessens the amount of files that need to be
rebuilt when the headers change.
2020-04-22 21:04:22 +01:00
Lioncash
43fd2b400a frontend/ir_emitter: Add half-precision opcode for FPVectorEquals 2020-04-22 21:04:22 +01:00
Lioncash
cba9351b82 backend/x64/emit_*: Apply const where applicable 2020-04-22 21:04:22 +01:00
Lioncash
557a01a787 common/fp/op: Add soft-float implementation of FPCompareEQ
This will be used to implement the half-precision floating-point
variants of FCMEQ in following changes.
2020-04-22 21:04:22 +01:00
Lioncash
dd315e89eb A64/translate/*: Apply const where applicable
Just some tidying up for consistency
2020-04-22 21:04:22 +01:00
Lioncash
d9d59bc1f4 common/cast_util: Declare BitCast and BitCastPointee with the noexcept specifier
std::bit_cast is also defined with the noexcept specifier, so we can do
the same here to match up with it and stay similar with the standard
library.
2020-04-22 21:04:22 +01:00
Lioncash
4f47861669 A64/translate/impl: Mark DecodeBitMasks and AdvSIMDExpandImm as static
These don't rely on instance state to perform their behavior. They're
just helper functions.
2020-04-22 21:04:22 +01:00
Lioncash
dddba94c17 disassembler_arm: Apply const where applicable 2020-04-22 21:04:22 +01:00
Lioncash
9365487797 frontend/A32/ir_emitter: Remove unnecessary includes
std::initializer_list isn't used anywhere in here, and we can just
forward declare the CoprocReg enum to avoid needing to include the
header.
2020-04-22 21:04:22 +01:00
Lioncash
23f56bdb67 x64/exception_handler_windows: Join namespace declaration
Uses a nested namespace declaration like the rest of the codebase.
2020-04-22 21:04:22 +01:00
Lioncash
3bbb06c34a a64_emit_x64: Apply [[maybe_unused]] to unused lambda parameter
This can result in an unused variable warning on Windows otherwise.
2020-04-22 21:04:22 +01:00
Lioncash
bfa8035414 A32/A64: Make public header inclusions consistent
For all public header inclusions, we use the <> form of including them
as opposed to "", which we typically use for internal headers.
2020-04-22 21:04:22 +01:00
Lioncash
ccf923305c a32_interface: Remove duplicated documentation comments
These already exist in the header, so these ones can be removed.
2020-04-22 21:04:22 +01:00
Lioncash
fb7d33830c A32: Make includes consistent
Normalizes includes to be relative to the project root, like the rest of
the includes in the project.
2020-04-22 21:04:22 +01:00
Lioncash
b57ed8917a frontend/A32/types: Remove redundant std::string initializer
std::string initializes to empty by default. While we're at it, brace a
lone unbraced if statement.
2020-04-22 21:04:22 +01:00
Lioncash
25b4e463d3 ir_opt/a64_get_set_elimination_pass: Remove redundant return
This lambda function has a void return type, so we don't need to
explicitly return at the end of it.
2020-04-22 21:04:22 +01:00
Lioncash
182ceb2807 General: Make parameter names from declarations and implementations consistent
Most of the time when this occurs, it's a bug. Thankfully this isn't the
case. However, we can resolve these cases to make the codebase more
consistent.
2020-04-22 21:04:22 +01:00
MerryMage
3513ed1c60 CMakeLists: Define FMT_USE_USER_DEFINED_LITERALS=0
This disable a fmtlib feature that depends on a non-standard feature
for its implementation.
2020-04-22 21:04:22 +01:00
Lioncash
b301fcd520 A32/translate/translate: Add missing doxygen parameter string 2020-04-22 21:04:22 +01:00
Lioncash
44b61212e5 Revert "CMakeLists: Handle DYNARMIC_NO_BUNDLED_FMT in relation to export()"
I was being silly. This isn't required.

This reverts commit 00b79cbb72c61744470e0aa1a96b673702b33931.
2020-04-22 21:04:22 +01:00
Lioncash
6b9bf7868a General: Correct typos is code comments 2020-04-22 21:04:22 +01:00
Lioncash
acd7ac5ed3 CMakeLists: Handle DYNARMIC_NO_BUNDLED_FMT in relation to export()
This is pretty gross, but until DYNARMIC_NO_BUNDLED_FMT is eliminated,
this fixes the use of it in existing libraries or applications making
use of dynarmic.
2020-04-22 21:04:22 +01:00
Lioncash
6187de7ca7 a32_interface: std::move UserConfig where applicable
UserConfig instances contain up to 16 std::shared_ptr<Coprocessor>
instances. We can std::move here to avoid performing 16 redundant atomic
reference increment and decrement operations.

Mostly inconsequential on x64, but we may as well signify intent.
2020-04-22 21:04:22 +01:00
MerryMage
7d20f3b861 A32/translate_thumb: Split off implementation into thumb16 and thumb32 2020-04-22 21:04:22 +01:00
Lioncash
b79ce71b0f ir/basic_block: std::move Terminal within SetTerminal and ReplaceTerminal
A terminal isn't a trivial type (and boost::variant is allowed to heap
allocate), so we can std::move it here to avoid a redundant copy.
2020-04-22 21:04:22 +01:00
MerryMage
e639aa1583 A32/translate: Rename translate_arm directory to impl
Mirror what the A64 frontend does.
2020-04-22 21:04:22 +01:00
Lioncash
63eff4e7cc ir/terminal: std::move constructor parameters where applicable
Allows the compiler to choose the most suitable code in this scenario,
given a Terminal isn't a trivial type.
2020-04-22 21:04:22 +01:00
Lioncash
b13b6610b5 a32_interface: Default destructor in the cpp file
Makes it more consistent with code throughout the codebase.
2020-04-22 21:04:22 +01:00
MerryMage
5f8eb7c51c A32/location_descriptor: Add CPSR.IT to A32::LocationDescriptor 2020-04-22 21:04:22 +01:00
MerryMage
13f65f55eb PSR: Use Common::ModifyBit{,s} 2020-04-22 21:04:22 +01:00
MerryMage
74633301c1 A32: Add ITState 2020-04-22 21:04:22 +01:00
MerryMage
6e2cd35e4f a32_jitstate: Optimize runtime location descriptor calculation
Calculation is now one unaligned 64-bit load.
2020-04-22 21:04:22 +01:00
MerryMage
0de3993373 a32_jitstate: Remove fpsr_idc
We do not really have accurate FPSR state in any case.
2020-04-22 21:04:22 +01:00
MerryMage
6f49c0ef8e {a32,a64}_jitstate: Rename CPSR_* to cpsr_* 2020-04-22 21:04:22 +01:00
MerryMage
8cd7837839 a32_jitstate: Remove old_FPSCR 2020-04-22 21:04:22 +01:00
MerryMage
b3bb544bca a32_jitstate: Rename FPSCR_nzcv to fpsr_nzcv 2020-04-22 21:04:22 +01:00
MerryMage
76f986979d a32_jitstate: Rename FPSCR_mode to fpcr_mode 2020-04-22 21:04:22 +01:00
MerryMage
49fca15f90 {a32,a64}_jitstate: Rename FPSCR_IDC to fpsr_idc 2020-04-22 21:04:21 +01:00
MerryMage
622c02f537 {a32,a64}_jitstate: Remove FPSCR_UFC 2020-04-22 21:04:21 +01:00
MerryMage
366d63f4b4 a32_jitstate: Enable SSE FTZ and DAZ 2020-04-22 21:04:21 +01:00
MerryMage
f178562ee7 a32_jitstate: Remove exception trap enables from FPSCR_MODE_MASK
We don't currently use this for anything (we do not currently trap
floating point exceptions).

This frees these bits up for other purposes.
2020-04-22 21:04:21 +01:00
Merry
fd6222f0a1 Merge pull request #500 from lioncash/cbz
A32: Implement Thumb-1's CBZ/CBNZ instructions
2020-04-22 21:04:21 +01:00
Merry
bab4e29075 Merge pull request #498 from lioncash/ahp
A32/location_descriptor: Add AHP bit to the FPSCR mask
2020-04-22 21:04:21 +01:00
Lioncash
2d695e3c7c common/fp/info: Make formatting of FPInfo struct member functions consistent
Orgranizes the functions to all be consistent with the half-precision
specialization.
2020-04-22 21:04:21 +01:00
Lioncash
05b330906e common/fp/util: Make ProcessNaN utility functions constexpr
Nothing in particular prevents these from being constexpr. Do so to make
them consistent with the bulk of other functions in this header that are
constexpr.
2020-04-22 21:04:21 +01:00
Lioncash
6b9a40bdc4 common/fp/op/FPNeg: Make FPNeg constexpr
Negation in (standard IEEE) floating-point is simply flipping the sign-bit, so this
operation will never be more complex than what is presented here, making
constexpr a reasonable allowance.
2020-04-22 21:04:21 +01:00
Lioncash
ef95e0fa7d CMakeLists: Add FPNeg.h to the library target sources
Ensures that the header shows up in IDE generated projects.
2020-04-22 21:04:21 +01:00
Lioncash
87083af733 general: Remove trailing spaces
General code-related cleanup. Gets rid of trailing spaces in the
codebase.
2020-04-22 21:04:21 +01:00
Lioncash
fdbafbc1ae x64/reg_alloc: Remove reference qualifier to variable in GetArgumentInfo()
The result of GetArg() is returned by value, so this is essentially
still a copy. While the previous code *is* valid, this communicates what
is actually happening a little more explicitly.
2020-04-22 21:04:20 +01:00
Lioncash
1f6878fb46 ir_opt/verification_pass: Add include for std::puts
Ensures that the header dependency is always satisfied directly, and not
through other project headers. While we're at it, we can qualify the
call with the std:: namespace.
2020-04-22 21:03:38 +01:00
Lioncash
fc9c59d056 ir_opt/verification_pass: Eliminate redundant GetArg()
Given the same argument is used inside the condition's body if it's
true, we can just utilize the local to cut out a GetArg() operation.
Avoids redundant internal assertion checking.
2020-04-22 21:03:35 +01:00
Lioncash
03e6899fd7 A32: Implement Thumb-1's CBZ/CBNZ instructions
Introduced in ARMv6T2, this allows for short forward branches.
2020-04-22 21:02:47 +01:00
Lioncash
d02a4e6fc9 A32/location_descriptor: Add AHP bit to the FPSCR mask
Ensures the alternate half-precision state is preserved within the
location descriptors, which will be necessary when implementing the
half-precision extensions for VFP and NEON.
2020-04-22 21:02:47 +01:00
Merry
f4990a5f6b Merge pull request #499 from lioncash/movw
A32: Implement ARM-mode MOVW
2020-04-22 21:02:47 +01:00
Lioncash
bd755ae494 frontend/ir/ir_emitter: Add A32 equivalent to A64's SetCheckBit
This will be used in a subsequent change to implement ARMv6T2's CBZ/CBNZ
Thumb-1 instructions.
2020-04-22 21:02:47 +01:00
Lioncash
c6e1fd1416 a64_emit_x64: Use const on locals where applicable
Normalizes the use of const in the source file.
2020-04-22 21:02:47 +01:00
Merry
f6f0b6da65 Merge pull request #497 from lioncash/boost
A32/coprocessor: Remove boost from public interface
2020-04-22 21:02:47 +01:00
Lioncash
106c8c2473 A32: Implement ARM-mode MOVW
Introduced to the ISA in ARMv6T2
2020-04-22 21:02:47 +01:00
Lioncash
fb437080be a32_emit_x64: Use const on locals where applicable
Normalizes the use of const in the source file.
2020-04-22 21:02:47 +01:00
Lioncash
9935f3aa28 A32: Implement Thumb-1 variant of SEVL
While we're at it, also add the Thumb-2 encoding to the encoding table
to make sure it isn't forgotten about in the future.
2020-04-22 21:02:47 +01:00
Lioncash
5f9ba970b9 emit_x64: Use const on locals where applicable 2020-04-22 21:02:47 +01:00
Lioncash
92daae9513 A32/coprocessor: Remove boost from public interface
Removes a boost header from the public includes in favor of using the
standard-provided std::variant.

The use of boost in public interfaces is often a dealbreaker for some
people. Given we use std::optional in the header already, we can
transition over to std::variant from boost::variant.

With this removal, this makes all of our dependencies internal to the
library itself.
2020-04-22 21:02:47 +01:00
Lioncash
9a097e307f A32: Implement the ARM-mode variant of SEVL 2020-04-22 21:02:47 +01:00
Lioncash
a40b921cb5 emit_x64: Remove unnecessary typename in GetBasicBlock()
This can be deduced from the name alone.
2020-04-22 21:02:47 +01:00
Lioncash
e89ca42048 A32: Implement Thumb-1 variant of YIELD 2020-04-22 21:02:47 +01:00
Lioncash
675f67e41d emit_x64_vector: Use const on locals where applicable
Normalizes the use of const in the source file.
2020-04-22 21:02:47 +01:00
Lioncash
ebab7ede55 A32: Implement Thumb-1 variant of WFI 2020-04-22 21:02:47 +01:00
Lioncash
cccbc7fd0e emit_x64_saturation: Use const on locals where applicable
Normalizes the use of const in the source file.
2020-04-22 21:02:47 +01:00
Lioncash
b4110af22a A32: Implement Thumb-1 variant of WFE 2020-04-22 21:02:47 +01:00
Lioncash
7316fa47b3 emit_x64_packed: Use const on locals where applicable
Normalizes the use of const across the source file.
2020-04-22 21:02:47 +01:00
Lioncash
3a9c2f81d0 block_of_code: Use variable template variants of type traits
Now all type traits are using the variable template variants where
applicable.
2020-04-22 21:02:47 +01:00
Lioncash
57675fe592 A32: Implement Thumb-1 variant of SEV 2020-04-22 21:02:47 +01:00
Lioncash
9b783a5527 emit_x64_data_processing: Use const on locals where applicable
Normalizes the use of const across the source file.
2020-04-22 21:02:47 +01:00
Lioncash
07699b47ba A32/translate_thumb: Add helper function for raising exceptions
Similar to the variant within the ARM-mode translator visitor. This will
be used in subsequent changes to implement the hint instructions
introduced in ARMv7.
2020-04-22 21:02:47 +01:00
Lioncash
f74762ae4e frontend/decoder/decoder_detail: Replace std::is_same, with std::is_same_v
Same thing, same readability, less characters.
2020-04-22 21:02:47 +01:00
Lioncash
64879396f6 A32: Implement Thumb-1 variant of NOP 2020-04-22 21:02:47 +01:00
Merry
6a67da1225 Merge pull request #493 from lioncash/ir
frontend/ir/ir_emitter: Remove unnecessary logical shift overloads
2020-04-22 21:02:47 +01:00
Merry
81b908b077 Merge pull request #495 from lioncash/bkpt
A32: Implement Thumb-16's variant of BKPT
2020-04-22 21:02:47 +01:00
Merry
30d28029a8 Merge pull request #492 from lioncash/vfp
A32: Rename vfp2-related files to vfp
2020-04-22 21:02:47 +01:00
Merry
c4fb7cf540 Merge pull request #494 from lioncash/pldw
A32: Handle PLDW
2020-04-22 21:02:47 +01:00
Lioncash
b17a5d3365 A32: Implement Thumb-16's variant of BKPT 2020-04-22 21:02:47 +01:00
Lioncash
b902f72001 A32/disassembler_arm: Remove <unimplemented> from hint instruction output
Given we now support hooking these hint instructions, we can consider
them implemented.
2020-04-22 21:02:47 +01:00
Lioncash
0fa0bca22a A32: Handle different variants of PLD 2020-04-22 21:02:47 +01:00
Lioncash
c6f99235e1 frontend/ir/ir_emitter: Remove unnecessary logical shift overloads
These aren't necessary anymore, now that the U32U64 overload already
exists.
2020-04-22 21:02:46 +01:00
Merry
9ba503e394 Merge pull request #491 from lioncash/hint
A32: Allow hooking of hint instructions in ARM mode.
2020-04-22 21:02:46 +01:00
Lioncash
97277c598b A32: Rename vfp2-related files to vfp
Now that we fuzz against Unicorn, we aren't just restricted to VFPv2.
VFPv3 and VFPv4 facilities can now be implemented. This renames
constructs mentioning VFPv2 to just refer to VFP.
2020-04-22 21:02:46 +01:00
Lioncash
8c3122ff46 A64/translate/impl/impl: Mark locals const where applicable in DecodeBitMasks()
Follows the convention of making immutable state explicit.
2020-04-22 21:02:46 +01:00
Merry
a132b56d57 Merge pull request #490 from lioncash/crc32
A32: Implement ARM-mode CRC32 instructions
2020-04-22 21:02:46 +01:00
Lioncash
966e04d03d A32: Allow hooking of hint instructions in ARM mode.
Mirrors the hooking functionality from the AArch64 frontend to make the
behavior of both consistent.
2020-04-22 21:02:46 +01:00
Lioncash
134b586c5c frontend/ir/ir_emitter: Amend arguments to conversion opcodes
Accidentally caused within 967d1fcc8d6f60749a162a96b997439450fed687.
That one's on me. My bad.
2020-04-22 21:02:46 +01:00
MerryMage
5debb411cc block_of_code: Explicitly delete copy constructor 2020-04-22 21:02:46 +01:00
Lioncash
e37689315d A32: Implement ARM-mode CRC32 instructions
Implements the ARM-mode variants of the CRC32 instructions introduced
within ARMv8. This is also one of the instruction cases where there is
UNPREDICTABLE behavior that is constrained (we must do one of the
options indicated by the reference manual).

In both documented cases of constrained unpredictable behavior, we treat
the instructions as unpredictable in order to allow library users to
hook the unpredictable exception to provide the intended behavior they
desire.
2020-04-22 21:02:46 +01:00
Lioncash
95d9baea67 {A32, A64}/types: Use std::array deduction guides where applicable
We also make the arrays static here, as MSVC tends to load the whole
array every time the function is called, instead of storing the data
within rodata.

This also line breaks the elements a little earlier for readability.
2020-04-22 21:02:46 +01:00
MerryMage
605a43d23e Suppress MSVC warning C4702: unreachable code 2020-04-22 21:02:46 +01:00
Lioncash
bac945f2d8 A32: Resolve parameter discrepancies discovered via use of the Imm template 2020-04-22 21:02:46 +01:00
Lioncash
e4c65721fe frontend/ir/type: Generify std::array declaration
With deduction guides, we can eliminate the need to explicitly size the
array. Also newlines the elements based off their relation, making it
slightly nicer to read.
2020-04-22 21:02:46 +01:00
Lioncash
4ba2318b2e A32: Replace immediate type aliases with the Imm template
Replaces type aliases of raw integral types with the more type-safe Imm
template, like how the AArch64 frontend has been using it.

This makes the two frontends more consistent with one another.
2020-04-22 21:02:46 +01:00
Lioncash
f01dc9192a CMakeLists: Add a namespace to the export
Avoids potentially dumping boost, fmt, and xbyak targets into a
top-level namespace without any qualification, which can lead to build
errors in projects that already make use of them.
2020-04-22 21:02:46 +01:00
Lioncash
f96036b3f1 A32/barrier: Correct PC assignment within ISB
The SetRegister() IR function doesn't allow specifying the PC as a
register. This is a discrepancy that slipped through (my bad). Instead,
we can use BranchWritePC(), like how the other similar PC modifying
locations do it.
2020-04-22 21:02:46 +01:00
Lioncash
196e7b5e35 frontend/A32/ir_emitter: Mark locals as const where applicable
Makes const usage consistent within the source file.
2020-04-22 21:02:46 +01:00
Lioncash
511613c736 frontend/A32/types: Use helper function in operator+ overload
Allows deduplicating an assert and a cast.
2020-04-22 21:02:46 +01:00
Lioncash
8103652a91 frontend: Move imm.h to the top-level directory of the frontends
Preparation to utilize the immediate type within the A32 backend as
well, which will allow eliminating numerous type aliases like Imm4,
Imm5, etc.
2020-04-22 21:02:46 +01:00
Lioncash
796bb8a7f7 frontend/A64/types: Make RegNumber() and VecNumber() constexpr
Given they simply perform casting, they can be safely made constexpr.
2020-04-22 21:02:46 +01:00
Lioncash
64e51a6d4d A32/disassembler_arm: Mark utility functions as static where applicable
These don't depend on class state and can be marked static to make that
explicit.
2020-04-22 21:02:46 +01:00
Lioncash
0c43228ad5 frontend/A64/types: Use helper functions in operator+ overloads
Allows us to get rid of another explicit cast.
2020-04-22 21:02:46 +01:00
Lioncash
a1cace21a9 frontend/ir/ir_emitter: Apply const to locals where applicable
Makes const usage consistent with all other functions in the source
file.
2020-04-22 21:02:46 +01:00
Lioncash
0a35836998 frontend/ir/ir_emitter: Use switch constructs in floating point opcodes where applicable
This'll reduce the amount of noise necessary in changes implementing
half-precision instructions, as the type can just be prepended to the
switch cases, instead of rewriting the whole if/else branch.
2020-04-22 21:02:46 +01:00
Lioncash
8316d231e9 A32: Implement barrier instructions introduced in ARMv7
Provides basic implementations of the barrier instruction introduced
within ARMv7. Currently these simply mirror the behavior of the AArch64
equivalents.
2020-04-22 21:02:46 +01:00
Lioncash
7fc3bd689d A32: Implement ARM-mode MLS 2020-04-22 21:02:46 +01:00
Lioncash
8b338b7def A32: Implement ARM-mode MOVT 2020-04-22 21:02:46 +01:00
Lioncash
877fa0f8c3 A32: Implement ARM-mode SBFX 2020-04-22 21:02:46 +01:00
Lioncash
47218ee65d A32: Implement ARM-mode UBFX 2020-04-22 21:02:46 +01:00
Lioncash
2970b34e3c A32: Implement ARM-mode BFI 2020-04-22 21:02:46 +01:00
Lioncash
fab3a59e05 A32: Implement ARM-mode BFC 2020-04-22 21:02:46 +01:00
Lioncash
7305d13221 A32: Implement ARM-mode RBIT 2020-04-22 21:02:46 +01:00
Lioncash
b2f7a0e7ba A32: Implement ARM-mode SDIV/UDIV
Now that we have Unicorn in place, we can freely implement instructions
introduced in newer versions of the ARM architecture.
2020-04-22 21:02:46 +01:00
Lioncash
c0ae23bbb7 A32/translate_thumb: Clean up formatting
Performs a similar tidying up of the Thumb translator, like what was
done with the regular ARM translator to make it consistent with the rest
of the codebase.

The A32 backend (both Thumb and ARM), will likely see more changes to it
in the near future, so this just acts as a "dusting off".
2020-04-22 21:02:46 +01:00
Merry
837c23a8ec Merge pull request #483 from lioncash/invert
frontend/ir/cond: Remove unused invert() function
2020-04-22 21:02:46 +01:00
Lioncash
d12e375481 common/fp/op/FPConvert: Remove unnecessary casts in FPConvert()
These were made unnecessary in 2c2fdb435cf8e358a0c5b907ce8131e434df3f22,
but were missed during the initial removal.
2020-04-22 21:02:46 +01:00
Merry
09ee64ea98 Merge pull request #482 from lioncash/fixedfp
A64: Handle half-precision variants of FP->Fixed instructions
2020-04-22 21:02:45 +01:00
MerryMage
1e1e9c17c7 emit_x64_data_processing: Remove INVALID_REG
INVALID_REG.cvt8() now throws
2020-04-22 21:02:45 +01:00
Lioncash
06ec6ab0da frontend/ir/cond: Remove unused invert() function
This is no longer used by anything in the codebase, so it can be
removed.
2020-04-22 21:01:46 +01:00
Merry
d71f51b0da Merge pull request #481 from lioncash/alloc
ir/basic_block: Forward declare headers where applicable
2020-04-22 21:01:46 +01:00
Lioncash
64e3d233f4 A64: Handle half-precision variants of FP->Fixed-point instructions 2020-04-22 21:01:45 +01:00
Lioncash
4fc531f71b ir/basic_block: Forward declare headers where applicable
Now that the constructor and destructors have been placed within the cpp
file, we can forward declare the memory pool data structures. Now, a
change to the memory pool code won't ripple across the entirety of the
IR emitter.
2020-04-22 21:01:45 +01:00
Lioncash
427b7afd66 frontend/ir/microinstruction: Add missing fixed-point opcodes to ReadsFromAndWritesToFPSRCumulativeExceptionBits() 2020-04-22 21:01:45 +01:00
Lioncash
c9777ef997 common/fp/info: Make half-precision info struct functions return correctly sized types
While initially done to potentially prevent creating bugs due to C++
having a silly type-promotion mechanism involving types < sizeof(int)
and unsignedness, given that the bulk of these functions' usages
are on exit paths, these can return the correct type to avoid the need
to cast at every usage point.
2020-04-22 21:01:45 +01:00
Lioncash
9309d95b17 ir/block: Default ctor and dtor in the cpp file
Prevents potentially inlining allocation code everywhere. While we're at
it, also explicitly delete/default the copy/move constructor/assignment
operators to be explicit about them.
2020-04-22 21:01:45 +01:00
Lioncash
604f39f00a frontend/ir_emitter: Add half-precision->fixed-point opcodes 2020-04-22 21:01:45 +01:00
Lioncash
4ecfbc14de common/fp/op/FPToFixed: Add half-precision specialization of FPToFixed 2020-04-22 21:01:45 +01:00
Lioncash
471eb77bc9 A64: Implement FRSQRTS' half-precision vector variant 2020-04-22 21:01:45 +01:00
Lioncash
f9b2862217 A64: Implement FRSQRTS' half-precision scalar variant
With the necessary machinery in place, we can now handle the
half-precision variant.
2020-04-22 21:01:45 +01:00
Lioncash
96356fac93 frontend/ir_emitter: Add half-precision opcode variant of FPVectorRSqrtStepFused 2020-04-22 21:01:45 +01:00
Merry
45864133f5 Merge pull request #478 from lioncash/stepfused
A64: Handle half-precision variants of FRECPE and FRECPS
2020-04-22 21:01:44 +01:00
Lioncash
824c551ba2 frontend/ir_emitter: Add half-precision opcode variant of FPRSqrtStepFused 2020-04-22 21:01:44 +01:00
Lioncash
3739d92097 A64: Implement half-precision vector variant of FRECPE 2020-04-22 21:01:44 +01:00
Lioncash
e3b2eb57b5 common/fp/op/FPRSqrtStepFused: Add half-precision specialization for FPRSqrtStepFused 2020-04-22 21:01:44 +01:00
Lioncash
7b212ec8ae A64: Implement half-precision variant of FRSQRTE's vector variant 2020-04-22 21:01:44 +01:00
Lioncash
0945a491bd A64: Implement half-precision scalar variant of FRECPE 2020-04-22 21:01:44 +01:00
Lioncash
77c84bcf9b A64: Implement half-precision variant of FRSQRTE's scalar variant 2020-04-22 21:01:44 +01:00
Lioncash
86b7626a2f A64: Implement half-precision vector variant of FRECPS 2020-04-22 21:01:44 +01:00
Lioncash
037acb17b9 frontend/ir_emitter: Add half-precision opcode variant for FPVectorRSqrtEstimate 2020-04-22 21:01:44 +01:00
Lioncash
de43f011a7 A64: Implement half-precision scalar variant of FRECPS 2020-04-22 21:01:44 +01:00
Lioncash
5dba99b4f4 frontend/ir_emitter: Add half-precision opcode variant for FPRSqrtEstimate 2020-04-22 21:01:44 +01:00
Lioncash
825a3ea16f frontend/ir_emitter: Add half-precision opcode for FPVectorRecipEstimate 2020-04-22 21:01:44 +01:00
Lioncash
726b9914c5 common/fp/op/FPRSqrtEstimate: Add half-precision specialization for FPRSqrtEstimate 2020-04-22 21:01:44 +01:00
Lioncash
2184d24e8f frontend/ir_emitter: Add half-precision opcode for FPRecipEstimate 2020-04-22 21:01:44 +01:00
Lioncash
af2e5afed6 common/fp/op: Add half-precision specialization for FPRecipEstimate 2020-04-22 21:01:44 +01:00
Lioncash
d7f394fc1a A64: Enable half-precision vector FRINT* variants 2020-04-22 21:01:44 +01:00
Lioncash
5d5c9f149f frontend/ir_emitter: Add half-precision opcode for FPVectorRecipStepFused 2020-04-22 21:01:44 +01:00
Lioncash
24f583c498 A64: Enable half-precision variants of floating-point FRINT* variants
With all the backing machinery in place, we can remove the fallback
check for half-precision.
2020-04-22 21:01:44 +01:00
Lioncash
6da0411111 frontend/ir_emitter: Add half-precision opcode for FPRecipStepFused 2020-04-22 21:01:44 +01:00
Lioncash
fb829b9525 frontend/microinstruction: Add FPVectorRoundInt types to ReadsFromAndWritesToFPSRCumulativeExceptionBits()
All variants were previously missing from this.
2020-04-22 21:01:44 +01:00
Lioncash
68d8cd2b13 common/fp/op: Add half-precision specialization for FPRecipStepFused 2020-04-22 21:01:44 +01:00
Lioncash
5b4673da4b frontend/ir_emitter: Add half-precision variant of FPVectorRoundInt 2020-04-22 21:01:44 +01:00
Lioncash
ad0c698f89 frontend/ir_emitter: Add half-precision variant of FPRoundInt 2020-04-22 21:01:44 +01:00
Lioncash
61cec94a19 fp/op/FPRoundInt: Add half-precision specialization of FPRoundInt 2020-04-22 21:01:44 +01:00
Merry
cb9a1b18b6 Merge pull request #475 from lioncash/muladd
A64: Enable half-precision variants of floating-point multiply-add instructions
2020-04-22 21:01:44 +01:00
Merry
d6db7ad46c Merge pull request #474 from lioncash/bracing
load_store_*: Make bracing consistent and variables const where applicable
2020-04-22 21:01:44 +01:00
Merry
1b6520f5dd A64/location_descriptor: Ensure FZ16 is included in the FPCR mask 2020-04-22 21:01:44 +01:00
Merry
13f421c27d Merge pull request #473 from lioncash/sqshlu
A64: Implement SQSHLU
2020-04-22 21:01:44 +01:00
Lioncash
b5bf890584 load_store_*: Make bracing consistent and variables const where applicable
Makes bracing consistent, and variables const where applicable to be
consistent with the rest of the codebase.

In most bracing cases, they'd need to be added to conditionals that
would involve checking stack pointer alignment in the future anyways.
2020-04-22 21:01:44 +01:00
Lioncash
9a58c3f1c7 A64: Implement FMLA/FMLS' half-precision vector indexed variants 2020-04-22 21:01:44 +01:00
Merry
d7da53a74b Merge pull request #472 from lioncash/exception
general: Mark hash functions as noexcept
2020-04-22 21:01:44 +01:00
Lioncash
9dcc04e106 A64: Implement SQSHLU's scalar variant 2020-04-22 21:01:44 +01:00
Merry
b91c6c8bae Merge pull request #471 from lioncash/sqrdmulh
A64: Implement SQRDMULH's scalar vector variant
2020-04-22 21:01:44 +01:00
Lioncash
1fdd3ef8a0 A64: Implement FMLA/FMLS' half-precision scalar indexed variants 2020-04-22 21:01:44 +01:00
Lioncash
2d59d10ac8 A64: Implement SQSHLU's vector variant
The vector shift by immediate category is now fully implemented.
2020-04-22 21:01:44 +01:00
Merry
b5e25959d9 Merge pull request #470 from lioncash/assert
general: Replace unreachable-imitating assertions with UNREACHABLE()
2020-04-22 21:01:44 +01:00
Lioncash
d6606deda2 A64: Implement half-precision vector variants of FMLA/FMLS 2020-04-22 21:01:44 +01:00
Lioncash
a4cadf1cd9 frontend/ir_emitter: Add opcodes for signed saturated left shifts with unsigned saturation 2020-04-22 21:01:44 +01:00
Lioncash
ec6b3ae084 ir/frontend: Add half-precision opcode for FPVectorMulAdd 2020-04-22 21:01:44 +01:00
Lioncash
5f74d25bf7 A64: Enable half-precision floating point variants of FP data-processing three register instructions
This handles half-precision floating point for:

- FMADD
- FMSUB
- FNMADD
- FNMSUB
2020-04-22 21:01:44 +01:00
Lioncash
bd82513199 frontend/ir_emitter: Add half-precision opcode for FPMulAdd 2020-04-22 21:01:44 +01:00
Lioncash
79a892d23c fp/op/FPMulAdd: Add half-precision floating-point specialization 2020-04-22 21:01:44 +01:00
Lioncash
7bb5440507 general: Mark hash functions as noexcept
Generally hash functions shouldn't throw exceptions. It's also a
requirement for the standard library-provided hash functions to not
throw exceptions.

An exception to this rule is made for user-defined specializations,
however we can just be consistent with the standard library on this to
allow it to play nicer with it.

While we're at it, we can also make the std::less specializations
noexcpet as well, since they also can't throw.
2020-04-22 21:01:43 +01:00
Lioncash
3b46b4a37d A64: Implement SQRDMULH's scalar vector variant
Implements the scalar variant in terms of the vector variant for the
time being.
2020-04-22 21:01:43 +01:00
Lioncash
fe95575b95 general: Replace unreachable-imitating assertions with UNREACHABLE()
We can just use the self-documenting assertion for indicating
unreachable paths, instead of manually passing false and providing a
message.
2020-04-22 21:01:43 +01:00
Merry
4a3d808354 Merge pull request #468 from lioncash/const
ir_opt: Mark locals as const where applicable
2020-04-22 21:01:43 +01:00
Lioncash
64de80839e A64/impl: Reorganize peculiar void use in V_scalar
To a reader this might look particularly strange, given the function
itself has a void return value, but this is actually valid, given the
function in the return statement also has a void return value.

This instead alters it to be a little easier to parse and potentially be
a little less confusing at a glance.
2020-04-22 21:01:43 +01:00
Merry
9a4e3b24e4 Merge pull request #467 from lioncash/reserved
A64: Handle reserved instruction cases more specifically where applicable
2020-04-22 21:01:43 +01:00
Merry
0b794cbcea Merge pull request #466 from lioncash/fcmla
A64: Implement FCMLA's indexed element variant
2020-04-22 21:01:43 +01:00
Merry
994349d154 Merge pull request #465 from neobrain/master
CMakeLists: Allow importing dynarmic build trees into other CMake projects
2020-04-22 21:01:43 +01:00
Lioncash
cfd7513a7d ir_opt/verification_pass: Mark locals as const where applicable
Makes our immutable state a little more explicit.
2020-04-22 21:01:40 +01:00
Lioncash
8309d49588 A64: Handle reserved instruction cases more specifically where applicable
These are cases that are defined as reserved within the ARMv8 reference
manual, so we can handle them as such instead of as unallocated
encodings.

While this doesn't actually change emulated behavior, it does at least
allow the JIT to generate the more appropriate exception.
2020-04-22 21:00:47 +01:00
Lioncash
6c2c68bce6 A64: Implement FCMLA's indexed element variant
With this, all of the instructions introduced with ARMv8.3-CompNum have
an implementation.
2020-04-22 21:00:47 +01:00
Tony Wasserka
7d99a6c00f CMakeLists: Allow importing dynarmic build trees into other CMake projects 2020-04-22 21:00:47 +01:00
Lioncash
1a45f35b9c ir_opt/a64_callback_config_pass: Mark locals as const where applicable
Makes our immutable state a little more explicit.
2020-04-22 21:00:47 +01:00
Lioncash
7bc7042104 simd_scalar_shift_by_immediate: Change UnallocatedEncoding() path in SaturatingShiftLeft to ReservedValue()
Strictly speaking, immh being zero is defined as reserved in the ARMv8
reference manual. This was just an error on my part when introducing the
SQSHL immediate scalar variant.
2020-04-22 21:00:47 +01:00
Lioncash
dc97977576 ir_opt/a32_get_set_elimination_pass: Mark local variables as const where applicable
Makes our intended immutable state slightly more explicit.
2020-04-22 21:00:47 +01:00
Lioncash
b1b4487e4d A64: Implement UQSHL (immediate)'s scalar variant
Like SQSHL's immediate scalar variant, we can also implement UQSHL's
immediate scalar variant in terms of the vector variant for the time
being.
2020-04-22 21:00:47 +01:00
Lioncash
3649dc6d9a A64: Implement scalar variant of SQSHL (immediate)
This can be handled in terms of the vector variant for the time being.
2020-04-22 21:00:47 +01:00
Lioncash
7d535eaba6 ir_opt/a32_constant_memory_reads_pass: Apply const where applicable to locals
Makes immutable state just slightly more explicit.
2020-04-22 21:00:47 +01:00
Lioncash
e1b4ff1068 simd_scalar_shift_by_immediate: Migrate SQSHL implementation to file-scope function
This will allow it to be reused for the implementation of UQSHL.
2020-04-22 21:00:47 +01:00
Lioncash
b37279f65c backend/x64/emit_x64_vector: Prevent undefined behavior within VectorSignedSaturatedShiftLeft
Avoids undefined behavior by potentially left-shifting a signed negative
value.
2020-04-22 21:00:47 +01:00