2541 Commits

Author SHA1 Message Date
Merry
b6ddeeea0f Implement memory aborts 2022-07-13 12:38:03 +01:00
Merry
285e617e35 Revert "frontend: Add option to halt after memory accesses (#682)"
This reverts commit 5ad1d02351bf4fee681a3d701d210b419f41a505.
2022-07-13 12:34:37 +01:00
Merry
7016ace72b llvm_disassemble: Add hex output 2022-07-12 19:20:25 +01:00
Merry
cd85b7fdaa emit_x64: Fix bugs in fast dispatcher
* We failed to invalidate entries if there are no patches required for a location descriptor.
* Bug in A64 hashing code (rbx instead of rbp).
* Bug in A32 and A64 lookup code (inconsistent choice of key: PC vs IR::LocationDescriptor).
* Test case added.
2022-07-11 16:06:54 +01:00
Wunkolo
a5318c775c constant_pool: Use std::span to manage pool
Simplifies some raw pointer arithmetic and type-usage into the new
`ConstantT` type.
2022-07-07 23:46:21 +01:00
Wunkolo
5d9b720189 block_of_code: Refactor MConst to Xmm{B}Const
`MConst` is refactored into `XmmConst` to clearly communicate the
addressable space of the newly allocated 16-byte memory constant.
`GetVectorOf` is elevated into a globally available `XmmBConst` function
that "broadcasts" bits of the input-value into n-bit elements that span
the width of the Xmm-constant.

`emit_x64_floating_point` will utilize the same 16-byte
broadcasted-constants to encourage more cache-hits within the
constant-pool between vector and non-vector code.
2022-07-07 23:46:05 +01:00
Liam
02c8b434c7 interface: allow clear of previously-signaled halt 2022-07-07 23:45:09 +01:00
Wunkolo
4d78d167d6 emit_x64_{vector_}floating_point: Add AVX512 implementation for ForceToDefaultNaN
`vfpclassp* k, xmm, i8` has better latency(4->3) and allocates better
execution ports(01->5) that are out of the way of ALU-ports than
`vcmpunordp* xmm, xmm, xmm`(`vcmpp* xmm, xmm, xmm, i8`) and removes the
pipeline dependency on `xmm0` in favor AVX512 `k`-mask registers.

`vblendmp* xmm, k, xmm, mem` is about the same throughput and latency as
`blendvp* xmm. mem` but has the benefit of embedded broadcasts to reduce
memory bandwidth(32/64-bit read rather than 128-bit) and lends itself to
a future size optimization feature of `constant_pool`.
2022-06-22 00:08:49 +01:00
Wunkolo
6367a26e62 emit_x64_{vector_}floating_point: Add AVX512 implementation for DenormalsAreZero
Both single and double precision floating point numbers as well as the
packed and unpacked version of this instruction will be able to use the
same memory constant. This takes advantage of the fact that `VFIXUPIMM*`
doesn't just copy from the source, but it will convert to `0.0` if it
turns out that it is a denormal and the `MXCSR.DAZ` flag is set.

```
tsrc[31:0]←((src1[30:23] = 0) AND (MXCSR.DAZ =1)) ? 0.0 : src1[31:0]
...
CASE(token_response[3:0]) {
    ...
    0001: dest[31:0]←tsrc[31:0]; ; pass through src1 normal input value, denormal as zero
    ...
```
2022-06-22 00:08:14 +01:00
Wunkolo
3ed2aebb20 backend/x64: Update FpFixup constants with denormal behavior
There is an important subtlety that should be documented here. All the
operands of `FpFixup` that read from the `Src` register actually do a
`DAZ` operation if `MXCSR.DAZ` is set.
2022-06-22 00:08:14 +01:00
Merry
d40557b751 A32/A64: Allow std::nullopt from MemoryReadCode
Raise a fault at runtime if this block is executed
2022-06-21 21:41:27 +01:00
liamwhite
5ad1d02351
frontend: Add option to halt after memory accesses (#682)
Intended to be used for library users wishing implement accurate memory watchpoints.

* A32: optionally make memory instructions the end of basic blocks
* A64: optionally make memory instructions the end of basic blocks
* Make memory halt checking a user configurable
* oops
2022-06-16 18:09:04 +01:00
SachinVin
46989efc2b asimd_one_reg_modified_immediate.cpp: Rename mvn to mvn_ 2022-05-28 13:27:14 +01:00
Merry
e44ac5b84c CMakeLists: Allow building on arm64 2022-05-28 13:27:14 +01:00
Merry
2779f24862 emit_x64_packed: Optimize GE flag generation for signed packed add/sub
sum >= 0 is equivalent to sum > -1
2022-05-17 23:50:51 +01:00
Merry
b224fad171 emit_x64_vector_floating_point: Implement workaround for issue 678 2022-05-17 21:06:16 +01:00
Merry
b1dc11a32d exception_handler_macos: Avoid use of deprecated function mach_port_destroy 2022-05-17 20:47:13 +01:00
Merry
e007d94133 backend/x64: Use templated lambda in each use of GenerateLookupTableFromList 2022-05-17 20:25:27 +01:00
Merry
57af72a567 CMakeLists: Make mcl a public link dependency 2022-04-19 20:33:26 +01:00
Liam
898f14b772 backend/x64: use mmap for all code allocations on Linux 2022-04-19 18:45:46 +01:00
Merry
78b4ba10c9 Migrate to mcl 2022-04-19 18:05:04 +01:00
Merry
de4154aa18 externals: Remove mp and replace uses with mcl 2022-04-19 16:28:28 +01:00
Wunkolo
27bbf4501b backend/x64: Use upper EVEX registers as scratch space
AVX512 adds an additional **16** simd registers, for a total of 32 simd
registers, accessible by utilizing EVEX encoded instructions. Rather
than using the `ScratchXmm` function, adding additional
register-pressure and spilling, AVX512-enabled contexts can just
directly use `xmm{16-31}` registers as intermediate scratch registers.
2022-04-06 17:41:55 +01:00
merry
644172477e Implement enable_cycle_counting 2022-04-03 16:10:32 +01:00
merry
aac1f6ab1b Implement halt_reason
* Provide reason for halting and atomically update this.
* Allow user to specify a halt reason and return this information on halt.
* Check if halt was requested prior to starting execution.
2022-04-03 15:37:20 +01:00
merry
116297ccd5 common: Add atomic
Implement atomic or operation on u32
2022-04-03 15:30:39 +01:00
merry
f6be6bc14b emit_x64_memory: Appease MSVC
Associated with changes in 8bcd46b7e9dc487da217b216c908f2ef15e7a8cf
2022-04-02 20:41:34 +01:00
merry
8bcd46b7e9 emit_x64_memory: Ensure 128-bit loads/stores are atomic 2022-04-02 19:33:48 +01:00
merry
e27733464b emit_x64_memory: Always order exclusive accesses 2022-04-02 19:33:15 +01:00
merry
cd91a36613 emit_x64_memory: Fix bug in 16-bit ordered EmitReadMemoryMov 2022-04-02 19:32:46 +01:00
merry
9cadab8fa9 backend/emit_x64_memory: Enforce memory ordering 2022-03-29 20:57:34 +01:00
merry
675efecf47 emit_x64_memory: Combine A32 and A64 memory code 2022-03-29 20:51:50 +01:00
merry
af2d50288f A64/sys_ic: Return to dispatch on possible invalidation 2022-03-27 15:27:34 +01:00
merry
cf0709c7f1 emit_x64_memory: Share Emit{Read,Write}MemoryMove 2022-03-26 16:51:55 +00:00
merry
64adc91ca2 emit_x64_memory: Move EmitFastmemVAddr to common file 2022-03-26 16:49:14 +00:00
merry
18f02e2088 emit_x64_memory: Move EmitVAddrLookup to common file 2022-03-26 16:46:06 +00:00
merry
3d657c450a emit_x64_memory: Share EmitDetectMisalignedVAddr 2022-03-26 16:09:56 +00:00
merry
fb586604b4 emit_x64_memory: Share constants 2022-03-26 16:05:03 +00:00
merry
5cf2d59913 A32: Add AccType information and propagate to IR-level 2022-03-26 15:38:10 +00:00
merry
614ecb7020 A64: Propagate AccType information to IR-level 2022-03-26 15:38:10 +00:00
merry
879f211686 ir/value: Add AccType to Value 2022-03-26 15:38:10 +00:00
Alexandre Bouvier
9d369436d8 cmake: Fix unicorn and llvm 2022-03-22 20:27:01 +00:00
merry
c78b82dd2c vfp: VLDM is UNPREDICABLE when n is R15 in thumb mode 2022-03-20 20:52:11 +00:00
Sergi Granell
0ec4a23710 thumb32: Implement LDA and STL
Note that those are ARMv8 additions to the Thumb instruction set.
2022-03-20 20:16:27 +00:00
merry
e1a266b929 A32: Implement SHA256SU1 2022-03-20 13:59:18 +00:00
merry
ab4c6cfefb A32: Implement SHA256SU0 2022-03-20 13:59:18 +00:00
merry
c022a778d6 A32: Implement SHA256H, SHA256H2 2022-03-20 13:59:18 +00:00
merry
bb713194a0 backend/x64: Implement SHA256 polyfills 2022-03-20 13:59:18 +00:00
merry
98cff8dd0d IR: Implement SHA256MessageSchedule{0,1} 2022-03-20 13:59:18 +00:00
merry
f0a4bf1f6a IR: Implement SHA256Hash 2022-03-20 13:59:18 +00:00