summaryrefslogtreecommitdiff
path: root/Source/Core/Common/Arm64Emitter.cpp
AgeCommit message (Collapse)Author
2018-05-29Arm64Emitter: Use Common::BitCast where applicableLioncash
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.
2018-04-12Reformat all the things!spycrab
2018-03-23Arm64Emitter: Satisfy unrelated linter issues that cropped up by modifying ↵Lioncash
the cpp file
2018-03-23Arm64Emitter: Make IsImmArithmetic, IsImmLogical, FPImm8ToFloat, and ↵Lioncash
FPImm8FromFloat internally linked These aren't used anywhere outside of the emitter. Centralizes them under an anonymous namespace.
2018-03-23Arm64Emitter: Remove unnecessary V8_UINT64_C preprocessor macroLioncash
UINT64_C is provided via <cstdint>, so we can just use that instead.
2018-03-23Arm64Emitter: Remove duplicate IsPowerOf2 functionLioncash
We can just use the generified version in MathUtil.
2018-03-16Use __func__ instead of __FUNCTION__ where applicableLioncash
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-16Assert: Remove unused parameter from DEBUG_ASSERTLioncash
This brings the macro in line with the regular ASSERT macro, which only has one macro parameter.
2018-03-14Assert: Uppercase assertion macrosLioncash
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).
2017-12-09Fix arm64 MOVI2R for addresses between 2gb and 4gb offset from PCJonathan Hamilton
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-09-02JitArm64: Reimplement aarch64 cycle counters.degasus
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-08-22JitArm64: Fix rlwinmx.degasus
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-12JitArm64: Fix LSL/LSR/ROR/ASR wrappers.Markus Wick
The other method has a latency of 2 cycles. This also improves the throughput a lot.
2017-05-03Arm64Emitter: add FRECPETillmann Karras
2017-03-25Arm64Emitter: extract lambda to AddImmediate()Michael Maltese
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-25Arm64: Use PRIi64/PRIx64 for printfMichael Maltese
2017-02-11JitArm64: Optimize GPR register push/pop.degasus
2017-01-05specify custom brace style to fix unionsBhaaL
BreakBeforeBraces: Allman apparently includes all styles, except for AfterUnion (which is false) when using clang-format -dump-config
2016-12-06Common: Add alignment headerLéo Lam
Gets rid of duplicated alignment code.
2016-10-27ArmEmitter: Merge AddI2R helpers.degasus
2016-10-27JitArm64: ADDI2R optimizations 2.degasus
2016-10-26JitArm64: Optimize addi2r & subi2r.degasus
2016-10-26JitArm64: Avoid MOVI2R is possible.degasus
Just use all kind of ADDI2R, SUBI2R, ... They have some optimizations internally.
2016-09-26Arm64Emitter: Fix std::array initializer.degasus
2016-09-10arm64: add comment about data cache flushingBernhard Urban
2016-09-10arm64: fixes around icache flushingBernhard Urban
2016-06-24Reformat all the things. Have fun with merge conflicts.Pierre Bourdon
2016-03-04JitArm64: Implement mulhwxdegasus
2016-01-21Correct ampersands as wellmathieui
2016-01-21More asterisksmathieui
2016-01-21Common: asterisks go against the type namemathieui
not the variable name
2015-10-22Arm64Emitter: Get rid of a pointer castLioncash
2015-10-22Arm64Emitter: Mark trivial functions as constexprLioncash
2015-09-26Common: Move asserts to their own headerLioncash
2015-09-07[AArch64] Fix Test&Branch to relative location instructions.Ryan Houdek
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-08-31Merge pull request #2929 from Sonicadvance1/aarch64_optimize_gpr_flushRyan Houdek
Aarch64 optimize gpr flush
2015-08-30[AArch64] Fix issue in emitter.Ryan Houdek
Loadstore pairs support only signed offsets, not unsigned.
2015-08-30[AArch64] Support profiling by cycle counters if they are available to EL0Ryan Houdek
2015-08-23[AArch64] Implement MOVI and ORR(imm) in the NEON emitter.Ryan Houdek
2015-08-15JitArm64: Fix jit clearingdegasus
We have to reset m_lastCacheFlushEnd on clearing.
2015-08-10Arm64Emitter: Fix encoding of '2-reg misc' variant of FCMEQLioncash
2015-08-09[AArch64] Fix FCMGE instruction encoding.Ryan Houdek
Fixes a crash when ps_sel is used (PSO 1&2 intro movies).
2015-07-12JitArm64: Far Code Cachedegasus
2015-07-02Arm64Emitter: Add a missing const specifier for an array tableLioncash
2015-06-29[AArch64] Implement BFI & UBFIZ in the emitter.Ryan Houdek
Also fixes a bug in the UBFX instruction emitter. Naughty Naughty PPSSPP, not testing emitter functions you add.
2015-06-13[AArch64] Implement {U, S}QXTN{,2}Ryan Houdek
Also split out XTN to XTN and XTN2.
2015-06-13Arm64Emitter: Remove unused variable from EncodeLoadStoreRegisterOffsetLioncash
2015-06-09[AArch64] Implement a couple instructions in the emitter.Ryan Houdek
Implements LD2R. Implements LD1R/LD2R with post-indexing support. Implements vector min/max instructions.
2015-06-07[AArch64] Add ASIMD LDR/STR with register offsetRyan Houdek
2015-06-07[AArch64] Upstream PPSSPP's emitter changes.Ryan Houdek
Requires a minor change to in the JIT to make sure everything still works.