Lioncash
f889cae8c4
Arm64Emitter: Satisfy unrelated linter issues that cropped up by modifying the cpp file
2018-03-23 19:17:44 -04:00
Lioncash
91cefe6c8a
Arm64Emitter: Make IsImmArithmetic, IsImmLogical, FPImm8ToFloat, and FPImm8FromFloat internally linked
...
These aren't used anywhere outside of the emitter. Centralizes them under an anonymous namespace.
2018-03-23 19:17:26 -04:00
Lioncash
b11c237c43
Arm64Emitter: Remove unnecessary V8_UINT64_C preprocessor macro
...
UINT64_C is provided via <cstdint>, so we can just use that instead.
2018-03-23 13:31:48 -04:00
Lioncash
03671a5534
Arm64Emitter: Remove duplicate IsPowerOf2 function
...
We can just use the generified version in MathUtil.
2018-03-23 13:31:44 -04:00
Lioncash
7926a0c814
Use __func__ instead of __FUNCTION__ where applicable
...
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__.
2018-03-16 13:41:53 -04:00
Lioncash
75f5fcdfee
Assert: Remove unused parameter from DEBUG_ASSERT
...
This brings the macro in line with the regular ASSERT macro, which only has one
macro parameter.
2018-03-16 13:01:11 -04:00
Lioncash
50a476c371
Assert: Uppercase assertion macros
...
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).
2018-03-14 22:03:12 -04:00
Jonathan Hamilton
8ae76a6680
Fix arm64 MOVI2R for addresses between 2gb and 4gb offset from PC
...
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
2017-12-09 13:21:58 -08:00
degasus
304e601ad3
JitArm64: Reimplement aarch64 cycle counters.
...
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.
2017-09-02 13:24:37 +02:00
degasus
b00c60618b
JitArm64: Fix rlwinmx.
...
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...
2017-08-22 08:47:43 +02:00
Markus Wick
d78009877b
JitArm64: Fix LSL/LSR/ROR/ASR wrappers.
...
The other method has a latency of 2 cycles. This also improves the
throughput a lot.
2017-08-12 00:00:41 +02:00
Tillmann Karras
c54c49714d
Arm64Emitter: add FRECPE
2017-05-03 08:02:35 +01:00
Michael Maltese
3d7bace9da
Arm64Emitter: extract lambda to AddImmediate()
...
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,
^
```
2017-03-25 14:21:19 -07:00
Michael Maltese
c58ba93503
Arm64: Use PRIi64/PRIx64 for printf
2017-03-25 14:20:44 -07:00
degasus
6aa54a029e
JitArm64: Optimize GPR register push/pop.
2017-02-11 00:59:12 +01:00
BhaaL
23d99f2f2c
specify custom brace style to fix unions
...
BreakBeforeBraces: Allman apparently includes all styles,
except for AfterUnion (which is false) when using clang-format -dump-config
2017-01-05 12:55:13 +01:00
Léo Lam
31ccfffd38
Common: Add alignment header
...
Gets rid of duplicated alignment code.
2016-12-06 20:33:53 +01:00
degasus
8ad98d0046
ArmEmitter: Merge AddI2R helpers.
2016-10-27 19:19:06 +02:00
degasus
694e9b4132
JitArm64: ADDI2R optimizations 2.
2016-10-27 19:19:06 +02:00
degasus
1df694626d
JitArm64: Optimize addi2r & subi2r.
2016-10-26 21:54:13 +02:00
degasus
df250b84cc
JitArm64: Avoid MOVI2R is possible.
...
Just use all kind of ADDI2R, SUBI2R, ...
They have some optimizations internally.
2016-10-26 21:54:09 +02:00
degasus
7c9bba2213
Arm64Emitter: Fix std::array initializer.
2016-09-26 22:17:25 +02:00
Bernhard Urban
976da3707a
arm64: add comment about data cache flushing
2016-09-10 08:05:16 +02:00
Bernhard Urban
fff8221b63
arm64: fixes around icache flushing
2016-09-10 02:31:07 +02:00
Pierre Bourdon
3570c7f03a
Reformat all the things. Have fun with merge conflicts.
2016-06-24 10:43:46 +02:00
degasus
9ed465f4ac
JitArm64: Implement mulhwx
2016-03-04 22:51:46 +01:00
mathieui
f15ffda5a7
Correct ampersands as well
2016-01-21 21:27:56 +01:00
mathieui
3e283ea9f1
More asterisks
2016-01-21 21:16:51 +01:00
mathieui
78aa398e7c
Common: asterisks go against the type name
...
not the variable name
2016-01-21 20:46:25 +01:00
Lioncash
2630752ffe
Arm64Emitter: Get rid of a pointer cast
2015-10-22 15:32:11 -04:00
Lioncash
018c85c248
Arm64Emitter: Mark trivial functions as constexpr
2015-10-22 15:22:38 -04:00
Lioncash
19ac565e0d
Common: Move asserts to their own header
2015-09-26 18:51:27 -04:00
Ryan Houdek
2ad26ab3e9
[AArch64] Fix Test&Branch to relative location instructions.
...
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.
2015-09-07 13:38:58 -05:00
Ryan Houdek
d003934b8a
Merge pull request #2929 from Sonicadvance1/aarch64_optimize_gpr_flush
...
Aarch64 optimize gpr flush
2015-08-31 10:55:45 -05:00
Ryan Houdek
f2c17436ab
[AArch64] Fix issue in emitter.
...
Loadstore pairs support only signed offsets, not unsigned.
2015-08-30 23:05:59 -05:00
Ryan Houdek
b907576510
[AArch64] Support profiling by cycle counters if they are available to EL0
2015-08-30 10:25:16 -05:00
Ryan Houdek
4fa23abbe1
[AArch64] Implement MOVI and ORR(imm) in the NEON emitter.
2015-08-23 15:34:53 -05:00
degasus
9bfff0d461
JitArm64: Fix jit clearing
...
We have to reset m_lastCacheFlushEnd on clearing.
2015-08-15 11:41:01 +02:00
Lioncash
144ea9f4aa
Arm64Emitter: Fix encoding of '2-reg misc' variant of FCMEQ
2015-08-10 19:48:36 -04:00
Ryan Houdek
922d476dab
[AArch64] Fix FCMGE instruction encoding.
...
Fixes a crash when ps_sel is used (PSO 1&2 intro movies).
2015-08-09 14:54:55 -05:00
degasus
b8dd68beef
JitArm64: Far Code Cache
2015-07-12 09:41:32 +02:00
Lioncash
d09d59007a
Arm64Emitter: Add a missing const specifier for an array table
2015-07-02 11:09:44 -04:00
Ryan Houdek
afc3d30f5c
[AArch64] Implement BFI & UBFIZ in the emitter.
...
Also fixes a bug in the UBFX instruction emitter. Naughty Naughty PPSSPP, not testing emitter functions you add.
2015-06-29 19:00:22 -05:00
Ryan Houdek
5dc148159f
[AArch64] Implement {U, S}QXTN{,2}
...
Also split out XTN to XTN and XTN2.
2015-06-13 23:16:17 -05:00
Lioncash
74b359e390
Arm64Emitter: Remove unused variable from EncodeLoadStoreRegisterOffset
2015-06-13 14:27:15 -04:00
Ryan Houdek
3d2b116323
[AArch64] Implement a couple instructions in the emitter.
...
Implements LD2R.
Implements LD1R/LD2R with post-indexing support.
Implements vector min/max instructions.
2015-06-09 18:10:56 -05:00
Ryan Houdek
8ae12d8005
[AArch64] Add ASIMD LDR/STR with register offset
2015-06-07 19:53:05 -05:00
Ryan Houdek
05b72c5d31
[AArch64] Upstream PPSSPP's emitter changes.
...
Requires a minor change to in the JIT to make sure everything still works.
2015-06-07 19:50:21 -05:00
Tillmann Karras
30ebb2459e
Set copyright year to when a file was created
2015-05-25 13:22:31 +02:00
Tillmann Karras
cefcb0ace9
Update license headers to GPLv2+
2015-05-25 13:22:31 +02:00