Lioncash
21974ee57e
backend_x64/ir: Amend generic LogicalVShift() template to also handle signed variants
...
Also adds IR opcodes to dispatch said variants
2020-04-22 20:46:17 +01:00
Lioncash
cda75e2079
A64: Implement CMTST's scalar variant
2020-04-22 20:46:17 +01:00
Lioncash
bebe7235ae
A64: Implement UZP1 and UZP2
2020-04-22 20:46:17 +01:00
Lioncash
26d77c6f09
ir: Add opcodes for performing vector deinterleaving
2020-04-22 20:46:17 +01:00
Lioncash
d6f9ed47d9
A64: Implement FNEG (half-precision)
2020-04-22 20:46:17 +01:00
Lioncash
7efbd73bac
A64: Implement USHL (scalar)
2020-04-22 20:46:17 +01:00
Lioncash
41f4717f2b
A64: Implement FNEG (vector)
2020-04-22 20:46:17 +01:00
Lioncash
ba1cc6366d
A64: Implement RSUBHN/RSUBHN2
2020-04-22 20:46:17 +01:00
Lioncash
e41640fe33
A64: Implement RADDHN/RADDHN2
2020-04-22 20:46:17 +01:00
Lioncash
b719a6b3f7
A64: Implement XAR
2020-04-22 20:46:17 +01:00
Lioncash
0b1b131ec2
simd_two_register_misc: Factor out common comparison code
...
Gets rid of a tiny bit of duplicated code.
2020-04-22 20:46:17 +01:00
Lioncash
ed0b84da70
A64: Implement CMLE (zero)'s vector variant
2020-04-22 20:46:17 +01:00
Lioncash
b595a68ffa
A64: Implement CMTST (vector)
2020-04-22 20:46:17 +01:00
Lioncash
48c7f8630c
A64: Implement ADDHN{2} and SUBHN{2}
2020-04-22 20:46:17 +01:00
Lioncash
3acd9c9200
translate: zero extend result in Vpart when storing to lower part of vector
2020-04-22 20:46:17 +01:00
Lioncash
4ec735f707
A64: Implement CMLE (zero)'s scalar variant
2020-04-22 20:46:17 +01:00
Lioncash
6534184df2
A64: Implement CMLT (zero)'s scalar single/double-precision variant
2020-04-22 20:46:17 +01:00
Lioncash
8863c9bb4b
A64: Implement SHA512H2
2020-04-22 20:46:17 +01:00
Lioncash
033b890e25
A64: Implement SHA512H
2020-04-22 20:46:17 +01:00
Lioncash
d1f5b084b4
A64: Handle S32->F32 case for SCVTF (vector)
2020-04-22 20:46:17 +01:00
Lioncash
38fa984b53
IR: Add opcode for packed word->f32 conversions
2020-04-22 20:46:16 +01:00
Lioncash
b8587d8e34
A64: Implement SHA512SU1
2020-04-22 20:46:16 +01:00
Lioncash
44d846045a
A64: Implement SHA512SU0
2020-04-22 20:46:16 +01:00
Lioncash
ca903c1585
A64: Implement SHA256H and SHA256H2
2020-04-22 20:46:16 +01:00
MerryMage
e4237c44eb
A64: Implement SCVTF (vector, integer), scalar varaint
2020-04-22 20:46:16 +01:00
MerryMage
bfba38d0b6
impl: Reorganize scalar two-register misc instructions
2020-04-22 20:46:16 +01:00
Lioncash
ea582b17cc
A64: Implement SHA256SU1
2020-04-22 20:46:16 +01:00
Lioncash
06c5dcaf5e
simd_two_register_misc: Add missing zeroing of the vector for CMGT and CMLT
2020-04-22 20:46:16 +01:00
Lioncash
0d50d7314b
A64: Implement CMGE (zero)'s vector variant
2020-04-22 20:46:16 +01:00
Lioncash
ab35dc0e78
A64: Implement MLS (by element)
2020-04-22 20:46:16 +01:00
Lioncash
1651e60462
A64: Implement MUL (by element)
2020-04-22 20:46:16 +01:00
MerryMage
a86d4093cd
A64: Implement MLA (by element)
2020-04-22 20:46:16 +01:00
Lioncash
7f47402609
A64: Implement ABS (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
c8eb4528be
A64: Implement SHA256SU0
2020-04-22 20:46:16 +01:00
Lioncash
181c3b0790
A64: Implement SHA1M
2020-04-22 20:46:16 +01:00
Lioncash
47bc97a71b
A64: Implement SHA1P
2020-04-22 20:46:16 +01:00
Lioncash
718f3e9bb4
A64: Implement scalar variants of CMEQ, CMGT, and CMGE zero comparison instructions
...
These can trivially use the ScalarCompare helper function.
2020-04-22 20:46:16 +01:00
Lioncash
3ad4e547e4
A64: Implement scalar variant of NEG
2020-04-22 20:46:16 +01:00
Lioncash
b4f3051e4b
simd: Relocate REV16, REV32 and REV64 vector variants to the proper file
...
These aren't scalar instruction variants.
2020-04-22 20:46:16 +01:00
Lioncash
19e276d10f
A64: Implement CMEQ (register, scalar)
2020-04-22 20:46:16 +01:00
Lioncash
5b8c9e5146
A64: Implement CMHS (register, scalar)
2020-04-22 20:46:16 +01:00
Lioncash
78bb12276a
A64: Implement CMHI (register, scalar)
2020-04-22 20:46:16 +01:00
Lioncash
c18b20b8d1
A64: Implement CMGE (register, scalar)
2020-04-22 20:46:16 +01:00
Lioncash
755981d0da
A64: Implement CMGT (register, scalar)
2020-04-22 20:46:16 +01:00
Lioncash
da6627124b
A64: Implement SHA1C
2020-04-22 20:46:16 +01:00
Lioncash
3c013bd9f8
A64: Implement SLI (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
154cac594a
A64: Implement SRI (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
6bcfdba1ad
general: Remove unused lambda captures
...
Resolves warnings that occur in Xcode 9.3
2020-04-22 20:46:16 +01:00
Lioncash
205ca6b4cb
A64: Implement SHA1SU1
2020-04-22 20:46:16 +01:00
Lioncash
16a001b9ff
A64: Implement SHA1SU0
2020-04-22 20:46:16 +01:00
Lioncash
3b6db59850
A64: Implement TRN2
2020-04-22 20:46:16 +01:00
Lioncash
30e158f8d0
A64: Implement TRN1
2020-04-22 20:46:16 +01:00
Lioncash
52cad2d9d0
A64: Implement SSRA (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
255a33936d
A64: Implement SSHR (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
6723b00497
A64: Implement USRA (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
d56fa8f735
A64: Implement USHR (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
870e418b0b
A64: Implement SHL (scalar)
2020-04-22 20:46:16 +01:00
Lioncash
97f2bea4f2
A64: Implement SM3PARTW1
2020-04-22 20:46:16 +01:00
Lioncash
e268b110f0
simd_sha512: Simplify RAX1
...
Now that the vector rotation helpers are in, replace the explicit
shifting with the relevant helper function that does the same thing.
Simply tidies up code; no behavioral changes are made.
2020-04-22 20:46:16 +01:00
Lioncash
20d2491267
A64: Implement SM3PARTW2
2020-04-22 20:46:16 +01:00
Lioncash
e1b662e90c
ir: Add helper functions for vector rotation
2020-04-22 20:46:16 +01:00
Lioncash
8a60a63a8b
A64: Implement SM3TT2B
2020-04-22 20:46:16 +01:00
Lioncash
b3d4c02098
A64: Implement SM3TT2A
2020-04-22 20:46:16 +01:00
Lioncash
7fbccabd81
A64: Implement SM3TT1B
2020-04-22 20:46:16 +01:00
Lioncash
769373b3ed
A64: Implement SM3TT1A
2020-04-22 20:46:16 +01:00
Lioncash
2d269fdcc7
simd_shift_by_immediate: Merge signed/unsigned helper functions
...
Gets rid of a little more code duplication.
2020-04-22 20:46:16 +01:00
Lioncash
d5461be6b4
A64: Implement SM3SS1
2020-04-22 20:46:16 +01:00
Lioncash
2db032ac83
A64: Implement SRI (vector)
2020-04-22 20:46:16 +01:00
Lioncash
11005cfe26
A64: Implement SLI (vector)
2020-04-22 20:46:16 +01:00
Lioncash
e3d9bf55e7
A64: Implement SRSRA (vector)
2020-04-22 20:46:16 +01:00
Lioncash
bc6016cad7
A64: Implement SRSHR (vector)
2020-04-22 20:46:16 +01:00
MerryMage
6c9c829a08
imm: Add additional bit position checks to Imm::Bits
2020-04-22 20:46:16 +01:00
Lioncash
a2f8cdf0a3
A64: Implement SSUBL/SSUBL2
2020-04-22 20:46:16 +01:00
Lioncash
d456fb85c8
A64: Implement SADDL/SADDL2
2020-04-22 20:46:16 +01:00
Lioncash
5c9e7f328d
A64: Implement USUBL/USUBL2
2020-04-22 20:46:16 +01:00
Lioncash
88d70e3b8a
A64: Implement UADDL/UADDL2
2020-04-22 20:46:16 +01:00
Lioncash
4b3d70de5f
simd_shift_by_immediate: Factor out common code in shift instructions
...
Gets rid of partial duplication of the same code for instructions that only have a small behavior difference to them.
e.g. The only difference between SSHR and SSRA is that SSRA adds an accumulator before storing the result.
2020-04-22 20:46:16 +01:00
Lioncash
56803f5203
A64: Implement URSRA (vector)
2020-04-22 20:46:16 +01:00
Lioncash
8afdf4b23d
A64: Implement URSHR (vector)
2020-04-22 20:46:16 +01:00
Lioncash
16613ee066
A64: Implement RSHRN/RSHRN2
2020-04-22 20:46:15 +01:00
Lioncash
937990fd2a
A64: Implement SHRN/SHRN2
2020-04-22 20:46:15 +01:00
Lioncash
80e005e5b5
A64/translate: Amend I() to also handle u8 and u16 immediates
...
This is necessary for instructions like SRSHR, and other related instructions.
2020-04-22 20:46:15 +01:00
MerryMage
7969871aa3
A64: Implement FMOV (vector, immediate) and mark other SIMD modified immediate instructions as unallocated
2020-04-22 20:46:15 +01:00
MerryMage
5c95e28ed0
A64: Implement ZIP2
2020-04-22 20:46:15 +01:00
MerryMage
871aefb9a0
decoder/a64: Tweak ordering algorithm
...
Ensuring only instruction families are sorted with each other in
the fashion previously devised does not admit a total ordering.
2020-04-22 20:46:15 +01:00
MerryMage
575590d18d
ir_emitter: Remove overloads
...
Having overloads made explicit casting necesssary for these functions when
using types like UAny.
2020-04-22 20:46:15 +01:00
Lioncash
83ff7a43d1
A64: Implement RBIT (vector)
2020-04-22 20:46:15 +01:00
Lioncash
64b1f2d468
ir: Add opcode for reversing bits in a vector
2020-04-22 20:46:15 +01:00
Lioncash
9de60b60bb
A64/translate: Amend instruction prototypes erroneously marked as taking Reg
...
Makes the prototypes consistent
2020-04-22 20:46:15 +01:00
Lioncash
cf81f04ed3
A64: Implement RAX1
2020-04-22 20:46:15 +01:00
Lioncash
7bcb1c115a
A64: Implement ABS (vector)
2020-04-22 20:46:15 +01:00
Lioncash
e33dcce14a
ir: Add opcodes for performing vector absolute values
2020-04-22 20:46:15 +01:00
Lioncash
84d49309b9
A64: Implement USUBW/USUBW2
2020-04-22 20:46:15 +01:00
Lioncash
e20fce6b5a
A64: Implement SSUBW/SSUBW2
2020-04-22 20:46:15 +01:00
Lioncash
00af6eeab9
A64: Implement SADDW/SADDW2
2020-04-22 20:46:15 +01:00
MerryMage
78a047f0f9
A64: Implement EXT
2020-04-22 20:46:15 +01:00
MerryMage
3472f371df
IR: Implement VectorExtract, VectorExtractLower IR instructions
2020-04-22 20:46:15 +01:00
MerryMage
8bba37089e
A64: Implement UADDW
2020-04-22 20:46:15 +01:00
MerryMage
5c47f03888
A64: Implement FMUL (vector)
2020-04-22 20:46:15 +01:00
Lioncash
a6e264c2dd
A64: Implement UABA
...
Now that we have unsigned absolute difference capabilities, we can just use this to
append onto the result via a vector add.
2020-04-22 20:46:15 +01:00
Lioncash
c2e7364d3e
A64: Implement UABD
2020-04-22 20:46:15 +01:00
Lioncash
ad5cf584ce
ir: Add opcodes for performing vector unsigned absolute differences
2020-04-22 20:46:15 +01:00
Lioncash
7780af56e3
ir_emitter: Make immediate member functions const qualified
...
These don't modify class state
2020-04-22 20:46:15 +01:00
Lioncash
701f43d61e
IR: Add opcodes for interleaving upper-order bytes/halfwords/words/doublewords
...
I should have added this when I introduced the functions for interleaving
low-order equivalents for consistency in the interface.
2020-04-22 20:46:15 +01:00
Lioncash
94f0fba16b
A64: Implement SHA1H
...
This is a fairly trivial instruction it's essentially:
result = ROL(data, 30);
2020-04-22 20:46:15 +01:00
Lioncash
40ec25356b
A64: NOP immediate variant of PRFM
...
Makes behavior identical to the literal variant of PRFM. Given this is simply a hint instruction,
this is valid behavior. The upside is that we don't fall back to Unicorn unnecessarily whenever
the instruction is encountered.
2020-04-22 20:46:15 +01:00
Lioncash
73b9e4b276
A64: system: Use an enum class for MRS/MSR register encodings
...
Reduces the need to manually write out the register bit encodings repeatedly.
2020-04-22 20:46:15 +01:00
Lioncash
586b00d11d
A64: Implement REV64
2020-04-22 20:46:15 +01:00
Lioncash
9128988dc3
A64: Implement REV32 (vector)
2020-04-22 20:46:15 +01:00
Lioncash
6b0010c940
ir: Add IR opcodes for emitting vector shuffles
...
This uses the ARM terminology for sizes (Halfword -> 2 bytes, Word -> 4 bytes)
as opposed to the x86 terminology of (Word -> 2 bytes, Double word -> 4 bytes)
2020-04-22 20:46:15 +01:00
Lioncash
6ad1bce5e0
A64: Implement REV16 (vector)
2020-04-22 20:46:15 +01:00
Lioncash
7a66224d9a
A64: Implement EOR3 and BCAX
2020-04-22 20:46:15 +01:00
MerryMage
be5047c7c2
impl: Update PC when raising exception
2020-04-22 20:46:15 +01:00
MerryMage
49cc6d7fad
A64: Implement FDIV (vector)
2020-04-22 20:46:15 +01:00
MerryMage
fd075d8d68
system: Raise exception for YIELD, WFE, WFI, SEV, SEVL
2020-04-22 20:46:15 +01:00
MerryMage
c832cec96d
Correct FPSR and FPCR
2020-04-22 20:46:15 +01:00
MerryMage
147284427b
A64: Implement USHL
2020-04-22 20:46:15 +01:00
MerryMage
fd8f4c1195
A64: Implement UCVTF (vector, integer), scalar variant
2020-04-22 20:46:15 +01:00
MerryMage
be57608353
A64: Partially implement FCVTZU (scalar, fixed-point) and FCVTZS (scalar, fixed-point)
2020-04-22 20:46:15 +01:00
MerryMage
e4697b1676
A64: Implement system register TPIDR_EL0
2020-04-22 20:46:15 +01:00
MerryMage
e3da92024e
A64: Implement system registers FPCR and FPSR
2020-04-22 20:46:15 +01:00
MerryMage
9e4e4e9c1d
A64: Implement system register CNTPCT_EL0
2020-04-22 20:46:15 +01:00
MerryMage
1e15283d00
A64: Implement system register CTR_EL0
2020-04-22 20:46:15 +01:00
MerryMage
58fbb3ff1b
A64: Implement NEG (vector)
2020-04-22 20:46:15 +01:00
MerryMage
710d09471b
IR: Add IR instruction ZeroVector
2020-04-22 20:46:15 +01:00
MerryMage
0575e7421b
A64: Implement FMINNM (scalar)
2020-04-22 20:46:15 +01:00
MerryMage
1c9804ea07
A64: Implement FMAXNM (scalar)
2020-04-22 20:46:15 +01:00
MerryMage
bd2b415850
A64: Implement ADDP (scalar)
2020-04-22 20:46:14 +01:00
MerryMage
9df3793af0
A64: Implement DUP (element), scalar variant
2020-04-22 20:46:14 +01:00
MerryMage
2080a51f41
A64: Implement FMAX (scalar), FMIN (scalar)
2020-04-22 20:46:14 +01:00
MerryMage
0e157b0198
A64: Implement FSQRT (scalar)
2020-04-22 20:46:14 +01:00
MerryMage
01c1e9017e
T32: Add initial decoder list
2020-04-22 20:46:14 +01:00
MerryMage
ccf7df057b
simd_three_same: Add VectorZeroUpper to CMGE (vector) and CMHS (vector)
2020-04-22 20:46:14 +01:00
MerryMage
8cebb87d0d
A64: Implement CMGT (zero), CMEQ (zero), CMLT (zero)
2020-04-22 20:46:14 +01:00
MerryMage
7f68d556ab
decoder/a64: Rearrange SIMD two-register misc decoders
2020-04-22 20:46:14 +01:00
MerryMage
d5af052f06
A64: Implement CMGE (register)
2020-04-22 20:46:14 +01:00
MerryMage
9d85991906
A64: Implement CMHI, CMHS
2020-04-22 20:46:14 +01:00
MerryMage
e2b9b7c5b0
IR: Implement Vector{Less,Greater}{,Equal}{Signed,Unsigned}
2020-04-22 20:46:14 +01:00
MerryMage
0df6725f73
A64: Implement SMAX, SMIN, UMAX, UMIN
2020-04-22 20:46:14 +01:00
MerryMage
47c0ad0fc8
IR: Implement Vector{Max,Min}{Signed,Unsigned}
2020-04-22 20:46:14 +01:00
MerryMage
adb7f5f86f
A64: Implement CMGT (register)
2020-04-22 20:46:14 +01:00
MerryMage
f4775910f5
IR: Implement VectorGreaterSigned
2020-04-22 20:46:14 +01:00
MerryMage
1f5b3bca43
Exclusive fixups
...
* Incorrect size of exclusive_address
* Disable tests on exclusive memory instructions for now
2020-04-22 20:46:14 +01:00
MerryMage
8698f057d0
A64: Implement STXP, STLXP, LDXP, LDAXP
2020-04-22 20:46:14 +01:00
MerryMage
2a6619d59c
A64: Implement CLREX
2020-04-22 20:46:14 +01:00
MerryMage
b7a2c1a7df
A64: Implement STXRB, STXRH, STXR, STLXRB, STLXRH, STLXR, LDXRB, LDXRH, LDXR, LDAXRB, LDAXRH, LDAXR
2020-04-22 20:46:14 +01:00
MerryMage
8756487554
A64: Partially implement MRS
2020-04-22 20:46:14 +01:00
MerryMage
bfd65bedfe
A64: Implement DSB, DMB
2020-04-22 20:46:14 +01:00
MerryMage
5edd623b9d
Implement DC instructions
2020-04-22 20:46:14 +01:00
Lioncash
a9153218bd
A64: Implement NOT (vector)
2020-04-22 20:46:14 +01:00
MerryMage
2cb0a699ba
IR: Implement FPMax, FPMin
2020-04-22 20:46:14 +01:00
MerryMage
aed4fd3ec3
A64: Implement FADD (vector), vector variant
2020-04-22 20:46:14 +01:00
MerryMage
98c8e7d1af
IR: Implement FPVectorAdd
2020-04-22 20:46:14 +01:00
MerryMage
5f77ab28ee
A64: Implement SSHLL, SSHLL2
2020-04-22 20:46:14 +01:00
MerryMage
eae518a338
IR: Implement VectorSignExtend
2020-04-22 20:46:14 +01:00
MerryMage
3738043e58
A64: Implement DUP (element), vector variant
2020-04-22 20:46:14 +01:00
MerryMage
ce7628b6b5
load_store_multiple_structures: Improve IR codegen for selem == 1 case
2020-04-22 20:46:14 +01:00
MerryMage
f1cb5581c9
A64: Implement FSUB (vector)
2020-04-22 20:46:14 +01:00
MerryMage
b9cd345ddc
IR: Implement FPVectorSub
2020-04-22 20:46:14 +01:00
MerryMage
f378d2ef1b
Forward declare IR::Opcode and IR::Type where possible
2020-04-22 20:46:14 +01:00
MerryMage
6c9b4f0114
A64: Implement CNT
2020-04-22 20:46:14 +01:00
MerryMage
303088a51e
IR: Implement VectorPopulationCount
2020-04-22 20:46:14 +01:00
MerryMage
1dd2b33b87
A64: Implement MLS (vector)
2020-04-22 20:46:14 +01:00
MerryMage
5eac3abf52
A64: Implement MLA (vector)
2020-04-22 20:46:14 +01:00
MerryMage
3afd2fcbad
A64: Implement MUL (vector)
2020-04-22 20:46:14 +01:00
MerryMage
b6de612e01
IR: Implement VectorMultiply
2020-04-22 20:46:14 +01:00
MerryMage
e7041d7196
A64: Implement STR (register, SIMD&FP), LDR (register, SIMD&FP)
2020-04-22 20:46:14 +01:00
MerryMage
a455ff70c9
decoder/a64: Don't rearrange unrelated decoders
2020-04-22 20:46:14 +01:00
MerryMage
faeb77e8c4
A64: Implement SUB (vector)
2020-04-22 20:46:14 +01:00
MerryMage
bd106c3ae7
A64: Implement SIMD instruction SSRA, vector variant
2020-04-22 20:46:14 +01:00
MerryMage
f58aba9871
A64: Implement SIMD instruction SSHR, vector variant
2020-04-22 20:46:14 +01:00
MerryMage
715ae1c229
IR: Implement VectorArithmeticShiftRight
2020-04-22 20:46:14 +01:00
MerryMage
653c82d8f0
impl: Improve Vpart setter
2020-04-22 20:46:14 +01:00
MerryMage
e858ce0b35
A64: Implement SIMD instructions XTN, XTN2
2020-04-22 20:46:13 +01:00
MerryMage
132c783320
IR: Implement VectorNarrow
2020-04-22 20:46:13 +01:00
MerryMage
cbc9f361b0
IR: Implement VectorSub
2020-04-22 20:46:13 +01:00
MerryMage
3f93c77ace
A64: Implement SIMD instruction USRA, vector variant
2020-04-22 20:46:13 +01:00
MerryMage
fb9d20f27f
A64: Implement SIMD instruction USHR, vector variant
2020-04-22 20:46:13 +01:00
MerryMage
b22c5961f9
IR: Implement VectorLogicalShiftRight
2020-04-22 20:46:13 +01:00
MerryMage
7ff280827b
A64: Implement SIMD instructions USHLL, USHLL2
2020-04-22 20:46:13 +01:00
MerryMage
59ace60b03
IR: Implement VectorZeroExtend
2020-04-22 20:46:13 +01:00
MerryMage
d3a4e1efe2
IR: Vector instructions now take esize argument in emitter
2020-04-22 20:46:13 +01:00
MerryMage
1d0cd95b23
A64: Implement SIMD instruction SHL
2020-04-22 20:46:13 +01:00
MerryMage
f6247125c0
IR: Implement VectorLogicalShiftLeft{8,16,32,64}
2020-04-22 20:46:13 +01:00
MerryMage
15e8231f24
opcodes: Sort vector IR opcodes alphabetically
2020-04-22 20:46:13 +01:00
FernandoS27
15871910af
Implemented BSL, BIC, BIT and BIF vector instructions
2020-04-22 20:46:13 +01:00
MerryMage
ba4a779c62
A32/decoder/arm: bug: Correct bitstring for SRS
2020-04-22 20:46:13 +01:00
Lioncash
4e33629b0e
A64: Move SDIV and UDIV out of data_processing_multiply.cpp
2020-04-22 20:46:13 +01:00
Lioncash
35a29a9665
A64: Implement ZIP1
2020-04-22 20:46:13 +01:00
FernandoS27
586854117b
Implemented UMULH and SMULH instructions
2020-04-22 20:46:13 +01:00
MerryMage
1a7b7b541a
A64: Implement MOVI, MVNI, ORR (vector, immediate), BIC (vector, immediate)
...
There wasn't a clean way to seperate these instructions out.
2020-04-22 20:46:13 +01:00
MerryMage
8ab7d8175c
impl: Add AdvSIMDExpandImm
2020-04-22 20:46:13 +01:00
MerryMage
ea69cb4474
A64: Implement SUB (vector), scalar variant
2020-04-22 20:46:13 +01:00
MerryMage
4c5871d5d5
A64: Implement ADD (vector), scalar variant
2020-04-22 20:46:13 +01:00
MerryMage
2a0850c068
A64: Reorganize decoder tables (some vector entries were grouped with scalar entries)
2020-04-22 20:46:13 +01:00
MerryMage
7b33772ac6
A64: Implement BIC (vector, register)
2020-04-22 20:46:13 +01:00
MerryMage
eb5591859c
A64: Implement FMOV (general)
2020-04-22 20:46:13 +01:00
MerryMage
dd88cee15a
translate/impl: Add Vpart
2020-04-22 20:46:13 +01:00
MerryMage
cc9efd13c9
A64: Implement STLLRB, STLLRH, STLLR, LDLARB, LDLARH, LDLAR
2020-04-22 20:46:13 +01:00
MerryMage
81713c2b77
A64: Implement FCCMPE
2020-04-22 20:46:13 +01:00
MerryMage
ef906dbbfa
A64: Implement FCCMP
2020-04-22 20:46:13 +01:00
MerryMage
aac5af50e2
IR: FPCompare{32,64} now return NZCV flags instead of implicitly setting them
2020-04-22 20:46:13 +01:00
Lioncash
2ee39d6b36
A64: Implement FMOV (register)
2020-04-22 20:46:13 +01:00
MerryMage
b02b861242
A64: Implement STLRB, STLRH, STLR, LDARB, LDARH, LDAR
2020-04-22 20:46:13 +01:00
Lioncash
5a65313236
A64: Implement CCMP (immediate)
2020-04-22 20:46:13 +01:00
Lioncash
ab4664de61
A64: Implement CCMN (immediate)
2020-04-22 20:46:13 +01:00
Lioncash
a6c6539109
A64: Implement CCMP (register)
2020-04-22 20:46:13 +01:00
Lioncash
22632db337
microinstruction: Add ConditionalSelectNZCV opcode to ReadsFromCPSR()'s switch statement
2020-04-22 20:46:13 +01:00
MerryMage
c5033b5dda
A64: Implement CCMN (register)
2020-04-22 20:46:13 +01:00
MerryMage
dd2a6684fe
IR: Add ConditionalSelectNZCV instruction
2020-04-22 20:46:13 +01:00
MerryMage
4491746eae
A64: Implement FNEG
2020-04-22 20:46:13 +01:00
MerryMage
db958061a3
A64: Implement FABS
2020-04-22 20:46:13 +01:00
MerryMage
8765b421b7
A64: Implement FCSEL
2020-04-22 20:46:13 +01:00
MerryMage
7e82d8eede
A64: Implement SCVTF (scalar, integer), UCVTF (scalar, integer)
2020-04-22 20:46:13 +01:00
MerryMage
2409e5d082
A64: Implement FCVTZS (scalar, integer), FCVTZU (scalar, integer)
2020-04-22 20:46:13 +01:00
MerryMage
56bc7825ef
A64: Implement STR{,B,H} (register), LDR{,B,H,SB,SH,SW} (register), PFRM (register)
2020-04-22 20:46:13 +01:00
Lioncash
40614202e7
A64: Implement AESD
2020-04-22 20:46:13 +01:00
Lioncash
ccef85dbb7
A64: Implement AESE
2020-04-22 20:46:13 +01:00
MerryMage
8931ee346b
IR: Add IR instruction NZCVFromPackedFlags
...
This instruction expects NZCV to be in the high bits.
i.e.: The positions they were in PSTATE.
2020-04-22 20:46:13 +01:00
MerryMage
0bb4474fb9
A64: Implement INS (general)
2020-04-22 20:46:13 +01:00
MerryMage
d13704fdef
A64: Implement INS (element)
2020-04-22 20:46:13 +01:00
MerryMage
0642d49919
A64: Implement SMOV
2020-04-22 20:46:13 +01:00
MerryMage
5297027ebe
A64: Implement UMOV
2020-04-22 20:46:13 +01:00
MerryMage
47661b746b
basic_block: Fix bogus GCC maybe-uninitialized warning
2020-04-22 20:46:13 +01:00
MerryMage
1fb0957aa3
A64: Implement FCVT
2020-04-22 20:46:13 +01:00
MerryMage
ca38225e08
fuzz_with_unicorn: Skip instructions that need to be interpreted
2020-04-22 20:46:13 +01:00
MerryMage
4be55b8b84
A64: Implement FMOV (scalar, immediate)
2020-04-22 20:46:13 +01:00
MerryMage
a07c05ea51
A64: Implement STUR (SIMD&FP), LDUR (SIMD&FP)
2020-04-22 20:46:13 +01:00
MerryMage
93fcbdf1e2
A64: Implement FCMP, FCMPE
2020-04-22 20:46:13 +01:00
MerryMage
99d8ebe4d5
A64: Implement FMUL (scalar), FDIV (scalar), FADD (scalar), FSUB (scalar), FNMUL (scalar)
2020-04-22 20:46:13 +01:00
MerryMage
429dc24587
IR: Merge U32 and U64 variants of FP instructions
2020-04-22 20:46:13 +01:00
MerryMage
ed2bedec43
A64: Implement {ST,LD}{1,2,3,4} (multiple structures)
2020-04-22 20:46:13 +01:00
MerryMage
ebfc51c609
IR: Implement VectorSetElement{8,16,32,64}
2020-04-22 20:46:13 +01:00
Lioncash
a5c4fbc783
A64: Implement AESIMC and AESMC
2020-04-22 20:46:13 +01:00
Lioncash
af1384d700
A64: Implement CRC32
2020-04-22 20:46:12 +01:00
MerryMage
cc0eb18a0b
A32: data_processing: Remove !S assertions
2020-04-22 20:46:12 +01:00
MerryMage
865a30eb0d
A32: Implement BKPT
2020-04-22 20:46:12 +01:00
MerryMage
f023bbb893
A32: Add ExceptionRaised IR instruction and use it
2020-04-22 20:46:12 +01:00
Lioncash
7ffbebf290
A64: Implement CRC32C
2020-04-22 20:46:12 +01:00
MerryMage
d7044bc751
assert: Use fmt in ASSERT_MSG
2020-04-22 20:46:12 +01:00
MerryMage
52268298a8
a64_emit_x64: Perform RSB predictions
2020-04-22 20:46:12 +01:00
MerryMage
98ec9c5f90
A32: Change UserCallbacks to be similar to A64's interface
2020-04-22 20:46:12 +01:00
MerryMage
6fc228f7fd
ir_opt: Add A64 Get/Set Elimination Pass
2020-04-22 20:46:12 +01:00
MerryMage
e01b500aea
ir_emitter: Allow the insertion point for new instructions to be set
2020-04-22 20:46:12 +01:00
Lioncash
7734cf1050
A64: Implement EXTR
2020-04-22 20:46:12 +01:00
MerryMage
88ae7fce52
A64: Implement LDP (SIMD&FP) and STP (SIMD&FP)
2020-04-22 20:44:38 +01:00
MerryMage
b513b2ef05
IR: Implement IR instructions A64{Get,Set}S
2020-04-22 20:44:38 +01:00
Lioncash
67443efb62
General: Convert multiple namespace specifiers to nested namespace specifiers where applicable
...
Makes namespacing a little less noisy
2020-04-22 20:44:38 +01:00
Lioncash
7abd673a49
A64: Zero upper 64 bits in ORN if using the 64-bit variant
...
Resolves a TODO
2020-04-22 20:44:38 +01:00
MerryMage
ba3d6da0c8
load_store_register_unprivileged: bug: LDTRSW
2020-04-22 20:44:38 +01:00
MerryMage
75756137c6
A64: Implement CMEQ (register, vector)
2020-04-22 20:44:38 +01:00
MerryMage
d5283e46e8
IR: Implement IR instructions VectorEqual{8,16,32,64,128}
2020-04-22 20:44:38 +01:00
Fernando Sahmkow
e0c12ec2ad
A64: Implemented EOR (vector), ORR (vector, register) and ORN (vector) Instructions ( #142 )
2020-04-22 20:44:38 +01:00
MerryMage
94383fd934
microinstruction: Missed A64{Read,Write}Memory128 from opcode information
2020-04-22 20:44:38 +01:00
James Rowe
589ad7232f
Fixup: Xn|SP are 64 bit addresses encoded in the Rn field
2020-04-22 20:44:38 +01:00
James Rowe
ae880d8391
A64: Fix bugs and address review comments
2020-04-22 20:44:38 +01:00
James Rowe
3aeb7ca50c
Add missing returns
2020-04-22 20:44:38 +01:00
James Rowe
41e6e659c5
A64: Implement Load/Store register (unprivileged)
2020-04-22 20:44:37 +01:00
MerryMage
285fd22c30
IR: Add IR instruction VectorZeroUpper
2020-04-22 20:44:37 +01:00
FernandoS27
ab84524806
Implemented SDIV and UDIV instructions
2020-04-22 20:44:37 +01:00
MerryMage
6033b05ca6
A64: Implement LDR/STR (immediate, SIMD&FP)
2020-04-22 20:44:37 +01:00
MerryMage
e1df7ae621
IR: Add IR instructions A64Memory{Read,Write}128
...
This implementation only works on macOS and Linux.
2020-04-22 20:44:37 +01:00
MerryMage
e00a522cba
IR: Add IR instruction VectorGetElement{8,16,32,64}
2020-04-22 20:44:37 +01:00
MerryMage
28ccd85e5c
IR: Add IR instruction ZeroExtendToQuad
2020-04-22 20:44:37 +01:00
MerryMage
3caf192f60
A64: Implement DUP (general)
2020-04-22 20:44:37 +01:00
MerryMage
793753bf63
IR: Implement Vector{Lower,}Broadcast{8,16,32,64}
2020-04-22 20:44:37 +01:00
Lioncash
8ee854232c
General: Default constructors and destructors where applicable
2020-04-22 20:44:37 +01:00
Lioncash
d1e4526e1c
ir_emitter: Remove unused includes
2020-04-22 20:44:37 +01:00
Lioncash
6f9216d544
A64: Implement RBIT
2020-04-22 20:44:37 +01:00
MerryMage
9b0a21915f
ir_emitted: Remove unimplemented IR instruction Unimplemented
2020-04-22 20:44:37 +01:00
MerryMage
d4b05b28cf
A64: Implement CLS
...
This is not the cleanest implementation.
2020-04-22 20:42:46 +01:00
MerryMage
b8e26bfdc3
A64: Implement ADDP (vector)
2020-04-22 20:42:46 +01:00
MerryMage
eaf545877a
IR: Implement Vector{Lower,}PairedAdd{8,16,32,64}
2020-04-22 20:42:46 +01:00
MerryMage
394bd57bb6
microinstruction: bug: Add missing opcodes
2020-04-22 20:42:46 +01:00
Lioncash
bb1c5bd3b2
A64: Implement SMADDL, SMSUBL, UMADDL, and UMSUBL
2020-04-22 20:42:46 +01:00
Lioncash
c1a25bfc2f
A64: Implement MADD and MSUB
2020-04-22 20:42:46 +01:00
Lioncash
b7c5055d42
A64: Implement CLZ
2020-04-22 20:42:46 +01:00
Lioncash
b612782445
opcodes: Add 64-bit CountLeadingZeroes opcode
2020-04-22 20:42:46 +01:00
MerryMage
4c4efb2213
data_processing_register: Clean-up
2020-04-22 20:42:46 +01:00
Lioncash
ae5dbcbed6
A64: Implement HINT, NOP, YIELD, WFE, WFI, SEV, and SEVL
...
Truly the most difficult A64 instructions to implement.
2020-04-22 20:42:46 +01:00
Lioncash
4d8f4aa8af
A64: Implement ASRV, LSLV, LSRV, and RORV
2020-04-22 20:42:46 +01:00
Lioncash
a8a65beb2b
data_processsing_conditional_select: Implement CSINC, CSINV and CSNEG
2020-04-22 20:42:46 +01:00
MerryMage
f81d0a2536
A64: Implement AND (vector)
2020-04-22 20:42:46 +01:00
MerryMage
a63fc6c89b
A64: Implement ADD (vector, vector)
2020-04-22 20:42:46 +01:00
Thomas Guillemard
896cf44f96
A64: Implement REV, REV32, and REV16 ( #126 )
2020-04-22 20:42:46 +01:00
MerryMage
5eb0bdecdf
IR: Simplify types. F32 -> U32, F64 -> U64, F128 -> U128
...
ARM's Architecture Specification Language doesn't distinguish between floats and integers
as much as we do. This makes some things difficult to implement. Since our register
allocator is now capable of allocating values to XMMs and GPRs as necessary, the
Transfer IR instructions are no longer necessary as they used to be and they can be
removed.
2020-04-22 20:42:46 +01:00
MerryMage
fff8e019dc
reg_alloc: Consider bitwidth of data and registers when emitting instructions
2020-04-22 20:42:46 +01:00
MerryMage
144b629d8a
A64: Implement CSEL
2020-04-22 20:42:45 +01:00
MerryMage
6395f09f94
IR: Implement Conditional Select
2020-04-22 20:42:45 +01:00
MerryMage
19da68568e
A64/translate/branch: bug: Read-after-write error in BLR
2020-04-22 20:42:45 +01:00
MerryMage
9f57283a30
A64: Implement SBFM, BFM, UBFM
2020-04-22 20:42:45 +01:00
MerryMage
cdbc8d07a5
A64: Implement MOVN, MOVZ, MOVK
2020-04-22 20:42:45 +01:00
MerryMage
ecebe14a01
ir/location_descriptor: Add missing <functional> header for std::hash
2020-04-22 20:42:45 +01:00
MerryMage
c6a091d874
A64: Optimization: Merge interpret blocks
2020-04-22 20:42:45 +01:00
MerryMage
21fe61eac6
A64/data_processing_pcrel: bug: ADR{,P} instructions sign extend their immediate
2020-04-22 20:42:45 +01:00
MerryMage
7c4b70751c
A64/data_processing_addsub: bug: {ADD,SUB}S (extended register) instructions write to ZR when d = 31
2020-04-22 20:42:45 +01:00
MerryMage
0992987c98
A64: Add ExceptionRaised IR instruction
...
The purpose of this instruction is to raise exceptions when certain decode-time
issues happen, instead of asserting at translate time. This allows us to
use the translator for code analysis without worrying about unnecessary asserts,
but also provides flexibility for the library user to perform custom behaviour
when one of these states are raised.
2020-04-22 20:42:45 +01:00
MerryMage
61125d6dd1
A64/translate: Add TranslateSingleInstruction function
2020-04-22 20:42:45 +01:00
MerryMage
aa74a8130b
Misc. fixups of MSVC build
2020-04-22 20:42:45 +01:00
MerryMage
a1dfa01515
imm: Suppress MSVC warning C4244: value will never be truncated
2020-04-22 20:42:45 +01:00
MerryMage
26da149639
imm: compiler bug: MSVC 19.12 with /permissive- flag doesn't support fold expressions
2020-04-22 20:42:45 +01:00
MerryMage
b34c6616d4
A64/decoder: Split decoder data from header
2020-04-22 20:42:45 +01:00
MerryMage
595f157e5e
A64: Implement LDP, STP
2020-04-22 20:42:45 +01:00
MerryMage
511215342b
A64/location_descriptor: Fix -fpermissive warning on GCC
2020-04-22 20:42:45 +01:00
MerryMage
243f06c613
A64: Implement LDP, STP
2020-04-22 20:42:45 +01:00
MerryMage
25411da838
A32: Implement load stores (immediate)
2020-04-22 20:42:45 +01:00
MerryMage
2aadeec291
A64: Implement SVC
2020-04-22 20:42:45 +01:00
MerryMage
9e27e4d250
imm: bug: SignExtend wasn't working for T with bit size > 32
2020-04-22 20:42:45 +01:00
MerryMage
68391b0a05
A64: Implement SVC
2020-04-22 20:42:45 +01:00
MerryMage
cb481a3a48
A64: Implement compare and branch
2020-04-22 20:42:45 +01:00
MerryMage
e8bcf72ee5
A64: PSTATE access and tests
2020-04-22 20:42:45 +01:00
MerryMage
23f3afe0b3
A64: Implement branch (register)
2020-04-22 20:42:45 +01:00
MerryMage
86d1095df7
A64: Implement branch
2020-04-22 20:42:45 +01:00
MerryMage
0641445e51
A64: Implement logical
2020-04-22 20:42:45 +01:00
MerryMage
5a1d88c5dc
A64: Implement pcrel
2020-04-22 20:42:45 +01:00
MerryMage
c09e69bb97
A64: Implement addsub instructions
2020-04-22 20:42:44 +01:00
MerryMage
d1cef6ffb0
A64: Implement ADD_shifted
2020-04-22 20:42:44 +01:00
MerryMage
d1eb757f93
A64: Backend framework
2020-04-22 20:42:44 +01:00
MerryMage
e161cf16f5
A64: Initial framework
2020-04-22 20:42:44 +01:00
MerryMage
f61da0b5a9
IR: Compile-time type-checking of IR
2020-04-22 20:39:27 +01:00
MerryMage
44f7f04b5c
IR/Value: Rename RegRef and ExtRegRef to A32Reg and A32ExtReg
2020-04-22 20:39:27 +01:00
MerryMage
83022322d1
Make IR->A32 LocationDescriptor conversion explicit
2020-04-22 20:39:27 +01:00
MerryMage
9d15e0a8e1
Final A32 refactor
2020-04-22 20:39:27 +01:00
MerryMage
8bef20c24d
IR: Split off A32 specific opcodes
2020-04-22 20:33:32 +01:00
MerryMage
b1f0cf9278
A32: Split off A32 specific IREmitter
2020-04-22 20:33:32 +01:00
MerryMage
b3c73e2622
Label A32 specific code appropriately
2020-04-22 20:33:30 +01:00
MerryMage
4393473d06
interface: Allow saving and storing of contexts
2020-04-22 20:26:40 +01:00
MerryMage
19a7fb8992
jit_state: Split off CPSR.NZCV
2020-04-22 20:26:40 +01:00
MerryMage
311361b409
jit_state: Split off CPSR.{E,T}
...
This allows us to improve code-emission for PopRSBHint. We also improve
code emission other terminals at the same time.
2020-04-22 20:26:40 +01:00
MerryMage
cb119c2f72
emit_x64: Use boost::icl::interval_map to speed up ranged invalidation
2020-04-22 20:26:40 +01:00
MerryMage
80c56aa89d
Remove unnecessary use of boost::make_optional
...
Closes #119 .
2020-04-22 20:26:12 +01:00
MerryMage
de6a93a160
decoder_detail: Lambda captures may be unused if iota is an empty sequence
...
Closes #120
2020-04-22 20:26:12 +01:00
MerryMage
3141dadea9
Remove UNUSED macro
2020-04-22 20:26:12 +01:00
MerryMage
7cac9519b0
microinstruction: Remove DecrementRemainingUses
2020-04-22 20:26:12 +01:00
MerryMage
5d72f7048f
basic_block: Add inst address and use count to DumpBlock
...
This additional output assists with debugging.
2020-04-22 20:26:12 +01:00
MerryMage
d1e0a29cd9
Implement IR instruction PackedSelect, reimplement SEL
2020-04-22 20:26:07 +01:00
MerryMage
814e378249
VCMP and VCMPE were the other way around
...
- This was due to a misunderstanding of what the E in VCMPE means.
- The E refers to an exception being raised when a QNaN is encountered.
- Added unit tests for VCMP{E}
2020-04-22 20:26:07 +01:00
MerryMage
29471be317
Standardize location of storage-class specifiers: Place at beginning of declarations
...
Justification: C99 specifies that doing otherwise is an obsolescent feature.
2017-09-29 01:23:45 +01:00
MerryMage
993e142c6b
disassembler: Fix RegList
2017-08-05 01:57:29 +01:00
MerryMage
6197bde0fc
disassembler_arm: Fix disassembly of LDRH (reg)
2017-07-30 18:45:55 +01:00
MerryMage
599a613fea
Move SEL from status_register_access to misc
2017-04-25 13:57:27 +01:00
MerryMage
50bb317104
parallel: UQADD8 and UQADD16 are unpredictable when {d|n|m} == 15
2017-04-25 13:45:31 +01:00
MerryMage
7639dfea51
coprocessor: Use && instead of & with boolean arguments
2017-04-22 15:05:31 +01:00
MerryMage
1c21ae6bcd
saturated: Implement QASX, QSAX, UQASX, UQSAX
2017-04-10 10:21:51 +01:00
MerryMage
523ae542f4
microinstruction: Implement HasAssociatedPseudoOperation
2017-04-04 13:10:50 +01:00
MerryMage
05e97058c3
parallel: Add and Subtract with Exchange improvements
...
* Remove asx argument from PackedHalvingSubAdd{U16,S16} IR instruction
* Implement Packed{Halving,}{AddSub,SubAdd}{U16,S16} IR instructions
* Implement SASX, SSAX, UASX, USAX
2017-03-24 15:56:24 +00:00
Lynn
fd068ed6b8
Ranged cache invalidation
2017-03-20 11:58:25 +00:00
MerryMage
92a01b0cd8
Prefer ASSERT to DEBUG_ASSERT
2017-02-26 23:30:40 +00:00
MerryMage
bbeea72eba
ir_opt: Remove redundant shift instructions
2017-02-26 15:28:14 +00:00
MerryMage
4ed8ee7489
microinstruction: Void arguments when invalidating instruction
2017-02-18 21:29:23 +00:00
MerryMage
7fa5845c1f
extension: Implement SXTAB16 and SXTB16
2017-02-18 20:14:44 +00:00
MerryMage
73d1cf36c3
extension: Simplify UXTB16
2017-02-18 20:14:39 +00:00
MerryMage
6edcfeba0b
extension: Simplify rotation code
2017-02-18 20:14:37 +00:00
MerryMage
cc9d2c4603
saturated: Implement SSAT16 and USAT16
2017-02-18 17:43:57 +00:00
MerryMage
358cf7c322
vfp: Implement vectorized VFP instructions
2017-02-18 01:13:25 +00:00
MerryMage
f2dd82967f
load_store: Simplify implementation
...
* Remove dead code
* Standardise code style with rest of code base
2017-02-16 22:28:56 +00:00
MerryMage
5a20a37d3f
arm/fpscr: Correct Stride implementation
2017-02-11 12:13:57 +00:00
MerryMage
033e8b9b1e
vfp: Rename variables a, b, c to more sensible names
2017-02-06 21:14:36 +00:00
MerryMage
642ccb0f66
ir/value: Support U16 immediates
2017-01-29 22:58:11 +00:00
MerryMage
5f7ffe0d0b
microinstruction: Implement Inst::AreAllArgsImmediates
2017-01-29 22:56:59 +00:00
MerryMage
22804dc6a5
microinstruction: Arguments of Inst::Use and Inst::UndoUse should be const
2017-01-29 22:53:46 +00:00
MerryMage
1d4446cad5
microinstruction: Removed unnecessary reference from argument of Inst::ReplaceUsesWith
2017-01-29 22:52:33 +00:00
MerryMage
e3bc7d039f
Implement CDP, LDC, MCR, MCRR, MRC, MRRC, STC
2017-01-08 14:56:06 +00:00
MerryMage
48693eb6ff
Implement coprocessor-related microinstructions
...
* CoprocInternalOperation
* CoprocSendOneWord
* CoprocSendTwoWords
* CoprocGetOneWord
* CoprocGetTwoWords
* CoprocLoadWords
* CoprocStoreWords
2017-01-08 14:56:06 +00:00
MerryMage
b3ae57619d
types: Formatting for CoprogReg
2017-01-08 14:56:06 +00:00
MerryMage
d8a37e287c
IR: Add IR type CoprocInfo
2017-01-08 14:56:06 +00:00
MerryMage
1efd3a764d
IR: Remove unused microinstructions NegateLowWord and NegateHighWord
2017-01-05 20:16:39 +00:00
Fernando Sahmkow
70f4235ee9
Implement UXTAB16 ( #78 )
2016-12-29 12:15:18 +00:00
FernandoS27
d5610eb26c
Implement UHASX, UHSAX, SHASX and SHSAX ( #75 )
2016-12-28 21:32:22 +00:00
MerryMage
e9df248d56
decoder_detail: Support const member functions
2016-12-23 11:33:40 +00:00
MerryMage
b1bad4b5cc
decoder_detail: static_assert member function is from visitor class
...
Improves readability of compiler errors.
2016-12-23 11:10:02 +00:00
MerryMage
c78f153ddb
decoder/arm: Sort decoders according to number of bits in mask
2016-12-22 15:25:38 +00:00
MerryMage
cb38c94b58
decoder/arm: Fix decoding of RFE
2016-12-22 15:25:07 +00:00
MerryMage
7e77ee7fd6
decoder/arm: Fix decoding of MCR2
2016-12-22 15:11:47 +00:00
Fernando Sahmkow
677f62dd6f
Implement SHSUB8 and SHSUB16 ( #74 )
...
* Implement IR operations PackedHalvingSubS8 and PackedHalvingSubS16
2016-12-22 12:02:24 +00:00
MerryMage
967f3cf7e1
Implement CPS (Thumb)
...
* Since currently only User mode is emulated, CPS is a NOP.
2016-12-21 22:44:27 +00:00
MerryMage
c764a2b889
Implement MUL (T1)
2016-12-21 22:44:14 +00:00
MerryMage
36082087de
callbacks: Read code using MemoryReadCode callback
2016-12-21 21:39:14 +00:00
MerryMage
56ea2386d3
saturated: Implement SSAT and USAT
2016-12-21 19:51:25 +00:00
MerryMage
6a269a6ebd
IR: Add microinstructions UnsignedSaturation and SignedSaturation
2016-12-21 19:51:25 +00:00
FernandoS27
8919265d2c
Implement SADD8, SADD16, SSUB8, SSUB16, USUB16
2016-12-20 21:52:38 +00:00
FernandoS27
3f6ecfe245
Implemented USAD8 and USADA8
2016-12-20 21:52:38 +00:00
MerryMage
96e46ba6b5
Implement QADD, QSUB, QDADD, QDSUB
2016-12-15 22:34:29 +00:00
MerryMage
b178ab3bec
Replace (void)(...); idiom with UNUSED macro
2016-12-15 21:36:05 +00:00
MerryMage
df197ff6b1
arm/types: Use smallest possible standard type that has sufficient bits for Imm{} types
2016-12-15 20:52:21 +00:00
MerryMage
546198d603
translate_arm: Mark arguments as unused
2016-12-15 20:52:20 +00:00
MerryMage
8d5522f4a0
dissassembler_arm: Support BKPT, QASX, QSAX, UQASX, UQSAX
2016-12-15 20:16:08 +00:00
MerryMage
52e1445f43
Implement USUB8
2016-12-05 00:29:15 +00:00
MerryMage
5c1aab1666
Implement CLZ
...
Includes tests
2016-12-04 22:56:33 +00:00
MerryMage
1a1646d962
Implement UADD8
2016-12-04 20:52:33 +00:00
MerryMage
7cad6949e7
IR: Implement new pseudo-operation GetGEFromOp
2016-12-04 20:52:06 +00:00
MerryMage
e166965f3e
Implement VCMP
2016-12-03 11:41:09 +00:00
MerryMage
f2fe376fc6
Support 64-bit immediates
2016-12-03 11:29:50 +00:00
Mat M
de1f831d79
microinstruction: Make use_count private ( #53 )
...
Makes the operation a part of the direct interface.
2016-11-30 21:51:06 +00:00
Merry
0ff8c375af
Implement UHSUB8 and UHSUB16 ( #48 )
2016-11-26 18:27:21 +00:00
Merry
cb17f9a3ed
Implement SHADD8 and SHADD16 ( #47 )
2016-11-26 18:12:29 +00:00
Sebastian Valle
11ae8d1ffa
Added disassembler support for the ARM parallel add/subtract (modulo arithmetic) instructions. ( #50 )
2016-11-26 17:58:09 +00:00
Sebastian Valle
ed71e31cea
Added disassembler support for the ARM parallel and saturated instructions ( #44 )
2016-11-26 17:49:46 +00:00
MerryMage
c0c1bb1094
Implemented UHADD16
2016-11-26 11:28:20 +00:00
Yuri Kunde Schlesner
9ec51f74bd
libfmt: Update version to current master
2016-11-25 20:47:04 +00:00
Sebastian Valle
4d44474ad4
Implemented the ARM UHADD8 instruction. ( #45 )
...
The x64 implementation uses the SSSE3 instruction PSHUFB.
A non-SSE fallback is provided in case the CPU doesn't support it.
2016-11-25 20:32:22 +00:00
Sebastian Valle
f32921d493
ARM: Implemented UXTB16. ( #42 )
...
It passes tests.
2016-11-24 08:21:12 +00:00
Sebastian Valle
32615d0eff
Implemented the PKHTB and PKHBT instructions with tests. ( #40 )
2016-11-23 21:45:18 +00:00
MerryMage
780ff8e00e
status_register_access: SEL: Use GetGEFlags
2016-11-23 19:47:35 +00:00
MerryMage
b6f7b8babd
ir: Implement GetGEFlags, SetGEFlags
2016-11-23 19:44:27 +00:00
Sebastian Valle
d589c63107
Implemented the ARM SEL instruction, with tests. ( #39 )
...
The test for this instruction is very peculiar. As the instruction's behavior depends on the value of the CPSR, we generate a MSR instruction after each SEL instruction to change the CPSR.
2016-11-23 18:14:07 +00:00
Mat M
65dcf45ca6
FPSCR: Mask away reserved bits ( #34 )
2016-09-21 17:51:13 +01:00
MerryMage
792f2bfd94
translate_arm: Remove unused method ArmTranslatorVisitor::LinkToNextInstruction
2016-09-21 14:07:53 +01:00
Mat M
f75acd6cfb
decoder: Generify the matcher interface ( #33 )
...
Gets rid of a bit of duplication while remaining compatible
with the current interfaces in place.
2016-09-17 09:48:18 +01:00
Mat M
943487ecee
disassembler: Provide includes to function declarations ( #32 )
2016-09-14 23:03:09 +01:00
Mat M
72897b5def
types: Provide ostream operator<< overloads where applicable ( #30 )
2016-09-07 14:21:17 +01:00
Mat M
6a2174ebfa
Add missing explicit specifiers ( #27 )
2016-09-07 12:08:48 +01:00
Mat M
6e0f27a500
types: Add helpers for determining single and doubleword extension registers ( #26 )
2016-09-07 12:08:35 +01:00
Mat M
5bc9ce544f
arm_types: Move into arm folder ( #25 )
2016-09-06 00:52:33 +01:00
Mat M
b40d19c3b7
location_descriptor: Provide operator<< string overload ( #24 )
2016-09-05 21:31:25 +01:00
Mat M
6d53bb6d7e
arm_types: Split out LocationDescriptor ( #20 )
...
This isn't really an ARM-specific type, since it's used to indicate a
Block location.
2016-09-05 11:54:09 +01:00
Mat M
84336cf29d
value: Change Value into a class ( #19 )
...
'struct' is a little bit of a misnomer, considering it has invariants
2016-09-05 11:53:56 +01:00
Mat M
858796a029
Eliminate variable shadowing warnings with MSVC ( #17 )
2016-09-04 11:30:57 +01:00
Mat M
7f9a0c3c38
Remove unnecessary explicit includes ( #16 )
2016-09-03 21:48:03 +01:00
Mat M
05b189bc26
arm_types: Specialize std::hash for LocationDescriptor ( #14 )
...
Same thing, but with the benefit of working with anything that uses
std::hash by default.
2016-09-03 12:48:47 +01:00
Mat M
8c4df46580
FPSCR: Make value constructor explicit ( #13 )
...
Maintains consistency between the PSR helper.
2016-09-03 12:48:31 +01:00
Mat M
5aa4f753b6
load_store: Add checks for unpredictability to other singular store instructions ( #11 )
2016-09-02 21:10:28 +01:00
Mat M
6ec651498d
arm: Add PSR helper type ( #3 )
2016-09-02 17:34:33 +01:00
Mat M
00d0f4d5ff
load_store: Add correctness checks for STRD variants ( #7 )
...
STRD doesn't allow the use of the PC in either Rt or Rt2
2016-09-02 17:32:02 +01:00
MerryMage
ba04be5071
travis: Build on OS X
2016-09-02 17:08:09 +01:00
MerryMage
b3743e9453
Revert "arm_types: Don't use std::hash<u64>() for LocationDescriptorHash"
...
This reverts commit 519c714dbc
.
2016-09-02 14:33:56 +01:00
MerryMage
519c714dbc
arm_types: Don't use std::hash<u64>() for LocationDescriptorHash
...
Apple Clang (clang-600.0.54 on x86_64-apple-darwin13.4.0) complains with:
implicit instantiation of undefined template 'std::__1::hash<unsigned long long>'
2016-09-02 12:45:09 +01:00
Mat M
a465b2ddbc
ir_emitter: Fix typo. ClearExlcusive -> ClearExclusive ( #5 )
2016-09-02 12:17:22 +01:00
Mat M
ea157dfd52
translate_arm: const-correctness ( #6 )
2016-09-02 12:17:02 +01:00
Mat M
7e3c981974
translate: Forward declare LocationDescriptor ( #2 )
2016-09-01 09:46:35 +01:00
MerryMage
dca3b2f079
Implement VMRS and VMSR
2016-08-26 22:47:54 +01:00
Lioncash
0102951bdd
Convert formatting over to fmtlib
2016-08-26 13:13:19 +01:00
MerryMage
4322c0907c
microinstruction: Rename FindUseWithOpcode to GetAssociatedPseudoOperation, encapsulate associated variables
2016-08-25 21:08:47 +01:00
MerryMage
30df51c2dc
ir_emitter: Should be in the IR namespace, not the Arm namespace
2016-08-25 17:36:42 +01:00
MerryMage
922d1fd198
Merge branch 'xbyak'
2016-08-25 16:54:48 +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
Lioncash
1d8432487d
arm_types: Provide the not-equals operator overload for LocationDescriptor
...
Generally if == has an overload, != should be provided for symmetry.
2016-08-25 14:08:16 +01:00
MerryMage
dc26afbd7e
translate_arm: Translate more than one conditional instruction in a block
2016-08-25 13:05:33 +01:00
MerryMage
aa9b63bac4
basic_block: DumpBlock now dumps terminal details
2016-08-25 13:01:32 +01:00
Lioncash
37755cbfec
translate: Simplify function pointer calls
...
They can just be called like regular functions
2016-08-24 23:19:50 +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
78464a8f01
translate_arm/vfp2: Implement VSTM (A1, A2)
2016-08-23 20:54:38 +01:00
MerryMage
a96704eb0f
arm_types: new_reg >= 0 is always true since new_reg is unsigned
2016-08-23 20:11:41 +01:00
MerryMage
7a01dba3c4
arm_types: Change type signature of operator+ to size_t instead of int
2016-08-23 20:07:53 +01:00
MerryMage
af9a68f0d1
translate_arm/vfp2: Implement VLDM (A1, A2)
2016-08-23 20:07:06 +01:00
Lioncash
d5805cc6eb
intrusive_list: Add size querying
...
Since we store pointers and have an interface for iterators
set up, the count is just the distance from the beginning
to the end of the list.
Nice thing is that because of this, basic blocks also get
the ability to have a size count without needing to do anything
directly.
2016-08-23 19:52:09 +01:00
Lioncash
2180a4be7a
basic_block: Use a range-based for loop for iteration
2016-08-23 19:51:01 +01:00
Lioncash
867d345fdc
disassembler: Deduplicate SignStr
...
Also just makes it return a character, rather than a pointer to a
string.
2016-08-23 16:40:33 +01:00
MerryMage
e0f9dead5d
microinstruction: Identity's type depends on the type of its argument
2016-08-23 15:48:30 +01:00
MerryMage
8c7a81a308
VPOP and VPUSH are floating-point load-store instructions
2016-08-23 14:26:50 +01:00
MerryMage
8d1b9f32ca
Standardize indentation of switch statments
2016-08-23 12:19:27 +01:00
MerryMage
2471be317e
arm_types: Implement LocationDescription::FPSCR_RMode
2016-08-23 02:22:04 +01:00
Lioncash
47f285249b
microinstruction: Introduce convenience informational functions
...
Whenever more rigorous optimizations are attempted (or even basic ones),
it's usually helpful to know what overall kind of instruction is being
dealt with, in the event certain classes of instructions may be eligible
for optimization.
2016-08-22 21:36:48 +01:00
Lioncash
06ec4b5977
microinstruction: Make constructor explicit
2016-08-22 16:01:18 +01:00
MerryMage
843d29b5a9
translate_arm/branch: Read-after-write in arm_BLX_reg
...
When BLX LR is translated, BXWritePC(GetRegister(Reg::LR)) was executed
after the SetRegister(Reg::LR, _) update was done.
2016-08-22 15:53:56 +01:00
MerryMage
d8bee60947
translate_thumb: Read-after-write in thumb16_BLX_reg
...
When the instruction BLX LR is translated, BXWritePC(GetRegister(Reg::LR))
was executed after the SetRegister(Reg::LR, _) update was performed.
2016-08-22 14:28:51 +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
a8ba15f0d5
intrusive_list: Make Remove and IsEmpty stdlib compatible
...
Makes the name match the standard library equivalents.
C++17 introduces non-member empty() which allows for nicer handling
in generic contexts. May as well make the data structure compatible with
it.
2016-08-19 20:25:18 +01:00
Lioncash
23d190f7b0
intrusive_list: Support inserters
...
Allows std::inserter, std::back_inserter, and std::front_inserter to work
with intrusive lists.
2016-08-19 20:25:17 +01:00
MerryMage
2d6a86e43c
Remove <cassert>
2016-08-19 01:53:24 +01:00
MerryMage
192a0029be
ir/opcodes: Implement IR::AreTypesCompatible
...
Type-checking is now occuring in more than one place.
2016-08-19 01:34:14 +01:00
Tillmann Karras
9782e7da3f
verification_pass: show type errors
2016-08-19 01:17:30 +01:00
Tillmann Karras
dad7724b86
TranlateArm: implement remaining multiplies
...
SMLALxy, SMLAxy, SMULxy SMLAWy, SMULWy, SMLAD, SMLALD, SMLSD, SMLSLD,
SMUAD, SMUSD
2016-08-19 01:08:38 +01:00
MerryMage
fe15cbd50e
translate_arm/parallel: Detect UNPREDICTABLE instructions
2016-08-19 00:59:07 +01:00
MerryMage
2119dfc926
translate_arm/multiply: MLA is UNPREDICTABLE when Ra == R15
2016-08-19 00:59:05 +01:00
MerryMage
0d0f4b1b4f
translate_arm/load_store: Correct implementation for LDM*
2016-08-19 00:59:04 +01:00
MerryMage
4acc481463
translate_arm/load_store: Handle unpredictable instructions
...
This necessated handling literal versions of the instructions separately
as they had different requirements. The rationale for detecting
unpredictable instructions is because:
a. they are unlikely to be outputted by a well-behaved compiler
b. their behaviour may change between different processors
I would rather unpredictable instructions fail loudly than silently do
approximately the right thing.
2016-08-19 00:59:02 +01:00
MerryMage
5869e79b9c
translate_arm: Simplify EmitImmShift and EmitRegShift
2016-08-19 00:21:31 +01:00
MerryMage
b8cf43c43e
translate_arm/data_processing: Rd == R15 is unpredictable for rsr instructions
2016-08-18 18:23:05 +01:00
MerryMage
efc8d2f772
arm_translator: NV conditional is obsolete
2016-08-18 18:21:48 +01:00
MerryMage
5f7d940fde
disassemble_arm: Partially implement coprocessor and hint instructions
2016-08-18 18:21:16 +01:00
MerryMage
36a916a766
decoder/arm: Correct NOP decoder
2016-08-18 18:20:29 +01:00
MerryMage
e9e7ac6e65
decoder/arm: Correct PLD decoder for v6K
2016-08-18 18:19:34 +01:00
Lioncash
841098a0bc
ir: separate components out a little more
2016-08-17 20:46:21 +01:00
Lioncash
9ed9f4c565
mp: Generalize function information retrieval
...
Generalizes MemFnInfo to be compatible with all function types.
Also adds type introspection for arguments, as well as helper templates for the common types supported by all partial specializations.
2016-08-17 10:08:40 +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
e164ede4dc
TranslateArm: Implement MRS, MSR (imm), MSR (reg)
2016-08-15 11:50:49 +01:00
bunnei
30f3d869cc
TranslateArm: Implement VPUSH and VPOP.
2016-08-13 19:37:03 +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
bunnei
127fbe99cb
TranslateArm: Implement QSUB8.
2016-08-12 19:00:44 +01:00
bunnei
86fe29c6d2
TranslateArm: Implement UQSUB8.
2016-08-12 19:00:44 +01:00
MerryMage
1029fd27ce
Update documentation (2016-08-12)
2016-08-12 18:17:31 +01:00
MerryMage
3808938c98
Fix SETEND
2016-08-11 19:15:58 +01:00
bunnei
218980cf69
load_store: Implement LDRSB and LDRSH.
2016-08-11 17:18:20 +01:00
MerryMage
0e5593ba62
TranslateArm: Implement SETEND
2016-08-11 17:15:33 +01:00
MerryMage
8964b38cf9
IR/DumpBlock: Print references to ExtRegs
2016-08-11 17:15:02 +01:00
MerryMage
b4c586d5ef
TranslateArm: VSTR: Correct behaviour in big-endian mode
2016-08-10 16:43:37 +01:00
MerryMage
945498a16a
DisassemblerArm: Disassemble SETEND
2016-08-10 16:15:07 +01:00
bunnei
8e8db6e137
TranslateArm: Implement VSTR.
2016-08-10 15:01:23 +01:00
MerryMage
df39308e03
TranslateArm: Implement CLREX, LDREX, LDREXB, LDREXD, LDREXH, STREX, STREXB, STREXD, STREXH, SWP, SWPB
2016-08-09 22:57:20 +01:00
MerryMage
d921390928
TranslateArm: Add santity check to see if we've emitted a terminal instruction
2016-08-09 22:47:41 +01:00
MerryMage
2eec43178a
IR: Opaque can be of any type
2016-08-09 22:46:44 +01:00
MerryMage
82f42d065f
DisassemblerArm: Implemented disassembly of STR*/LDR* instructions
2016-08-09 22:44:42 +01:00
MerryMage
d0d51ba346
TranslateArm: Implement STM, STMDA, STMDB, STMIB
2016-08-08 22:49:11 +01:00
Tillmann Karras
5d26899ac9
Add simplified LogicalShiftRight64 IR opcode
2016-08-08 22:27:05 +01:00
Tillmann Karras
ccb2aa96a5
Add support for the APSR.Q flag
2016-08-08 22:27:04 +01:00
Tillmann Karras
11e0688e5f
Fix build on case-sensitive file systems
2016-08-08 22:27:03 +01:00
MerryMage
85549d7ae2
TranslateArm: Implement LDM, LDMDA, LDMDB, LDMIB
2016-08-08 22:26:06 +01:00
MerryMage
46e4864707
ArmTypes: Add RegListToString and reorganise
2016-08-08 22:20:28 +01:00
MerryMage
edb236ab07
Correct implementation of thumb16_SVC and arm_SVC
2016-08-07 22:19:39 +01:00
MerryMage
4dcd1d1859
Arm: BLX is UNPREDICTABLE when Rm is PC
2016-08-07 20:50:33 +01:00
MerryMage
1af5bef32c
TranslateArm: Implement BLX (imm), BLX (reg) and BXJ
2016-08-07 20:40:31 +01:00
MerryMage
939bb5c0cb
TranslateArm: Implement NOP
2016-08-07 20:08:31 +01:00
MerryMage
e48df9d8fd
TranslateArm: Implement Hint instructions as NOPs
2016-08-07 20:04:48 +01:00
MerryMage
3a465ba4a8
VFP: Implement VLDR
2016-08-07 19:59:35 +01:00
MerryMage
a2c2db277b
VFP: Implement VMOV (all variants)
2016-08-07 19:25:12 +01:00
MerryMage
0f412247ed
VFP: Implement VSQRT
2016-08-07 12:19:07 +01:00
MerryMage
cd8e7c0504
VFP: Implement VNEG
2016-08-07 12:04:21 +01:00
MerryMage
da33af5abe
VFP: Implement VMLA, VMLS, VNMLA, VNMLS
2016-08-07 11:49:06 +01:00
MerryMage
3f1345a1a5
VFP: Implement VNMUL, VDIV
2016-08-07 10:56:12 +01:00
MerryMage
12e7f2c359
VFP: Implement VMUL
2016-08-07 10:21:14 +01:00
MerryMage
97b5fa173f
VFP: Implement VSUB
2016-08-07 01:45:52 +01:00
MerryMage
ce6b5f8210
VFP: Implement VABS
2016-08-07 01:27:18 +01:00
MerryMage
c35f06470f
VFP: Interpret VFP instructions when FPSCR.Len or FPSCR.Stride != 1
2016-08-06 23:01:18 +01:00
MerryMage
94b99f5949
Common: Add an intrusive list implementation; remove use of boost::intrusive::list.
2016-08-06 22:23:01 +01:00
Tillmann Karras
55204a80d0
Implement SMMLA, SMMLS, SMMUL
2016-08-06 21:17:11 +01:00
Tillmann Karras
846d07d7b5
Add Sub64 opcode
2016-08-06 21:17:11 +01:00
Tillmann Karras
b9f4f1ed0f
Add carry support to MostSignificantWord
2016-08-06 21:17:11 +01:00
Tillmann Karras
01aebcb385
Remove *MulHi wrappers
2016-08-06 21:17:11 +01:00
Tillmann Karras
5e047107a0
Disassemble more instructions
...
CLZ, SEL, USAD8, USADA8, SSAT, SSAT16, USAT, USAT16, SMLAL*, SMLA*,
SMUL*, SMLAW*, SMULW*, SMLAD, SMLALD, SMLSD, SMLSLD, SMUAD, SMUSD
2016-08-06 21:17:11 +01:00
Tillmann Karras
f99cb613cf
Disassemble packs and more multiplies
2016-08-06 21:17:11 +01:00
MerryMage
7915f97d98
TranslateArm/LoadStore: Add default case to switches for arm_LDRD_imm and arm_LDRD_reg (fixes GCC warning)
2016-08-06 20:42:06 +01:00
MerryMage
4d127c19dd
Common: Add a memory pool implementation, remove use of boost::pool
2016-08-06 20:41:00 +01:00
MerryMage
4b31ea25a7
VFP: Implement VADD.{F32,F64}
2016-08-06 20:03:15 +01:00
MerryMage
8ff414ee0e
Frontend/Decoder: 1. Remove member pointer as a template argument. 2. Sort ARM table such that unconditional instructions are on top.
2016-08-06 20:03:15 +01:00
bunnei
2448d52394
load_store: Use correct types for LDR/STR.
2016-08-05 20:51:32 -04:00
bunnei
8c2300d477
arm: Implement LDRD reg/imm instructions.
2016-08-05 20:05:02 -04:00
bunnei
72608b7af6
arm: Handle Cond::NV (some 3DS games use this despite being obsolete).
2016-08-05 20:05:02 -04:00
bunnei
ec3a98cf95
arm: Implement LDRH reg/imm instructions.
2016-08-05 20:05:01 -04:00
bunnei
192a0fba7a
arm: Implement LDRB reg/imm instructions.
2016-08-05 20:05:00 -04:00
bunnei
dfb318f208
arm: Implement STRD reg/imm instructions.
2016-08-05 20:04:59 -04:00
bunnei
e931dc2496
arm: Implement STRH reg/imm instructions.
2016-08-05 20:04:58 -04:00
bunnei
9f77662b24
arm: Implement STRB reg/imm instructions.
2016-08-05 20:04:57 -04:00
bunnei
caab1bbc7c
arm: Implement STR reg/imm instructions.
2016-08-05 20:04:56 -04:00
bunnei
b09ecb4532
arm: Implement LDR reg/imm instructions.
2016-08-05 20:04:55 -04:00
MerryMage
640ce48baa
VFP: Implement {Get,Set}ExtendedRegister{32,64}
2016-08-05 19:06:10 +01:00
MerryMage
b4aa01ccf4
Merge remote-tracking branch 'tilkax/master'
2016-08-05 14:14:06 +01:00
MerryMage
01cfaf0286
IR: Properly support Identity in IR::Value
2016-08-05 14:09:10 +01:00
MerryMage
ca40015145
IR: Add Breakpoint IR instruction (for debugging purposes, emits a host-breakpoint)
2016-08-05 14:07:27 +01:00
Tillmann Karras
fce8c86c90
Implement RSB
...
somehow missed this earlier
2016-08-05 02:13:26 +01:00
Tillmann Karras
eb2e6e8bea
Implement some multiplies
2016-08-05 02:09:54 +01:00
Tillmann Karras
3fdc093d10
Add more IR opcodes for multiply instructions
...
Pack2x32To1x64, LeastSignificantWord, MostSignificantWord, IsZero64,
Add64, Mul, Mul64, SignExtendWordToLong, ZeroExtendWordToLong
2016-08-05 02:09:30 +01:00
bunnei
691e4139fa
arm: Implement B/BL/BX instructions.
2016-08-03 16:49:01 -04:00
Tillmann Karras
fc33f1d374
Implement more instructions
...
SXTB, SXTH, SXTAB, SXTAH, UXTB, UXTH, UXTAB, UXTAH, REV16
2016-08-03 00:47:17 +01:00
Tillmann Karras
30a90295b9
Implement data processing instructions
...
ADC, ADD, AND, BIC, CMN, CMP, EOR, MOV, MVN, ORR, RSB, RSC, SBC, SUB,
TEQ, TST
The code could use some serious deduplication...
2016-08-03 00:47:16 +01:00
Tillmann Karras
fe71cc9d78
Disassemble reg-shifted regs in lower case
2016-08-03 00:47:16 +01:00
Tillmann Karras
2488926341
Add IR opcode RotateRightExtended
...
to rotate through the carry flag
2016-08-03 00:47:16 +01:00
MerryMage
a875c0c720
TranslateArm: Stub more ARM instructions
2016-08-02 21:59:33 +01:00
MerryMage
deb5e2c10d
IR::DumpBlock: Incorrect use of std::map::at
2016-08-02 13:47:05 +01:00
MerryMage
4414ec5bc8
RegAlloc: Allow allocation of XMM registers
2016-08-02 13:46:12 +01:00
MerryMage
6097a21955
TranslateArm: Reorganisation - Split visitor into multiple .cpp files
2016-08-02 11:54:04 +01:00
MerryMage
93af160c97
arm_types: Add FPSCR to Arm::LocationDescriptor and make Arm::LocationDescriptor have a FauxO-like interface
2016-08-02 11:54:02 +01:00
MerryMage
be87038ffd
IROpt: Port get/set elimination pass to current IR
2016-08-02 11:51:05 +01:00
MerryMage
51448aa06d
More Speed
2016-07-22 23:55:00 +01:00
MerryMage
5fbfc6c155
Implement some simple IR optimizations (get/set eliminiation and DCE)
2016-07-21 21:48:45 +01:00
MerryMage
90d317b868
Implement memory endianness. Implement Thumb SETEND instruction.
2016-07-20 15:34:17 +01:00
MerryMage
98bd7ff6a5
Decoder/Thumb16: Remove BL{,X} prefix/suffix decoders. We have 32-bit thumb instruction support.
2016-07-20 12:08:17 +01:00
Merry
95316b8443
Merged in Subv/dynarmic/arm_mem_tests (pull request #4 )
...
Added some fuzz tests for most cases of ARM Load/Store instructions
2016-07-20 10:19:55 +01:00
MerryMage
95588d3faa
Fix Thumb BLX (imm), BL (imm) for negative immediates
2016-07-18 22:48:23 +01:00
MerryMage
3f11a149d7
Implement Thumb Instructions: BLX (imm), BL (imm)
2016-07-18 22:18:58 +01:00
MerryMage
e0d6e28b67
Implement Thumb instructions: BX, BLX (reg), B (T1), B (T2)
2016-07-18 21:04:39 +01:00
Subv
ccc61472b9
Added format strings for ARM STRBT encodings A1 and A2
2016-07-18 14:20:58 -05:00
Subv
8617bf80a1
Added format strings for ARM LDRBT encodings A1 and A2
2016-07-18 14:18:39 -05:00
Subv
5d5ea9325c
Added format strings for ARM STRT encodings A1 and A2
2016-07-18 14:05:53 -05:00
MerryMage
2363759c62
Implement thumb STM, LDM. Fix thumb POP implementation for P=1.
2016-07-18 20:05:35 +01:00
Subv
77761ba032
Added the format strings for LDRT encodings A1 and A2.
2016-07-18 14:01:18 -05:00
MerryMage
14dcb18bbe
Implemented Thumb Instructions: STR (imm, T1), STRB (imm), LDRB (imm), STR (imm, T2), LDR (imm, T2)
2016-07-18 18:48:08 +01:00
MerryMage
a605a43ef9
Implement Thumb Instructions: STRH (imm), LDRH (imm)
2016-07-18 18:28:52 +01:00
MerryMage
f9755870bb
Implement Thumb Instructions: LDR (reg), LDRH (reg), LDRSH (reg), LDRB (reg), LDRSB (reg)
2016-07-18 18:02:02 +01:00
MerryMage
dfef65d98f
Implement thumb POP instruction
2016-07-18 17:37:48 +01:00
MerryMage
f7e3d7b8d2
Implement Thumb PUSH instruction
2016-07-18 15:11:16 +01:00
MerryMage
9109b226af
Implement Thumb instructions: ADD (SP plus imm, T1), ADD (SP plus imm, T2), SUB (SP minus imm)
2016-07-18 11:16:12 +01:00
MerryMage
c18a3eeab4
Better MSVC support
...
* Avoiding use of templated variables.
* Now compling on MSVC with /WX (warnings as errors).
* Fixed all MSVC warnings.
* Fixed MSVC source_groups.
2016-07-18 10:38:22 +01:00
MerryMage
bf99ddd065
Merge branch 'master' of MerryMageBitbucket:MerryMage/dynarmic
2016-07-18 10:33:52 +01:00
MerryMage
28a201da16
Implement Thumb ADR instruction
2016-07-18 09:25:33 +01:00
Subv
0cdf5fe751
Implemented ARM REV and REVSH instructions, with tests.
2016-07-17 14:45:42 -05:00
Merry
24aa24b1bc
Merged in Subv/dynarmic (pull request #1 )
...
Implemented ARM CMP (imm) instruction.
2016-07-17 19:43:49 +01:00
Subv
7f09510945
Implemented ARM CMP (imm) instruction.
2016-07-17 13:29:37 -05:00
MerryMage
3720da4e19
Implement thumb16_{SXTH,SXTB,UXTH,UXTB,REV,REV16,REVSH}
2016-07-16 19:23:42 +01:00
MerryMage
4b1c27e64f
Implement arm_ADC_imm
2016-07-14 20:02:41 +01:00
MerryMage
63242924fc
Implement thumb16_SVC
2016-07-14 15:01:30 +01:00
MerryMage
07eaf100ba
Reorganise src/frontend: Add subdirectories disassembler and translate
2016-07-14 14:39:43 +01:00
MerryMage
9b2aff166a
Implement arm_SVC
2016-07-14 14:29:46 +01:00
MerryMage
672ffb93d0
frontend/translator: Skeleton for Arm translator
2016-07-14 13:28:20 +01:00
MerryMage
7d7751c157
Allow IR blocks to require a cond for block entry.
...
* IR: Add cond, cond_failed.
* backend_x64/EmitX64: Implement EmitCondPrelude
2016-07-14 12:52:53 +01:00
MerryMage
8449deb0bc
MSVC support
2016-07-12 13:28:09 +01:00
MerryMage
44352680c6
s/thumb1/thumb16/g: Thumb16 refers to 16-bit thumb instructions, and Thumb32 to 32-bit ones
2016-07-12 11:09:34 +01:00
MerryMage
6e46e7899a
Translate/Thumb: Fallback to interpreter for Thumb32 instructions
2016-07-12 11:02:45 +01:00
MerryMage
09420d190b
IR: Implement IR microinstructions ALUWritePC and LoadWritePC
2016-07-12 10:58:14 +01:00
MerryMage
f85b86486b
frontend/TranslateArm: Just interpret all ARM instructions
2016-07-12 09:11:35 +01:00
MerryMage
1410221b47
Implement thumb1_STR_reg, thumb1_STRH_reg, thumb1_STRB_reg
2016-07-11 23:11:05 +01:00
MerryMage
e7922e4fef
Implement thumb1_LDR_literal, thumb1_LDR_imm_t1
2016-07-11 22:43:53 +01:00
MerryMage
f0f14fa5e8
Implement thumb1_MOV_reg
2016-07-10 13:10:06 +08:00
MerryMage
8920ce79b9
Implement thumb_CMP_reg_t2
2016-07-10 12:23:16 +08:00
MerryMage
ac2fb6b925
Implement thumb1_MVN_reg
2016-07-10 10:49:01 +08:00
MerryMage
d11df9067d
Implement thumb1_BIC_reg
2016-07-10 10:44:45 +08:00
MerryMage
98a64a92b1
Implement thumb1_ORR_reg
2016-07-10 09:06:38 +08:00
MerryMage
3fe46d2c6f
Implement thumb1_CMN_reg
2016-07-10 08:55:56 +08:00
MerryMage
641dbf8eb4
Implement thumb1_CMP_reg
2016-07-10 08:52:28 +08:00
MerryMage
46408267c3
Implement thumb1_RSB_imm
2016-07-10 08:44:07 +08:00
MerryMage
6536ad9618
Implement thumb1_TST_reg
2016-07-10 08:35:58 +08:00
MerryMage
8145b33882
Implemented thumb1_ROR_reg
2016-07-10 08:18:17 +08:00
MerryMage
207cb74dc9
Implement thumb1_SBC_reg
2016-07-09 08:27:41 +08:00
MerryMage
1953e44532
Implement thumb1_ADC_reg
2016-07-08 22:17:39 +08:00
MerryMage
9e9fa62d5f
Implement thumb1_SUB_imm_t2
2016-07-08 21:48:55 +08:00
MerryMage
8c587df8ce
Implement thumb1_ADD_imm_t2
2016-07-08 21:38:43 +08:00
MerryMage
aa72323823
Implement thumb1_CMP_imm
2016-07-08 21:32:01 +08:00
MerryMage
98f300144b
Implement thumb1_MOV_imm
2016-07-08 21:27:27 +08:00
MerryMage
34be20e4d6
Implement thumb1_SUB_imm
2016-07-08 20:57:53 +08:00
MerryMage
a2e40eb922
Implement thumb1_ADD_imm
2016-07-08 19:15:30 +08:00
MerryMage
92142d5a22
Implement thumb1_SUB_reg
2016-07-08 18:49:30 +08:00
MerryMage
df0c324923
Implement thumb1_EOR_reg
2016-07-08 18:14:54 +08:00
MerryMage
8a0511d297
Implement thumb1_AND_reg
2016-07-08 17:44:53 +08:00
MerryMage
5b56fd12aa
Fix bug: Correct disassembly of thumb1_LSL_reg, thumb1_LSR_reg, thumb1_ASR_reg
2016-07-08 17:44:52 +08:00
MerryMage
d0b48bfb59
Implement thumb1_ADD_reg_t1 and thumb1_ADD_reg_t2
2016-07-08 17:44:51 +08:00
MerryMage
e5f6450a24
Start implementing Thumb disassembler
2016-07-07 21:51:47 +08:00
MerryMage
5711e62419
Implement terminal instructions
2016-07-07 17:53:09 +08:00
MerryMage
14388ea690
Proper implementation of Arm::Translate
2016-07-04 21:37:50 +08:00
MerryMage
d743adf518
Reorganisation, Import Skyeye, This is a mess
2016-07-04 17:22:11 +08:00