f4ba40fc419a9d484da9be1df051ad03327ce4f4 |
19-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove pool blocking and assembler enablement from the API The MacroAssemblerInsterface and AssemblerBase classes define methods that should not be used directly. Instead, scope utilities should be used. This patch hides the following methods from the user: ~~~ void MacroAssemblerInterface::SetAllowMacroInstructions(bool allow); void AssemblerBase::SetAllowAssembler(); void MacroAssemblerInterface::BlockPools(); void MacroAssemblerInterface::ReleasePools(); void MacroAssemblerInterface::EnsureEmitPoolsFor(size_t size); ~~~ Change-Id: I26b55c560cd94a2158757ca969c6bf95f7ba743b
acro-assembler-aarch32.h
|
f5d9808e6dd26daf325219d67a304173a1909f30 |
20-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove support for loading from a label using the MacroAssembler This patch removes the following API from the macro-assembler: ~~~ void Ldr(Condition cond, Register rt, Label* label); void Ldrb(Condition cond, Register rt, Label* label); void Ldrd(Condition cond, Register rt, Register rt2, Label* label); void Ldrh(Condition cond, Register rt, Label* label); void Ldrsb(Condition cond, Register rt, Label* label); void Ldrsh(Condition cond, Register rt, Label* label); void Vldr(Condition cond, DataType dt, DRegister rd, Label* label); void Vldr(Condition cond, DataType dt, SRegister rd, Label* label); ~~~ In short, we cannot guarantee that the label will be in range, and when using the macro-assembler, the user should have this guarantee. The only way to generate these instruction is through the creation of literals. Change-Id: I15be8d5d8a7a0b21987cb6ff767530446a615bbc
acro-assembler-aarch32.h
|
fb37b5d8438252728469290fa35a779817faea00 |
18-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Add tests for pool blocking in nested ExactAssemblyScope On top of adding tests, this patch adds a new top-level MacroAssembler::ArePoolsBlocked() API method. This is useful for testing that the pools are actually blocked or not, and that nesting does not accidentally unblock them. Change-Id: If3845c6686ef45ddf1d28b8876ffd349731cdd9d
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
0cec43d2696e745b8c031930dec336db5c58ac52 |
19-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Disallow implicitly creating a DataType from uint32_t This triggered a bug were we accidentally let DataType be created from any uint32_t, and incidently, any other enums. As a side effect, a condition such as "hi" would implicitely cast to a "S8" DataType for example. Change-Id: I72a1b427f550c251d366164d599d9a38be792fc8
nstructions-aarch32.h
|
5c01c410ae559d0a77d68a023957c5bc9de143e0 |
18-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove Adr(Register, Label*) support from the MacroAssembler The Adr macro-instruction taking a label should, in theory, be able to handle a label bound anywhere in the 32-bit address space. However this is not implemented therefore we shouldn't have it exposed in the MacroAssembler as it can be misleading. One would naturally expect it to generate the appropriate sequence for any label. Let's enable this again later once it is entirely implemented. Change-Id: I186b5f0ba1be4febb26ca548df2e1c056863e975
acro-assembler-aarch32.h
|
32929a7f73c3a103a2abe21f49258fba149a5157 |
18-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove Switch implementation from VIXL The Switch implementation is not well tested, and uses Adr with a label which we are going to temporarily disallow until we support patching multiple instructions. The reason this is tricky is that pools can be generated in between each macro-instruction and this can break Adr, which breaks Switch. Let's add it again later when the feature is ready. Change-Id: I30d6adf89e4ddcebada6aa70ff7b6a5dc9239ad4
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
04d8afb2fe9efa2f9d95136191c9e5d5cdc99a68 |
19-Jan-2017 |
Jacob Bramley <jacob.bramley@arm.com> |
Fix target=(t32|a32). The benchmarks no longer assume that both ISAs are available. They started failing after d503ed2, when I changed test.py to run target=t32 in a debug build. The tests were already broken before, but we only ever tested these configurations in release mode so the assertions didn't fire. kDefaultISA now correctly selects T32 as the default if only T32 is available: constants-aarch32.h needs to include globals-vixl.h so that VIXL_INCLUDE_TARGET_T32_ONLY can be defined. Change-Id: Idfaa5800cab8e1119f09f22e9a380f3d818e7c4c
onstants-aarch32.h
|
4339c4bbb18b2d975202d6da09a08eefdaabc27c |
12-Jan-2017 |
Vincent Belliard <vincent.belliard@arm.com> |
Remove some unnecessary curly brackets. Change-Id: I8ba6a9be29381b5ed4dffba0b57e28782cee35ad
isasm-aarch32.cc
|
d56f609907e454dd41bb8b2d98e078e69c4feafa |
11-Jan-2017 |
Pierre Langlois <pierre.langlois@arm.com> |
ExactAssemblyScope: Force the pools not to be emitted There was a bug where the AArch32 MacroAssembler would still generate pools inside ExactAssemblyScope. In order to avoid this, this patch renames the `kCheckPools` policy to `kBlockPools`. Saying "check" implies we only assert that pools are not generated, which is not the case. Change-Id: Ica717f56f99c7363add5361076174e8e827dd81c
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
59c315165e16fb505f10c1224a83c3803f9fdfd6 |
10-Jan-2017 |
Jacob Bramley <jacob.bramley@arm.com> |
Temporarily disable a check in VeneerPoolManager::Release(). ART assumes that pools will not be generated after macro instructions or ExactAssemblyScopes. The EnsureEmitFor(0) check in VeneerPoolManager::Release() breaks this assumption. We'll have to come up with a real solution, but this quick fix should suffice for now. Change-Id: I50937b9f575e69171419497d0cd376b514824529
abel-aarch32.cc
|
9a9331faeba996d6c85e6e2a6355ccfc22c6cab6 |
09-Dec-2016 |
Rodolph Perfetta <rodolph.perfetta@arm.com> |
Allow conditional inclusion of A32, T32 and A64. The 'target_arch' option has been replace by 'target' which can be any combination of aarch32, aarch64, a32, t32, a64. Change-Id: Id5cd052276747cd718551f562b74f79443b91869
ssembler-aarch32.cc
ssembler-aarch32.h
onstants-aarch32.h
nstructions-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.h
|
a4cbc576a003da934ab58b293d9023d9b6f3077b |
05-Jan-2017 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix veneer emission. Change-Id: I2ef8b153f1ab87fa9972f80b1b4660ceefabceb4
abel-aarch32.cc
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
b2838fee50499a1c7963167b0d8144552f194e15 |
16-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Optimize Ldrd and Strd. Change-Id: I2594b76c0c96fe86146fe453dcbb1acb45823128
acro-assembler-aarch32.cc
|
80b4a1f554a92b2c4d4504265d0bac545c74c69b |
14-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Optimize add/sub with a big constant. Change-Id: I4d5e684fc9cb6a2fe754acfc3b75eb7b530273e2
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
2272afbda5f15c4bfb25c3c9bf95d960c9df39d6 |
04-Jan-2017 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix for veneer pool when using near branches and cbz. Change-Id: Ifc9cf13b07d6b5504f3fe4d4d45597cc05e069aa
abel-aarch32.cc
abel-aarch32.h
acro-assembler-aarch32.cc
|
e99f34dd95e54fb15605a022309175ed8020bf2c |
21-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Check for unpredictable CLZ. Change-Id: I2f8799efc32bd2aae3c3d9c604d389511eab8987
ssembler-aarch32.cc
|
0cc43be9ba1881f608a25467b1387927af3b4caa |
22-Dec-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Revert "[aarch32] Dot not abort when one uses unpredictable or strongly discouraged instructions" This reverts commit d836966fcbe0ec3136486ec36de6bd2572d451eb. Change-Id: I3e8b0ea9bc43594ab3ad569e54f78e00593dfea8
ssembler-aarch32.h
acro-assembler-aarch32.h
|
d836966fcbe0ec3136486ec36de6bd2572d451eb |
19-Dec-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
[aarch32] Dot not abort when one uses unpredictable or strongly discouraged instructions Calling VIXL_ABORT when a MacroAssembler object would call AllowUnpredictable or AllowStronglyDiscouraged would prevent us from handling those cases in delegates. It should be up to a delegate to decide whether to give the user an error or generate an alternative code sequence. Additionally, the user is able (but that's not recommended of course) to lift the UNPREDICTABLE or STRONGLY DISCOURAGED limitation using scopes. Since the AllowUnpredictable() and AllowStronglyDiscouraged() methods were virtual and overriden by the macro-assembler to abort. There was no way to write the following code: ```c++ MacroAssembler masm(T32); { ExactAssemblyScope scope(&masm, ...); AllowUnpredictableScope allow_unpredictable(&masm); // Here be dragons! } ``` This patch fixes this by turning AllowUnpredictable() and AllowStronglyDiscouraged() into non-virtual methods. Finally, the related scopes were inside the `aarch32::Assembler::` namespace, which is inconsistent with other scopes. Move it to `aarch32`. Change-Id: I42e5b772e850a8c23521385cf399aaae77b5eab6
ssembler-aarch32.h
acro-assembler-aarch32.h
|
942e3b7b1d381454c8f17c31c8a3ccbe568512f7 |
30-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add unpredictable conditions for mov. Change-Id: I193cc0ec2ba3882805496f6d2efb6a73161f98a6
ssembler-aarch32.cc
|
a576eb92e2a877984e6e5c1e409e23c49c8b96a1 |
13-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add more identities. Change-Id: I52ff78a7b101de88146ead71b555a17541f9b863
acro-assembler-aarch32.h
|
34ecc5b8b9af49df5727cfc357db1fddc674cb44 |
20-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Move some NO_RETURN attributes. These appear to fail for some versions of Clang unless they are at the start of the prototype. Change-Id: I8c5a3ef614cbdd8ed1361017c41c00e5d1cfca93
perands-aarch32.h
|
028fb0566f6af6d839d34ccfec754ba394510302 |
15-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Improve and clean up abort messages. In particular, with negative_testing=on, print the same helpful messages as in normal builds. Change-Id: I9426aba8149e22b13e489133c5c4531f513b0850
acro-assembler-aarch32.cc
perands-aarch32.h
|
e8ce9f0ec7fe9484fca0c446ecc8a9d7929bea66 |
14-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Assert perfect nesting for UseScratchRegisterScope. Since UseScratchRegisterScope now has a MacroAssembler pointer anyway, this patch also removes available_ and availablefp_, and uses the MacroAssembler directly. Some negative tests would be useful but I'll add them separately. Change-Id: Ia093c67a980044f8e1514cff81998fd9dbfaa44e
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
1091d74cee7404c902fccdc6dba81609bbbdf443 |
16-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Generate ADD and not ADDS for Add(DontCare, r1, r1, r2). Change-Id: Iabb680bcd7b4027602ca48c34691d61d75b1e0af
acro-assembler-aarch32.h
|
5ddbc800588cde7e4d02f9fb7ca2f9e8c12522ef |
16-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Optimize IsModifiedImmediate and Orn/Orns delegate. Change-Id: I05ac177e9ef28a99dc00b43a2de6d7fdfae87ef3
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
be9c4d02c96eaa6cdc9a9a5ae3cc65f57d54585c |
15-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Support conditional load literal for T32. Change-Id: I2865cd2ef2e075c47d1d18838c97c04c9294177c
acro-assembler-aarch32.h
|
cf91ee6bcaabf00356516bbc2d478acbeb8bed9a |
13-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Make rewinding of load literal instructions less conservative. Change-Id: I2f1b7dce445ceff1edb1f93608b693737be1bc51
abel-aarch32.h
acro-assembler-aarch32.h
|
50e45c514c11300c91b370c251235a9a77bdaf5f |
13-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
After rewinding a load, only add the label to the literal pool if it's not bound. Change-Id: I5f0296582630cc8f81a72a304986b1c15acab02c
acro-assembler-aarch32.h
|
4f002a865b625dc388e9175bfdda285812e17f2b |
14-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Increase max recursion limit for delegates. The new case that needs a larger recursion limit is related to literal loads with negative offsets (due to already bound labels). In some cases, the Ldrd delegate (1) calls MemOperandComputationHelper which calls Add (2). The Add has a negative immediate that cannot be encoded so calls Sub (3). This recurses in the new code that handles add/sub with negative offsets (4), and after we recurse we add a Mov and end up in that Delegate (5). This increases the limit to 6 which works fine in this case. Change-Id: I994dd46a201fb24afb377bd13c4e5dcd3cb29002
acro-assembler-aarch32.h
|
efe0c1f222c9b2da15755b221ee0fa232939ce80 |
24-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Allow Operand::From to convert signed integrals The static Operand::From factory method would not accept signed values that can be encoded in 32 bits. To avoid implicit casting in Operand::From, we've added uint32_t/int32_t/uint64_t versions of UintN and IntN. Along with new tests. Change-Id: I93b61102b7af8df369621f8929d9d7c74b363f38
perands-aarch32.h
|
4a30c5d68ebbc271d6d876d828ffa96db53d8d7c |
08-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add MacroAssembler B with hint. Change-Id: Ic56a63c5af35c6d46b1a03a4b58165e991afc4d7
onstants-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
e31fda5ecc961cdb78a0a5311d692ae4b15e5933 |
13-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Correct number of bytes we check we can emit in ITScope. This value was out of sync with MacroEmissionCheckScope, and we are always using an ITScope together with a MacroEmissionCheckScope, so we could potentially trigger an assertion that was not necessary. Change-Id: I1e942d6b919070a3a41d4b38edde74feebb7cc19
acro-assembler-aarch32.h
|
9ae5da2ba518573576cc92e93e7a01dd34c8d1f7 |
05-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Specify instructions which use a delegate. Change-Id: I47b2ed73eab09d5ed6541073d571300e2fcdeef0
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
dd8e491930b4eb5928f0dec2441c69a471724ce5 |
12-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Generate 16-bit ADDS/SUBS for DontCare SUB/ADD with suitable immediates. Change-Id: Ia2c11ad7ac8b14c8d04881ed6b872ae2af7dd3d6
acro-assembler-aarch32.h
|
4443cf950cac7b0cf8e82196e60c26f4b2799a97 |
08-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Tests for 16-bit T32 instruction generation for DontCare flags update. This also fixes a few cases where we were failing to generate a 16-bit instruction. The issues fixed were resulting in sub-optimal instructions being generated, but they were not correctness issues. Change-Id: I3042165eeac90674b89a15db7b7c065925bdd30c
acro-assembler-aarch32.h
|
89d2f7702f0dc1751574bd5f9d35b5182fc65fac |
08-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Fix very-long-range literal loads. The code was basically functional but the CodeBufferCheckScope sizes had to be increased. The generated code could be improved, but its a corner case anyway so it's not a priority for now. Here's an example: 0x004223f2 f2af31ec adr r1, 0x00422008 0x004223f6 f44f5c00 mov ip, #8192 0x004223fa f2c00c42 movt ip, #66 0x004223fe eba1010c sub r1, ip 0x00422402 6809 ldr r1, [r1] This sequence occurs for offset ranges over about 1MB. For ranges below 1MB, the worst case is still adr+sub+ldr. Change-Id: I6345127aed12abb59c819f63167170d57160da0b
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
52e987eb677af65859f169b20816fa5d293c6cf0 |
08-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Fix long-range literal loads. This is the second attempt. We no longer generate unpredictable instructions. As before, this has only been tested for T32. Change-Id: If5519fe603281b081e93a25bb7980c3e965f037b
acro-assembler-aarch32.cc
|
356323a3dbec6b302b7882ed8cf46e9457217d01 |
25-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Check that we don't generate deprecated IT instructions. Change-Id: If276f5f4f25408178b8a522ea1eb0c06707d0cfd
acro-assembler-aarch32.h
|
4cb13e841305b38acbd8195b1c511d59c91ec8d9 |
08-Dec-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Correct usage of scratch registers in tests. Exclude all registers from the UseScratchRegister list for start and end code in tests, then include ip where necessary. Similarly, exclude all registers from the scratch register list in the Printf implementation, which handles available registers in its own way. Change-Id: I96100411a45f104f85bbc4020959fc9d98e240af
acro-assembler-aarch32.cc
|
1ddc52b438c2f07872e6e715c6b86e8d3b772795 |
08-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix MacroAssembler::GenerateInstruction. Change-Id: Ibc942d3a8c3864f58a4f6d812864051b2d76bb59
acro-assembler-aarch32.h
|
bd087d8fe70f7db770f37569073b8b9f77a9c372 |
29-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix concurrent veneer and literal emission. Change-Id: I83be782d9e2862cb94ab618440c375a66c1da201
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
15985a2fcc72ce0ec5e19c410b444ceec899c11f |
28-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix veneer pool generation when several cbz/cbnz are generated one after the other and when several veneers have the same checkpoint. Change-Id: Ic2d7f348854666f07c191aadc43f299b422867c5
onstants-aarch32.h
abel-aarch32.cc
abel-aarch32.h
acro-assembler-aarch32.cc
|
9c112d81bf7bc65d6bea5a1d889ef3db7609771d |
08-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Fix literal loads from unaligned instructions. Change-Id: I07a1f7819328ef7ce1fb36ccdc0b940312e36afb
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
5c76fb48ece5cc54c3000abead7e6147ac843834 |
30-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Support arithmetic instructions that read PC. This is required to implement support for out-of-range PC-relative MemOperands, which are themselves required to implement long-range references to user-managed literals. Change-Id: I1c3ef9712f8fd6624d16eeb38e12f5746f2fa889
acro-assembler-aarch32.cc
|
f8c2284645ce651f99ba410a512279102851076e |
29-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Fix Ldr for distant, bound literals. Change-Id: I0ed3b1df4e93cbbc4bd5ce109130d1ce1ac35ef0
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
4c5d65bf4d3a5fcc6ccb5cd19fed81e2b735789b |
06-Dec-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Include AllowMacroInstructions methods in release mode The SetAllowMacroInstructions and AllowMacroInstructions methods were only included if VIXL_DEBUG was defined. While this is understandable, these methods are virtual and part of the MacroAssemblerInterface, which means the vtable of macro-assemblers has a different layout depending on VIXL_DEBUG. This can produce strange errors when headers are used incorrectly by the user, for instance if linking with a library compiled with VIXL_DEBUG defined by mistake. Additionally, this patch explicitely marks overriden methods of the MacroAssemblerInterface as virtual, as well as adding missing "internal" namespaces for AssemblerBase. Change-Id: I2f4595bd5990c944381b177809853e33354e9244
acro-assembler-aarch32.h
|
fd7f94dd378ec93adcc201d8eb9d71836948de09 |
01-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix macro-assembler temporaries' usage. Change-Id: I5c14dfca88dc8fe8e973fb61379bde927bbe6d09
acro-assembler-aarch32.cc
|
b323da089731b39a34ad0a77d20f0a96c1c1a1bc |
02-Dec-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Ensure that all used labels are bound. Change-Id: I95c1a9c2d91c91303ac10898ca556e6e798403e5
ssembler-aarch32.cc
abel-aarch32.h
|
9ee25b5df54608e45947a7f99f2c23ce61802474 |
02-Dec-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Add Exclude(const Operand&). This is useful for the common pattern of including destinations only if they don't alias the input: temps.Include(rd); temps.Exclude(rn); temps.Exclude(operand); Change-Id: Ibc3af5447b8fb22d92f3b7dc55daf3b608c8e8d6
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
000f93f0af01f9a3f250ad8fb8cd7a42e7b31c99 |
01-Dec-2016 |
Baptiste Afsa <baptiste.afsa@arm.com> |
aarch32: Add a few assertions in code dealing with literals. Change-Id: Idce680b4f7b98fa1fadfdbc079783e05aa01c3f0
ssembler-aarch32.h
nstructions-aarch32.h
acro-assembler-aarch32.h
|
1661f51a172e7c3dcce6caca55b6fe6d10ebd416 |
31-Oct-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Use the shared code generation scope `ExactAssemblyScope`. This patch finishes the transition to shared code generation scopes for the AArch32 backend. Change-Id: Iccbdb5de48b41803408410a01307afabe30a7fee
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
8d191abf32edf41421f68f35585e4fce8da4d50c |
29-Nov-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Use the shared scopes `CodeBufferCheckScope` and `EmissionCheckScope`. This patch continues toward the goal of unifying code-generation scopes for all backends. The new scopes differ from the existing AArch32 mechanisms, so a few tests for literal and veneer pools needed to be updated. The patch also adds AArch32 tests for the new scopes. Change-Id: Ia6a93e6e860b47e703b6c9034fefa405810c18a0
ssembler-aarch32.h
abel-aarch32.cc
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
d17e348e16bf0d6eca4f9ea0e935c7544098d045 |
23-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add unpredictable conditions for ADC_i, ADC_r, ADC_rr, ADD_ADR, ADD_i, ADD_r, ADD_rr, ADD_SP_i, ADD_SP_r, ADR and MOV_i. Change-Id: I2d0255c352881d855b375db65794ee7f282b1cfe
ssembler-aarch32.cc
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
e7a1690b45036db4c2730ab1c2699ca764a40a68 |
23-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Add tests for generating IT blocks with the MacroAssembler. This also disallows generating an IT block for ROR (immediate), as there is no 16-bit T32 encoding for this instruction. Change-Id: Id4e9f3abc753b034219eeec6aad7a973cd5be69a
acro-assembler-aarch32.h
|
adbb4a746d2d90dd2920a8e0b7cd2397e93d17b9 |
22-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Remove inheritance of Register for RegisterOrAPSR_nzcv. Change-Id: Ie4baa104e243dc96bdf9f7d859597487ca62413b
nstructions-aarch32.h
acro-assembler-aarch32.h
|
7d0ad8b7de47bd31742317523a5d764cdd58a466 |
25-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Test switch without explicitly bound default label. Change-Id: I98bb1913e114655abefb0678b92e456f80141112
acro-assembler-aarch32.cc
|
960c80d57d7ec81ad517b9f5117434ca930f05c6 |
25-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Reland: Test macro assembler support for NEON immediates Test macro assembler support for NEON immediates with a range of data types. Also, improve the code for moving F64 values into Q registers, and remove some unreachable cases. Relanding after fixing MacOS build problem. Change-Id: I6d2a22c9d7d3a35f8470b11892bb796c493f043b
acro-assembler-aarch32.cc
|
6cec473ec0180a2922cb6fc02878b5d80a5f9828 |
25-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Revert "Test macro assembler support for NEON immediates" This reverts commit aced8fe6982769fd99f04c8db886fc1f5e0bdd42. Reverted due to failing MacOS tests. Change-Id: I991555449128e8adf527a135f4fbebd1a926044b
acro-assembler-aarch32.cc
|
b21b7623a9fb6d4c627aec1e3a0b51f278ef0a72 |
24-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Correctly exclude V registers in UseScratchRegisterScope There was a nasty bug in UseScratchRegister::Exclude(VRegisterList). We were taking the *core* register list as a source instead of the vfp register list. Add some tests for the Exclude/Include operations. Change-Id: I8f58a8efa9d66927caf4d355e684b4a3b61b4da6
acro-assembler-aarch32.cc
|
aced8fe6982769fd99f04c8db886fc1f5e0bdd42 |
22-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Test macro assembler support for NEON immediates Test macro assembler support for NEON immediates with a range of data types. Also, improve the code for moving F64 values into Q registers, and remove some unreachable cases. Change-Id: I7bca5d46c454e33de5860d11f2cd405c9872e6a5
acro-assembler-aarch32.cc
|
989663e3cb7be8ac458d71f8e8d99afd29b13a39 |
24-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Rename operand-aarch32.{h,cc} to operands-aarch32.{h,cc} We were inconsistent in naming this file between the AArch64 and AArch32 targets, let's go with what AArch64 calls is and pluralize operand. Change-Id: Id2581255e4aa398f2c6fa81e5abce1f4b9b8a364
ssembler-aarch32.cc
isasm-aarch32.cc
isasm-aarch32.h
acro-assembler-aarch32.h
perand-aarch32.cc
perand-aarch32.h
perands-aarch32.cc
perands-aarch32.h
|
740da998f1b2677636dfd76a6028e283d6175bf0 |
22-Nov-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Correctly require space before the branch in `PerformEnsureEmitFor()`. Change-Id: Ib3828be4e3cf762ebb13c8fc654067fdccff9eac
acro-assembler-aarch32.cc
|
0eb25b040732354c6273c93df709f8d585a140de |
22-Nov-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Fix and test the precision of margins before pool emission. This precision is paramount when writing tests for corner cases of veneer or literal pools emission. Also check that the buffer only grows when required. Change-Id: I8992f1c389578a7a8301ea621ea6db7a7f9c9c11
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
fad927c4321a9dd7e235b91aadd88f5542561370 |
18-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
More MacroAssembler tests for loads and stores. Add a few more tests for load immediate and tests for PlainRegister MemOperands used in loads/stores. This patch also restricts the cases of PlainRegister MemOperands we support in the MacroAssembler to avoid unpredictable behaviour. Change-Id: I1b416de439e858d6d16fde174088fac0a90040e5
acro-assembler-aarch32.cc
|
d370ac5a89d8a5ce4f07326f5b04347465be2422 |
21-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Add tests for Orns and add assertions/comments in its delegate Test coverage showed we didn't have tests for transformations of `orns` into `orrs`. Also, let's add few assertions and comments in its delegate, I found the handling of the immediate operand a little hard to understand. Change-Id: I31b2214d2202342c8b387a84d33fd051819305a6
acro-assembler-aarch32.cc
|
283bbdf1908649c90069ff80dfca45de4f675de4 |
21-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Cleanup return statements in delegates Delegates and MacroAssembler instruction methods all return void, however, we'd often write code as: ~~~ return MacroAssemblerMethod(); ~~~ Break those cases into two lines: ~~~ MacroAssemblerMethod(); return; ~~~ Change-Id: I92b99a86d03a8fa672e2772932b60492983ad181
acro-assembler-aarch32.cc
|
7f2a44c6dce08e942080f14af19f83a202162104 |
17-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
MacroAssembler tests for Ldrd and Strd On top of adding tests, adjust CodeBufferCheckScope for cases where we may need up to 3 instructions to generate an immediate offset. More importantly, there was a bug where a negative immediate would get turned into a positive immediate. Finally, the delegate would not allow re-using the destination registers as scratch when trying to emit a Ldrd with a PreIndexed offset: Before: Ldrd(r0, r1, MemOperand(r0, 0xabcd, PreIndex)) mov ip, #43981 add r0, ip ldrd r0, r1, [r0] After: Ldrd(r0, r1, MemOperand(r0, 0xabcd, PreIndex)) mov r1, #43981 // It's perfectly OK to re-use r1. add r0, r1 ldrd r0, r1, [r0] Change-Id: I51007d4cb45260d066db36222cb56bd4a93f8f74
acro-assembler-aarch32.cc
|
b44f7a6ee7f9cd194cde9577f5a941f2864795a4 |
17-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove delegate support for load/store exclusive and pld This patch removes delegates that were trying to handle the following instructions: - pld - pldw - pli - lda - ldab - ldaex - ldaexb - ldaexh - ldah - ldrex - ldrexb - ldrexh - stl - stlb - stlh - ldaexd - ldrexd - stlex - stlexb - stlexh - strex - strexb - strexh - stlexd - strexd Instead, the user will get an error if they are used incorrectly. We no longer try to make them work with addressing modes that are not already supported by the instruction itself. Instead of having the delegates use VIXL_ABORT_WITH_MSG directly, I've changed the `UnimplementedDelegate` method to print the message "Ill-formed '{}' instruction.". To do this, we now have a `ToCString(InstructionType)` function to print instructions, defined in a new file "aarch32/constants-aarch32.cc". Change-Id: I4e1f955576b88aae3edaf4dad157f11d4755e6ca
ssembler-aarch32.h
onstants-aarch32.cc
onstants-aarch32.h
isasm-aarch32.cc
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
fd7a00db313b38f1b328c7fc6af1325d85bc31ad |
09-Nov-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Do not force alignment in `MacroAssembler::EnsureEmitFor()`. The alignment requirements are relegated to users. The automatic alignment otherwise interferes when trying to control precisely the size of code we want to emit. Change-Id: I9a7eb509344c390ce9b91d3c687f6e56d38ab889
acro-assembler-aarch32.h
|
39b5e60b78f447c4af8c18f12281ed7ab9c33c82 |
18-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix assembler for instructions with an operand like [<Rn>, imm]. Change-Id: Iff2f0f8a6bd67886cb8b658b606514a9845796f7
ssembler-aarch32.cc
|
40b7e470e71b158158ef6ce8a1a3f701857ce0e2 |
09-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix PerformEnsureEmit for literals. Change-Id: Iab0cb33eb59a69a90a00754263c7210b16ad2044
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
9fcf6d6dd240d7f40f187965c981749eb4eaa94b |
17-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix assembler for instructions with an operand like "[PC, #imm]". Change-Id: If6a945b9ef2ae08639efe1e85fef9e7d28340c25
ssembler-aarch32.cc
|
a01fbf25f9e2c9c53e82774126c4717ee37c1d91 |
18-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Add MacroAssembler tests for Msr. Only handle immediates in the MacroAssembler: either for T32 which does not have an immediate version of the instruction, or for A32 when the immediate cannot be encoded. Change-Id: I8f83dce6a3548ebdebb19b8d677cc9ce59b3e56b
acro-assembler-aarch32.cc
|
c0ee83fd133e93d3967d8347ad2bf2a218524348 |
18-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Use IsOffset, IsPreIndex and IsPostIndex. Change-Id: Ib7fd5e55689954c12ce90cf2bb605528a3ea057c
ssembler-aarch32.cc
|
66170ac6e8c11239700e6031dc690cc2594c0675 |
15-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
MacroAssembler tests for the InstructionCondSizeROp Delegate. Testing that register shifter register operands for T32 are expanded correctly, and that wide immediates are handled properly. Change-Id: I8aef918a290e68fda9af2364a0fb618d1bde8536
acro-assembler-aarch32.cc
|
2aa0afc4afb9409c97261e1dab9abc456a7551ed |
16-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
MacroAssembler tests for the CondSizeRROp delegate This patch adds tests covering most of the delegates' paths. Specifically, this delegate takes care of translating Add, Adc, Sub and Sbc. As well as allowing register shifted register operands in T32. On top of adding tests for these instructions, this patch identified a case where we should reserve space for 3 instruction, in case the immediate is not encodable. Additionally, the delegate did not handle the setflags version of those instructions. Change-Id: Ice8459314ab38004afa61729eba4d18f3f788593
acro-assembler-aarch32.cc
|
cf4d2842eb8d63c621d7003e240ec094a357cad0 |
15-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
AArch32: Check that the user doesn't pass in scratch registers. The user must not use registers that the MacroAssembler can allocate as scratch registers. This patch attempts to enforce this restriction by checking that the user never passes an available scratch register to the MacroAssembler. Change-Id: I7897b788df6dc0fabc452df0fe28d986fd84097c
acro-assembler-aarch32.h
perand-aarch32.h
|
df9f46669cb7ea55844ab6e5ac0b12c26399b233 |
16-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Test masm support for vldr and vstr Test vldr and vstr output from macro assembler. This also fixes a few bugs: - vldr/vstr with negative offset/preindex/postindex - vldr/vstr with zero preindex/postindex - vldr/vstr with PC base register - CodeBufferCheckScope sizes Vldr/vstr with PC base register is fixed by disallowing it in the macro assembler, including for cases where only single instructions need to be generated. We assume the literal pool or assembler will be used, instead. Change-Id: If2d81da4fa9776fb9ed93804a56b25a2106dc954
acro-assembler-aarch32.cc
|
29f71f91fc1282d12fd2d5eb87eec8cf0147f043 |
16-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Implement indexing for internal register list types. Primarily, this adds accessors like DRegisterList::GetDRegister(n) to allow simple iteration through the list. Also, refactor NeonRegisterList so that it has a first+length arrangement like the others. Change-Id: Id36e5aa7a39b6e8cdd85f533589266e2f847e4b1
nstructions-aarch32.h
|
5b698cc633932dee5dd94f44a42f0fdec567fe2b |
15-Nov-2016 |
Georgia Kouveli <georgia.kouveli@arm.com> |
Add MacroAssembler tests for cbz/cbnz. This patch adds MacroAssembler tests for cbz and cbnz. It also removes MacroAssembler support for these instructions for A32, as we were substituting them with a sequence that corrupted the flags, which the user might not expect. Change-Id: I7abf0c283a6c5722edee5b7bf2d4249d176f08f6
acro-assembler-aarch32.cc
|
e6c6319611916b73b227075c7a7c2f76bec50745 |
16-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
Replace VRegisterList::Include with explicit variants. Previously, it wasn't clear whether `list.Include(d0)` should have been true when the list included s0 but not s1. Now, the user must call a specific variant of Include to make this clear. This patch also fixes the implementation of UseScratchRegisterScope accordingly, and updates the test to check this behaviour. Further testing would be beneficial here, but this patch is blocking other work. Change-Id: I25499b8d3a292df217e3338e13d1817a7d125b45
nstructions-aarch32.h
acro-assembler-aarch32.cc
|
a5372b10e91d4ecaddedc9c4aec2d61bf952a2ca |
12-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Optimize load/store with a big offset. Change-Id: I08d3d94b1cb460d7a4535dd4547abe5c75832e9c
acro-assembler-aarch32.cc
|
c12d772a9c07b86010ec7e929716a95bda2aab25 |
09-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix macro-assembler Movs with pc and wide immediate for T32. Change-Id: I1e1efa8b202ac07875c783cd50d8ae90b833748e
acro-assembler-aarch32.cc
|
7827144797ee5ebfa0b574f45ad8ff235f919304 |
08-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Allow a label which is in the veneer pool to be bound with 'bind'. Change-Id: I1e0d03498ec86ed23d94ef1db2d2adc5b73ef984
ssembler-aarch32.cc
ssembler-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
bf9f0ca0d76df354d17c181ef2121016859f299c |
15-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Add MacroAssembler tests for Rsc and Orn This patch adds manual tests for the InstructionCondRROp delegate, and fixes two cases where CodeBufferCheckScope triggers an assertion because we have generated more instructions that we thought. Also, this patch limits this delegate to only Orn, Orns, Rsc and Rscs. Let's give an error to users if they have mis used the other instructions. Change-Id: I36ad39679839b81aa2fe8362064239aea3baa861
acro-assembler-aarch32.cc
|
4634a88b6db240a13adc66f26ff3437806f08aec |
14-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove Addw, Movw, Subw, Tbb and Tbh from the MacroAssembler This patch removes instructions that should not be exposed to the user, instead, the MacroAssembler can choose to generate them. For instance: - Use Add/Mov/Sub instead of Addw/Movw/Subw. The latter instructions just target a specific encoding, they are for the assembler only. - Use Switch/Case/End to generate Tbb and Tbh instruction if they are available. This patch also removes references to these instructions in the macro-assembler's delegates as well as simulator tests for them. Of course, they are still covered by assembler tests. Change-Id: I86d606f433aad8cdccba8dd9681ff6d94a9adac3
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
30aaad9e13111af88c55cbbba6dc31b06e1c8d5a |
14-Nov-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Restrict the "Condition, Register, Operand" delegate to only Teq This patch changes the "InstructionCondROp" delegate to perform the following transformations: - Movt: Abort and tell the user the immediate needs to fit in 16 bits. - Movw: Abort and tell the user to use Mov instead. - Teq: Handle out-of-bounds immediates. - Sxtb16/Uxtb16: Unimplemented. Finally, this delegate used to handles short hands of Add and Sub, but those are no longer supported. Change-Id: I135b07be09a2aada9e9649fa082bbb6a3182b8ec
acro-assembler-aarch32.cc
|
4e329d4f71bb1a2f4dafca04a512e7c2862343f7 |
15-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Remove masm support for vld3/vst3 This covered only vld3 and vst3 for single or all lanes (not multiple lanes) and was untested. It seems more prudent to remove this than complete the support for other vld/vst instructions, with tests. Change-Id: I707a0f2329ea530d16b64aa9062774e4de1c755d
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
21d8d8d551fc50cb15fc137f00a154ea65eb2b81 |
14-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Improve error reporting in macro asm ContextScope Wrap ContextScope creation in a macro, and pass in the file and line number. These locations are printed out when a recursion limit is reached. Change-Id: Ia1339af9af146cf3682d9dc7bf2b131bea4524bf
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
2ec1f7562e90ebd295989c1323d59161a23dadfc |
11-Nov-2016 |
Martyn Capewell <martyn.capewell@arm.com> |
Fix comparison instructions with PC in masm Remove Tst with PC destination for Thumb encodings, support Cmp with PC for ARM encodings, and create a signed immediate getter to remove some undefined behaviour. Change-Id: Iae995de81ca83be3fe990a368345626fee81ee68
acro-assembler-aarch32.cc
perand-aarch32.h
|
f8833fa525b25cb1d72beb4f2d033d5ad9a3eb80 |
09-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Allow Cbz/Cbnz to branch immediately after the instruction. Change-Id: I7ad6bbc84d69bc7ac3b61999fd77823b6ea552a2
onstants-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
76887c1820d5a7c957135c94e7cd57e39084ba8d |
10-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add comment to MacroAssembler::ContextScope. Change-Id: I8c7da6fef2456d61a4d3d3abbbd02103d2365249
acro-assembler-aarch32.h
|
60241a544be0ebf48347789bf0ec268414364627 |
10-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Specify NOLINT disabled directives. Remain: src/aarch32/operand-aarch32.h:207: Operand(float) VIXL_NO_RETURN_IN_DEBUG_MODE { // NOLINT src/aarch32/operand-aarch32.h:210: Operand(double) VIXL_NO_RETURN_IN_DEBUG_MODE { // NOLINT which can't be specified due to a linter bug. Change-Id: I5cf55e18772564363a9d895ef83481381ae96635
ssembler-aarch32.cc
isasm-aarch32.cc
isasm-aarch32.h
nstructions-aarch32.cc
nstructions-aarch32.h
perand-aarch32.cc
perand-aarch32.h
|
fad350715bbb9f13ea85c84da4e6095dfee3cd15 |
08-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix Condition for sanitizer. Change-Id: I6633a0ffd669ce4929a7859e9ed82fa48c8b3055
isasm-aarch32.cc
nstructions-aarch32.h
|
3c1635a4387a8d19b33d558b75c376e6587c317e |
08-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix ImmediateA32 for sanitizer. Change-Id: Iecf6715b5e6397f256ba881a84a6b42dc0707e4e
nstructions-aarch32.cc
|
aaac397e490f27ca3011e8ba2cb61f4f455c1a4d |
09-Nov-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
AArch32: Replace uses of EnsureEmitFor with scopes. The intention is to catch cases where we generate more code than we have reserved space for. It is likely that many of these scopes reserve insufficient size, but they all pass the tests that exist. We still need to review each one, write tests, and update the sizes as appropriate. Note that EmissionCheckScope is the proper scope to use, but it isn't implemented consistently for AArch32 yet. However, it will be easy to replace these uses of CodeBufferCheckScope with EmissionCheckScope once it is available. Change-Id: Ie852c3688b2ae5b1b531d531ad1c2357808fb1eb
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
4e6b4af20e5664c43ca1717b4fa7d6fb4cb3667c |
08-Nov-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Fix `MacroAssembler:VeneerPoolIsEmpty()`. Change-Id: I8a11f954e70fffe795336831a35eb3ee671c8a09
acro-assembler-aarch32.h
|
e42218c6ca969b7d4032da978fb05f06641df100 |
19-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Make bind and place more consistent. Change-Id: I1743511e3c6f995f05cded38347a015c198b1fb9
ssembler-aarch32.cc
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
1075d15db3f11224e70960ed653462064018a001 |
02-Nov-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Rename pc to code_address for the disassembler. Change-Id: I5e35cf27f0434bc856fe9075dae5e0a9f6e24d84
isasm-aarch32.cc
isasm-aarch32.h
|
7f4a230cbb795755d24e1d4658e99a7ccf1eb24b |
13-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add instruction information to the DisassemblerStream. Change-Id: I2da5371c86c000caef7cf82db8f5440184c8d0a3
ssembler-aarch32.h
onstants-aarch32.h
isasm-aarch32.cc
isasm-aarch32.h
|
dcffac4d0a5a586d3c14971e33bd28fc848bc148 |
19-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix veneer/pool emission while in a Delegate. Change-Id: I76ff3e224f5e85a58a53865c62536d97e73b6730
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
3fac43c1a101f98f116e752b80abc122d32b83ac |
31-Oct-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Mark methods as `override` when compiling with C++11 This patch introduces a VIXL_OVERRIDE macro. When building with gcc -std=c++11, we now enable the `-Wsuggest-override` warning so that we do not forget to add them in the future. Change-Id: I0f402599019ba9de1a7a654e9499f00a07f00201
ssembler-aarch32.cc
acro-assembler-aarch32.h
|
96ff2a40fffe1d0d754a2187efe5ebabef6d8e44 |
27-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Revert "Revert "Ensure that buffer disassembly will never read outside the buffer."" This reverts commit 5d4a535c785cf1e911fa74b97f73298aecbd02ae, with the appropriate fixes. Change-Id: I8a3bad3bab9cc68495d6c0cfe2a78521fc947715
isasm-aarch32.cc
isasm-aarch32.h
|
5d4a535c785cf1e911fa74b97f73298aecbd02ae |
27-Oct-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Revert "Ensure that buffer disassembly will never read outside the buffer." This reverts commit 87c05f09dbb6cada9998bdaeacb5d87d7ad82917. Change-Id: Ie26bd0cd2575323043e230c2558a131f56512308
isasm-aarch32.cc
isasm-aarch32.h
|
26d0fc8c6e5d5a91011bc3150ec49e8b913c5ed5 |
19-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Use non constant value arguments for DisassemblerStream. Change-Id: I47c2164b5d7008fef8d5066e30e89641798b4e86
isasm-aarch32.h
|
87c05f09dbb6cada9998bdaeacb5d87d7ad82917 |
11-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Ensure that buffer disassembly will never read outside the buffer. t32_disassembler_limit1 0x00000000 eb0b0a0c add r10, r11, ip 0x00000004 e800 ? t32_disassembler_limit2 0x00000000 eb0b0a0c add r10, r11, ip 0x00000004 4408 add r0, r1 Change-Id: I730460e4b7628b9d51d99ea99fbca3e9423d7654
isasm-aarch32.cc
isasm-aarch32.h
|
024aa58e9d83147f57a2509cf115b9fc9d260477 |
26-Oct-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Remove the implicit `aarch32::MemOperand` constructor. Change-Id: Ieca14f0e4b411d059442842c81364836c503625d
acro-assembler-aarch32.cc
perand-aarch32.h
|
25e3987b3b684df88edc8069d60b483b95587be5 |
20-Oct-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Support getting the address of a literal with ADR This patch changes the printf implementation in the MacroAssembler to use ADR instead of LDR to get the address of the format string. The format string is placed directly in the code stream. Additionally, Literal<const char*> was changed to simply StringLiteral. It may be surprising to have a completely different behaviour for this case. Change-Id: I15c7acd457eb8ffed056a60cc438b9d7b54a94e1
nstructions-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
6a049f97861bd71c69d81f643e42308d28c5de31 |
21-Sep-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Unify the `Assembler` helpers related to the code buffer. A few helpers in `Assembler` classes that were simply wrappers around `CodeBuffer` methods have been deprecated, and should be replaced by calls to the `CodeBuffer` methods. Change-Id: I72608c8c1f1f2823c58c8f6de042e932abe12629
ssembler-aarch32.h
|
919e3fe28a5024c53ede42922092bbc32e89dcb8 |
14-Oct-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Create a base class for assemblers. This base class defines an interface that assemblers must adhere to. For now, we use it to hold the code buffer. Change-Id: I487430bb98c7044e57b348cffa1e74a2a4c8026f
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
e2aa8941a5b41fbd9f855906b8663009eac14669 |
13-Oct-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
add some identities and macro-assembler rules Change-Id: I8f0b03e829a73024d73955d9abcee032e22fceb8
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
f5348cedd702124c90fc75e75d0195e2e485c620 |
22-Sep-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Remove implicit 64 to 32 bit narrowing This patch fixes cases of implicit 64 to 32 bit narrowing. The issue is that `CodeBuffer` represents code offsets with `ptrdiff_t`, which will be 64 bit on a 64 bit system. However, we want to support generating 32 bit code from a 64 bit program, therefore the 32 bit part of VIXL works with `int32_t` for code offsets. We had implicit conversions happening due to this. We solve this by explicitely casting to `int32_t` in the AArch32 assembler when calling `GetCursorOffset`. If you are working with the `CodeBuffer` directly, you are dealing with a code buffer on the host and so will work with offsets as `ptrdiff_t`. But, when working with the AArch32 assembler itself you will get offsets as `int32_t`. The assembler is in charge of checking that the offsets it gets from the code buffer fit into `int32_t`. Additionally, we had narrowing cases when generally wrapping host pointers into an Operand. This can only work if the pointer fits into 32 bits. This patch introduces a Operand::From() factory method that can be used for converting any integral or pointer type to an immediate operand. Change-Id: Icc15711b34c2477ed997eef238e25496d86ea9aa
ssembler-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
perand-aarch32.h
|
51d1cccb2cbb843c41a586fbedad00ded8f0d6a0 |
22-Sep-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
add load functions with manually placed literals Change-Id: I60c554b2396c608ca371a427d718fe69892bfa26
nstructions-aarch32.h
acro-assembler-aarch32.h
|
31dd2ae90d5e82871667fbf3ee2697a155e7c3ac |
05-Jul-2016 |
Alex Gilday <Alexander.Gilday2@arm.com> |
Correctly allocate executable memory in CodeBuffer CodeBuffer allocates memory that is executable via an ExecuteMemory function. Change-Id: Ib2dca824e9edd3144694cfac627becd35dd48e3c
ssembler-aarch32.h
|
394263d02953f5bd9cffd3c8657f48f375ddcf0e |
20-Sep-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Clarify the ownership of the `DisassemblerStream`. Change-Id: I7f5f9ebb6b9fbb13699cfb9ae2f3e771d3d236bc
isasm-aarch32.h
|
628c5263f1ff96c793173770b85b93ebf8bf8d44 |
21-Sep-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Optimise a few logical and arithmetic identities. The identities are used to avoid generating code or for strength reduction. Change-Id: I8eecd23ced2b283884651a49e794c8f34bda1d29
acro-assembler-aarch32.h
|
74e3ecd9dc3ecf92604e37c4ec9b9ced5048dedf |
21-Sep-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
AArch32: Add a `GetPcOffset()` helper to the `Label` class. Change-Id: I58b7a18eed1565ddf9a38d4570af0c24fc79c431
abel-aarch32.h
|
753bb5554d5832fbd470a460b0c5f839c0f51201 |
20-Sep-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
AArch32: Remove the empty `Instructions` base class for `Assembler`. Change-Id: Ic6c00c0ad98988ede47d3cad8426291972c59c0c
ssembler-aarch32.h
isasm-aarch32.h
nstructions-aarch32.h
|
f678618ae35a43dab65455f446c3de324994c204 |
21-Sep-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Add generic VFP functions which use VRegister instead of SRegister or DRegister. Change-Id: I686e05ec11346711939b58be3730067021f7df72
nstructions-aarch32.h
acro-assembler-aarch32.h
|
d2d8c09008ae28805b862ae7c79183db1ad50e9b |
19-Sep-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
remove It instruction from the macro assembler Change-Id: I8676d3be1e69da3fa27f84e932401467dee92635
acro-assembler-aarch32.h
|
1107e04f82d4809214ff6592b3727298dee1fe45 |
20-Sep-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Differentiate AArch64 and AArch32 macro names. The AArch64 macro is not `#undef`ed, and could cause errors related to macro redifinition. Change-Id: Idb5da594558116ec77f7d87a2b0873e5e3ed6791
nstructions-aarch32.h
|
bf01e787b9ca4ff28b8c4d4355fd575c4ac81dfa |
14-Sep-2016 |
Anton Kirilov <anton.kirilov@linaro.org> |
Add some missing header file inclusions. Change-Id: I8f7497ea6921b655e9996ab7843793f12b27eeed
ssembler-aarch32.h
onstants-aarch32.h
isasm-aarch32.h
abel-aarch32.h
|
2715e0b0654dc266f0224a68e04c30aa04a82aef |
15-Sep-2016 |
Scott Wakeling <scott.wakeling@linaro.org> |
Add IsReferenced() to AArch32 Label. Change-Id: I3dcf521f5d1cfa3c3c0be783fc40e023b982456f
abel-aarch32.h
|
82af61c481f2d54e5718320a32af9ad933e0bf7d |
13-Sep-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Wrap literals with Int64 for consistency Change-Id: I51505f9b72e80e5cebbb0255d49d279dd74524c6
isasm-aarch32.cc
|
120cafb9da939e107413e7158897ad73b83d55bf |
30-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Correctly assemble VCLE and VCLT VCLE and VCLT are aliases for VCGE and VCGT, however the source operands have to be commuted. The assembler did not do this. Change-Id: Icfa437ed417d9e234510fcab6034aa983d53e744
ssembler-aarch32.cc
|
8ee2cef99dc4fae4129430834d2778d97cb5e076 |
12-Sep-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Revert "Correctly assemble VCLE and VCLT" This reverts commit 702351b9ba0640958e17eed2ee041278294899b1. Change-Id: Ic625aeecd276ebd582afd60005f8b1b2eea65f55
ssembler-aarch32.cc
|
702351b9ba0640958e17eed2ee041278294899b1 |
30-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Correctly assemble VCLE and VCLT VCLE and VCLT are aliases for VCGE and VCGT, however the source operands have to be commuted. The assembler did not do this. Change-Id: Ia660ddce3c7a8aeaaf636b393b1df2b710d37c63
ssembler-aarch32.cc
|
8885c17bce593f82cf90c086da242e52943c50ef |
24-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
forbid direct use of assembler from the macro-assembler Change-Id: Ic00c9c72e9aed7efaab72a6fd6838bbd0bda6531
ssembler-aarch32.cc
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
260c6b6a014af9932f308fa53b82fb2ada3acba8 |
06-Sep-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Fix SRegisterList and DRegisterList. Change-Id: I69a4a43dc32141efcbb4eb2dacbd45659aeecc60
nstructions-aarch32.h
|
69acb5618ef7c69bbe165d24493d1af0a00bcc4a |
05-Sep-2016 |
Anton Kirilov <anton.kirilov@linaro.org> |
Fix a formatting issue. Change-Id: I37bdec882826511556ff30614867c471b7a9eebe
isasm-aarch32.cc
|
f7535f22629946eb706d02b8b926e5fe77e3b398 |
31-Aug-2016 |
Anton Kirilov <anton.kirilov@linaro.org> |
Add PrintDisassembler::Decode*At() methods. Change-Id: I5663f1d1e390fdabf88743b615464efb2d4c562a
isasm-aarch32.cc
isasm-aarch32.h
|
7f24bc630745306bf9be3881b510e00bbbf19ae3 |
16-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
add comments to MemOperand Change-Id: I035a6203a48ab4316a99244b0a120f925c04ad1c Change-Id: Ic59f5cdab36d10386d9a58d94f3513f4301bf259
perand-aarch32.h
|
ab2f6c5f500c5b2df2ae8c7dd5a6f25cbdf8004e |
30-Aug-2016 |
Anton Kirilov <anton.kirilov@linaro.org> |
Restrict the set of special core register names used by the AArch32 disassembler Only the special core register names specified in the AArch32 AAPCS, i.e. pc, lr, sp, and ip, will be used; the rest will be printed using the generic "r<number>" convention. Change-Id: Idbd08a06db438ba3f26c9eefa28349ab565b3a11
nstructions-aarch32.cc
|
9cdd215b6b7b830619dd15f111d158a49a7d2367 |
24-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
fix disassembler after removing of RegisterListWithPC and RegisterListWithoutPC Change-Id: I0062141f99a7db39f5ebfa4bf997c73481bc48e9
isasm-aarch32.h
|
7209fd094f20db08fd43fa5bdeea42644f30fc13 |
15-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
remove unused classes RegisterListWithPC and RegisterListWithoutPC Change-Id: I97a346cb34662691fe237f7bb97e4bc92a23833d
nstructions-aarch32.cc
nstructions-aarch32.h
|
21376f637832074ecd3e00f2bf9c708e5e0244b4 |
17-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
AArch32: Optimize `MacroAssemblerHandleOutOfBoundsImmediate()`. Use mvn if possible. Only use one mov if possible. Change-Id: I4d3913200f7d3937c39d31d9fdf3b76280701df0
acro-assembler-aarch32.cc
|
934696dd32c579b5a8aa80bae5384be22f0d9b9c |
18-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
Allow specifying whether an instruction should set flags with an `enum` This patch allow the macro-assembler user to call instructions which can set flags with an argument. That is instead of calling "add(rd, ...)" or "adds(rd, ...)" you can call "add(flags, rd, ...)" with flags which can take the values: - SetFlags - LeaveFlags - DontCare It will call the right function (add or adds) depending on flags and the context. Change-Id: I46d07d3b2989522d16d6432a469dc4b796682cbd
acro-assembler-aarch32.h
|
71bca307f4e94afdbc753e02c101b042cd218b4a |
23-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Use a length argument when constructing S and D register lists This patch changes the SRegisterList and DRegisterList constructors to take a length argument instead of a second register to represent a list. Change-Id: I87cfbe09d1d80d213fc8a37bdfabca884a7eefa2
isasm-aarch32.cc
nstructions-aarch32.h
acro-assembler-aarch32.cc
|
6c4e9957284d43666a32c71e860d29b7a599fa43 |
17-Aug-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
fix cbz/cbnz delegate Change-Id: I2cc60d2e934d5e45b5752b57525d188ba7f53b32
acro-assembler-aarch32.cc
|
c591f74ae6d6a8fefaacedcfa5c23100cb23c23d |
19-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Introduce a custom Disassembler stream This patch introduces a DisassemblerStream type that the user may override to customize how elements (Register, Condition, Label, ...etc) are printed. Some of those such as Labels need to be aware of the context in which they are being used. Change-Id: I7f2447d30738bf20a65ffe65623dc7c44b012fc7
isasm-aarch32.cc
isasm-aarch32.h
abel-aarch32.h
|
1e85b7f2e8ad2bfb233de29405aade635ed207ce |
05-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Introduce architecture specific guards for the simulator This patch makes the VIXL_INCLUDE_SIMULATOR and VIXL_GENERATE_SIMULATOR_CODE header guards specific to either AArch64 or AArch32. Even though the simulator only support AArch64. The build system was updated accordingly, the "simulator" variable now takes "aarch64" or "none" as possible values instead of "on" and "off". This fixes issues we have when we want to build VIXL natively on AArch64 without a simulator, but still include the AArch32 macro-assembler. The later would check for VIXL_GENERATE_SIMULATOR_CODE and then generate calls to native code, which breaks. Change-Id: I2850782558d4cc37f37c1644f0efbd70a3123057
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
3e1b899f48c1328ac748b1f5fa78f417f7ec6581 |
14-Jul-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
AArch32: allow literals' update Numerical literals can now be updated even after being emitted. Change-Id: Ief50bac9079bb8c89c800c911ce6eb93a43ffd0e
nstructions-aarch32.h
|
97a5640aedb2d193ff27b9e7324a2412ed502a59 |
13-Jul-2016 |
Vincent Belliard <vincent.belliard@arm.com> |
add lane access for D and Q registers Change-Id: I7ebe3a5672327ae4ca05e5d6c691378041c8a92c
nstructions-aarch32.h
|
78973f258039f6e96eba85f1b5ecdb14b3c51dbb |
10-Aug-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Correctly include C headers This patch refactors VIXL to use `extern` block when including C header that do not have a C++ counterpart. Change-Id: I203d7d107755dbac3e5f4cf8d2f196f70dea1e07
ssembler-aarch32.cc
isasm-aarch32.cc
nstructions-aarch32.cc
nstructions-aarch32.h
abel-aarch32.h
perand-aarch32.cc
|
fd09817b8770a5e3a64a6fe4fefe85cc29805cd7 |
09-Aug-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Do not include data members conditionally on `VIXL_DEBUG` in headers. Objects visible via headers should have the same data-layout in release and debug modes. Change-Id: I7ce5014ab8406968cdd8e9818a7f840cb443b6c1
acro-assembler-aarch32.h
|
979b1d25d9104f3c545a2c5740612b026053b670 |
29-Jul-2016 |
Artem Serov <artem.serov@linaro.org> |
Add GetStartAddress helper function. Change-Id: I957db991bc84493a36eaf89a16b699c907c3479f
ssembler-aarch32.h
|
10dae1a549308bddc1931f29754d6a4459f70c9b |
27-Jul-2016 |
Jacob Bramley <jacob.bramley@arm.com> |
AArch32: Improve the API for selecting the ISA. Specifically, replace SetT32(false) with SetA32(), and SetT32(true) with SetT32(). This also adds a parameterised SetInstructionSet(...) helper, and allows the instruction set to be set in the constructors. Change-Id: I82609823a4b2af908b38c0a4240ff239561f7507
ssembler-aarch32.cc
ssembler-aarch32.h
nstructions-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
ad91cee685f33b45841b95999ea0a0eb2c3f9708 |
26-Jul-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Minor fix to a comment for Claim(), Drop(), and Peek(). Change-Id: I7c80121610c99bf3114af7644450209cfdb215cb
acro-assembler-aarch32.h
|
d37560600128faaaf187963885366c3a9a5bdef8 |
27-Jul-2016 |
Pierre Langlois <pierre.langlois@arm.com> |
Keep comments describing an instruction on one line This patch unwraps comments showing instruction's expected disassembly in comments. We have a NOLINT marker so clang-format will not wrap it again. Change-Id: I66de6b4543e8f068799a89e0cb613ded7bd9ed6f
isasm-aarch32.cc
|
294e6f426db143d5409895ff4c755b2b203fc07d |
22-Jul-2016 |
Scott Wakeling <scott.wakeling@linaro.org> |
AArch32: Add GetSizeOfCodeGenerated() const accessor to Assembler. Change-Id: I84877dd2c6aa6d0c5755c9dab6235e618bec26b6
ssembler-aarch32.h
|
6c0406d67666027875453d95be4702a6188847dc |
20-Jul-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Add a default argument for the `aarch32::PrintDisassembler` constructor. Change-Id: If59c0fb16e4ea4ae72a7aeaa670ea8b54b218aca
isasm-aarch32.h
|
703ff06a087f67fccde24a7ffbc8a2e74a406cb1 |
11-Jul-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Aarch64: Rename `allow_simulator_instructions_` to `generate_simulator_code_`. Change-Id: I72956db90ab3380b5ad62b37d2ed203ec4045931
ssembler-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
|
d3832965c62a8ad461b9ea9eb0994ca6b0a3da2c |
04-Jul-2016 |
Alexandre Rames <alexandre.rames@linaro.org> |
Update naming to `aarch32` and `aarch64`. Change-Id: I40a929b1095ee3e1b2ca5ef879c7006d8b59acc9
ssembler-aarch32.cc
ssembler-aarch32.h
onstants-aarch32.h
isasm-aarch32.cc
isasm-aarch32.h
nstructions-aarch32.cc
nstructions-aarch32.h
abel-aarch32.h
acro-assembler-aarch32.cc
acro-assembler-aarch32.h
perand-aarch32.cc
perand-aarch32.h
|