| Age | Commit message (Collapse) | Author |
|
Gets rid of the need to set up memcpy boilerplate to reinterpret between
floating-point and integers.
While we're at it, also do a minor bit of tidying.
|
|
|
|
the cpp file
|
|
FPImm8FromFloat internally linked
These aren't used anywhere outside of the emitter. Centralizes them under an anonymous namespace.
|
|
UINT64_C is provided via <cstdint>, so we can just use that instead.
|
|
We can just use the generified version in MathUtil.
|
|
This replaces usages of the non-standard __FUNCTION__ macro with the standard
mandated __func__ identifier.
__FUNCTION__ is a preprocessor definition that is provided as an
extension by compilers. This was the only convenient option to rely on
pre-C++11. However, C++11 and greater mandate the predefined identifier
__func__, which lets us accomplish the same thing.
The difference between the two, however, is that __func__ isn't a
preprocessor macro, it's an actual identifier that exists at function
scope. The C++17 draft standard (N4659) at section [dcl.fct.def.general]
paragraph 8 states:
"
The function-local predefined variable __func__ is defined as if a
definition of the form
static const char __func__[] = "function-name ";
had been provided, where function-name is an implementation-defined
string. It is unspecified whether such
a variable has an address distinct from that of any other object in the
program.
"
Thankfully, we don't do any macro or string concatenation with __FUNCTION__
that can't be modified to use __func__.
|
|
This brings the macro in line with the regular ASSERT macro, which only has one
macro parameter.
|
|
Macros should be all upper-cased. This is also kind of a wart that's
been sticking out for quite a while now (we avoid prefixing
underscores).
|
|
The PC offset ADRP() path takes a s32 value, but the input offset was
being tested as abs(ptr) < 0xFFFFFFFF. This caused values between
0x80000000 and 0xFFFFFFFF to incorrectly use this path, despite the
offsets not being representable in an s32.
This caused a crash in the VertexLoader on android 8.1 immediate in wind
waker (and possibly all other apps on android 8.1) as the jit and data
sections happened to be loaded 4gb apart in virtual memory, causing some
pointers to hit this
|
|
CNTVCT_EL0 is force-enabled on all linux plattforms.
Windows is untested, but as this is the best way to get *any* low
overhead performance counters, they likely use it as well.
|
|
Seems like I was wrong that ANDI2R doesn't require a temporary register here.
There is *one* case when the mask won't fit in the ARM AND instruction:
mask = 0xFFFFFFFF
But let's just use MOV instead of AND here for this case...
|
|
The other method has a latency of 2 cycles. This also improves the
throughput a lot.
|
|
|
|
Fixes warning:
```
Source/Core/Common/Arm64Emitter.cpp:4108:31: error: declaration shadows a local variable [-Werror,-Wshadow]
auto addi = [this](ARM64Reg Rd, ARM64Reg Rn, u64 imm, bool shift, bool negative, bool flags) {
^
/var/lib/buildbot/slave/pr-android/build/Source/Core/Common/Arm64Emitter.cpp:4105:46: note: previous declaration is here
void ARM64XEmitter::ADDI2R_internal(ARM64Reg Rd, ARM64Reg Rn, u64 imm, bool negative, bool flags,
^
```
|
|
|
|
|
|
BreakBeforeBraces: Allman apparently includes all styles,
except for AfterUnion (which is false) when using clang-format -dump-config
|
|
Gets rid of duplicated alignment code.
|
|
|
|
|
|
|
|
Just use all kind of ADDI2R, SUBI2R, ...
They have some optimizations internally.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
not the variable name
|
|
|
|
|
|
|
|
Wasn't masking by the size of the offset encoding so negative values were killing the instruction
Missed commiting this in my integer gatherpipe PR.
Fixes crashing on AArch64.
|
|
Aarch64 optimize gpr flush
|
|
Loadstore pairs support only signed offsets, not unsigned.
|
|
|
|
|
|
We have to reset m_lastCacheFlushEnd on clearing.
|
|
|
|
Fixes a crash when ps_sel is used (PSO 1&2 intro movies).
|
|
|
|
|
|
Also fixes a bug in the UBFX instruction emitter. Naughty Naughty PPSSPP, not testing emitter functions you add.
|
|
Also split out XTN to XTN and XTN2.
|
|
|
|
Implements LD2R.
Implements LD1R/LD2R with post-indexing support.
Implements vector min/max instructions.
|
|
|
|
Requires a minor change to in the JIT to make sure everything still works.
|