MerryMage
7912a79fa5
emit_x64: align before emitting blocks
2016-08-27 11:04:43 +01:00
MerryMage
41c8dabf0b
block_of_code: nop should probably default to a size of 1
2016-08-27 10:57:48 +01:00
MerryMage
dca3b2f079
Implement VMRS and VMSR
2016-08-26 22:47:54 +01:00
MerryMage
814348371e
emit_x64: EmitX64::Emit: block.Location() returns by value
2016-08-26 19:43:29 +01:00
MerryMage
4f6ea715b2
emit_x64: EmitX64::Emit doesn't need descriptor argument
2016-08-26 19:14:25 +01:00
Lioncash
32c24d2cb3
Use 'false' instead of '0' in asserts
2016-08-26 18:52:08 +01:00
MerryMage
ba31f43672
reg_alloc: UseDefOpArgXmm: default value for argument desired_location should be any_xmm, not any_gpr
2016-08-26 18:50:08 +01:00
MerryMage
7fedf04e79
reg_alloc: Deduplicate constants in RegAlloc::HostCall that were already defined by abi.h
2016-08-26 18:43:50 +01:00
MerryMage
59a8e14d1c
reg_alloc: Correct OpArg::setBit for Reg
2016-08-26 15:23:38 +01:00
MerryMage
065c53ebfc
emit_x64: Make ZeroIfNaN64 branchless
2016-08-26 15:23:08 +01:00
MerryMage
9901ed0f51
block_of_code: Optimize nops
2016-08-26 13:46:19 +01:00
Lioncash
0102951bdd
Convert formatting over to fmtlib
2016-08-26 13:13:19 +01:00
MerryMage
ed3a686d1d
Implement public header files
2016-08-26 00:44:50 +01:00
MerryMage
656d4f7252
emit_x64: inhibit_emission is obsolete
...
Not used anymore; unused ever since intrusive lists were introduced.
2016-08-25 23:24:16 +01:00
MerryMage
4322c0907c
microinstruction: Rename FindUseWithOpcode to GetAssociatedPseudoOperation, encapsulate associated variables
2016-08-25 21:08:47 +01:00
MerryMage
922d1fd198
Merge branch 'xbyak'
2016-08-25 16:54:48 +01:00
MerryMage
d04b9eaa81
backend_x64/block_of_code: Reset labels when ClearCache() is called
2016-08-25 16:18:18 +01:00
MerryMage
e32812cd00
Port x64 backend to xbyak
2016-08-25 16:18:17 +01:00
Lioncash
0e12fb6a56
basic_block: Move all variables behind a public interface
2016-08-25 16:14:37 +01:00
MerryMage
13908c5a58
reg_alloc: Insert braces around DEBUG_ASSERT
...
DEBUG_ASSERT becomes an empty statement in release-mode; an if statement
with an empty statement produces a compiler warning.
2016-08-25 13:09:18 +01:00
MerryMage
dc26afbd7e
translate_arm: Translate more than one conditional instruction in a block
2016-08-25 13:05:33 +01:00
Lioncash
1395baefa9
interface: Return register files by const reference
...
Prevents unnecessary copies where they aren't particularly required.
2016-08-25 12:51:41 +01:00
MerryMage
22cca5ff72
emit_x64: Actually advance RSB pointer
2016-08-24 23:19:47 +01:00
Lioncash
eba3a06d80
frontend: Introduce FPSCR register helper class
...
Encapsulates all of the FPSCR state.
2016-08-24 20:51:14 +01:00
MerryMage
b5a86889cd
Implement VCVT
2016-08-23 22:20:04 +01:00
MerryMage
c8b2f63c93
get_set_elimination_pass: Eliminate unnecessary gets/sets of extended registers
2016-08-23 15:57:20 +01:00
MerryMage
8d1b9f32ca
Standardize indentation of switch statments
2016-08-23 12:19:27 +01:00
MerryMage
72250b119f
backend_x64/block_of_code: Add more floating point constants
...
* MFloatPositiveZero32
* MFloatPositiveZero64
* MFloatMinS32
* MFloatMaxS32
* MFloatMinU32
* MFloatMaxU32
2016-08-22 15:54:19 +01:00
Lioncash
1abe881921
basic_block: Add proxy member functions for the instruction list
...
Currently basic block kind of acts like a 'dumb struct' which makes things
a little more verbose to write (as opposed to keeping it all in one place,
I guess). It's also a little wonky conceptually, considering a block is
composed of instructions (i.e. 'contains' them).
So providing accessors that make it act more like a container can make working
with algorithms a little nicer. It also makes the API a little more
defined.
Ideally, the list would be only available through a function, but
currently, the pool allocator is exposed, which seems somewhat odd,
considering the block itself should manage its overall allocations
(with placement new, and regular new), rather than putting that
sanitizing directly on the IR emitter (it should just care about emission,
not block state). However, recontaining that can be followed up with,
as it's very trivial to do.
2016-08-22 13:44:56 +01:00
Lioncash
86f803da04
reg_alloc: Use Inst's HasUses() function where applicable
2016-08-20 21:26:09 +01:00
Lioncash
36a0ad5bc2
reg_alloc: const correctness for ValueLocation()
2016-08-19 19:33:57 +01:00
MerryMage
2d6a86e43c
Remove <cassert>
2016-08-19 01:53:24 +01:00
MerryMage
269160ef0d
emit_x64: Clear RSB-related caches when ClearCache() is called
2016-08-18 18:18:44 +01:00
MerryMage
1a3f3ac435
emit_x64: Correct behaviour of PackedOperation for immediate argument
...
x64 MOVD_xmm does not support an immediate oparg
2016-08-18 18:17:17 +01:00
MerryMage
b2de47954b
EmitX64: Emit correct cycle count on cond failure
2016-08-18 18:16:18 +01:00
Lioncash
841098a0bc
ir: separate components out a little more
2016-08-17 20:46:21 +01:00
Lioncash
cbd99e4367
jitstate: Use std::array's fill() in ResetRSB
...
Performs the equivalent behavior
2016-08-17 10:10:43 +01:00
Lioncash
74ee92ee38
jitstate: const correctness
...
GetReturnFromRunCodeAddress is const qualified, so this can accept a const
pointer. This also allows for making the constructor accept a const
pointer as well.
2016-08-17 10:10:43 +01:00
Lioncash
439619c827
reg_alloc: Make GetRegLoc return by const reference
...
Considering a HostLocInfo instance houses a std::vector, every time this
function is called can cause a potential heap allocation.
This can be somewhat unnecessary because this function is only used to query
for information we already have.
Considering this is used by several other internal query functions such as
IsRegisterOccupied, IsRegisterAllocated, and IsLastUse, this will result
in better codegen (returning an address is just 3 instructions excluding
the ret instruction for returning, meanwhile heap alloc can be 60+).
This also renames the function to have the same name as its non-const
counterpart, since overloading will just select the correct function
instead of putting that onus on the developer.
2016-08-17 10:08:08 +01:00
MerryMage
0ebb572e2d
Optimization: Make RSB a ring buffer instead of a stack
2016-08-15 15:48:22 +01:00
MerryMage
7d7ac0af71
Optimization: Make SVC use RSB
2016-08-15 15:02:08 +01:00
MerryMage
6c45619aa1
Optimization: Implement terminal LinkBlockFast
2016-08-15 14:33:17 +01:00
MerryMage
624e84fa09
Optimization: Tweak RSB
2016-08-15 14:08:06 +01:00
MerryMage
070298b948
Optimization: bugfix! Return Stack Buffer location hash calculation was incorrect
2016-08-15 13:21:58 +01:00
MerryMage
e164ede4dc
TranslateArm: Implement MRS, MSR (imm), MSR (reg)
2016-08-15 11:50:49 +01:00
MerryMage
8fc21f481a
RegAlloc: Handle case when def is unused
2016-08-13 01:55:03 +01:00
MerryMage
d43d97b990
EmitX64/EmitPushRSB: Assert that patch location is of correct size
2016-08-13 00:52:31 +01:00
MerryMage
960d14d18e
Optimization: Implement Return Stack Buffer
2016-08-13 00:10:23 +01:00
bunnei
8e68e6fdd9
TranslateArm: Implement QADD16/QSUB16/UQADD16/UQSUB16.
2016-08-12 19:00:44 +01:00
bunnei
4b09c0d032
TranslateArm: Implement QADD8 and UQADD8.
2016-08-12 19:00:44 +01:00