Commit Graph

58 Commits

Author SHA1 Message Date
zra@google.com a783459837 Preserves callee-saved FPU registers on ARM
Preserves callee-saved FPU registers on ARM when
going from C++ to Dart code. Adds assertions to
the simulator to make sure this is being done
correctly.

R=regis@google.com

Review URL: https://codereview.chromium.org//23549013

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27072 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-03 18:23:43 +00:00
fschneider@google.com cfab482b84 Follow-up fix to my change to IsPowerOfTwo: Alignment of one means no alignment, not zero.
We assert that the alignment is a power of two. Therefore, platforms that do not need 
alignment should return alignment of one instead of zero.

R=kmillikin@google.com

Review URL: https://codereview.chromium.org//23745008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@27037 260f80e4-7a28-3924-810f-c04153c831b5
2013-09-03 10:56:43 +00:00
regis@google.com 8171570100 Fix the previously ineffective assert checking the number of arguments passed to
a runtime entry in the VM.

R=asiva@google.com

Review URL: https://codereview.chromium.org//23672011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@26826 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-28 23:07:14 +00:00
zra@google.com 5c3c549300 Allows compiler bailout to handle errors of any type.
R=asiva@google.com, iposva@google.com

Review URL: https://codereview.chromium.org//22389004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25974 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-09 19:51:11 +00:00
zra@google.com fa2ad38a31 Enables per-function far-branches for ARM and MIPS.
R=regis@google.com, srdjan@google.com

Review URL: https://codereview.chromium.org//21363003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25723 260f80e4-7a28-3924-810f-c04153c831b5
2013-08-01 20:51:46 +00:00
zra@google.com 8f3e8783f8 Implements the two argument shuffle SIMD instruction for ARM.
R=regis@google.com

Review URL: https://codereview.chromium.org//21004011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25638 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-30 20:49:22 +00:00
zra@google.com 42217dc159 Implements far-branches on ARM.
R=regis@google.com

Review URL: https://codereview.chromium.org//21159002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25617 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-30 15:33:36 +00:00
zra@google.com 22c342637c Implements Float32x4 and Uint32x4 instructions for ARM.
R=regis@google.com

Review URL: https://codereview.chromium.org//19978004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25358 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-23 20:02:12 +00:00
zra@google.com af23dfc5b2 Increases the number of ARM floating-point registers.
This is to be consistent with VFPv3_D32. Later, we'll detect
VFPv3_D16 at runtime.

R=regis@google.com

Review URL: https://codereview.chromium.org//19806005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25352 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-23 18:25:44 +00:00
zra@google.com dd9adc1a86 Adds more SIMD instructions for ARM.
Adds the vnegqs, vabsqs, and vandq instructions.

Also reverts the increase in the number of floating point registers since it is causing crashes on hardware.

R=regis@google.com

Review URL: https://codereview.chromium.org//19493004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25320 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-22 23:26:12 +00:00
zra@google.com 4b97f8c18c Adds reciprocal squre root SIMD instructions for ARM.
R=regis@google.com

Review URL: https://codereview.chromium.org//19875002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25291 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-22 18:19:44 +00:00
zra@google.com a15bac1044 Adds ARM SIMD instructions.
vminqs, maxqs, vrecpeqs (Reciprocal estimate), vrecpsqs (Reciprocal Newton-Raphson step).

R=regis@google.com

Review URL: https://codereview.chromium.org//19773017

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25245 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-19 21:32:03 +00:00
zra@google.com 18f6092d52 Implements ARM SIMD comparison instructions.
R=regis@google.com

Review URL: https://codereview.chromium.org//19678020

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25189 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-18 22:56:45 +00:00
zra@google.com d886c10f6e Enables a SIMD test for ARM.
Required adding the veorq, vmovq, and vdup instructions.

R=regis@google.com

Review URL: https://codereview.chromium.org//19776007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25165 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-18 18:40:27 +00:00
zra@google.com 4731ad6b71 Adds the vtbl ARM SIMD instruction.
It is needed for the Float32x4ShuffleInstr of the intermediate language.

R=regis@google.com

Review URL: https://codereview.chromium.org//19400003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25073 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-16 21:18:26 +00:00
zra@google.com 3cebda38e6 Merges ARM load/store type enums into one enum.
R=regis@google.com

Review URL: https://codereview.chromium.org//19256021

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25064 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-16 18:32:40 +00:00
zra@google.com 344b295eee Implements ARM SIMD multiplication and subtraction instructions.
R=regis@google.com

Review URL: https://codereview.chromium.org//19290006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@25052 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-16 16:13:56 +00:00
zra@google.com f219f81b14 Begins implementation of ARM neon instructions.
Just adds the vadd instruction, but also changes the
arm assembler to expose the Q registers rather than the
D registers. Q0 = D1:D0 = S3:S2:S1:S0. This is similar
to how ia32 and x64 use only the xmm registers for
floating point.

R=regis@google.com

Review URL: https://codereview.chromium.org//18684008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24982 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-12 23:22:50 +00:00
zra@google.com 20dcf8afaa Implements OSR for arm and mips.
R=regis@google.com

Review URL: https://codereview.chromium.org//19017007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24896 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-10 23:45:18 +00:00
zra@google.com f86d2ec1b4 Adds support for integer division for ARM chips without the sdiv instruction.
R=regis@google.com

Review URL: https://codereview.chromium.org//18331006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24635 260f80e4-7a28-3924-810f-c04153c831b5
2013-07-01 17:44:09 +00:00
regis@google.com 3711825476 Fix Random_nextState intrinsic on ARM.
R=zra@google.com

Review URL: https://codereview.chromium.org//18054006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24548 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-27 20:16:53 +00:00
regis@google.com 169bc2f989 Fix code for store buffer update on ARM and MIPS (link register was trashed).
R=zra@google.com

Review URL: https://codereview.chromium.org//17868006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@24493 260f80e4-7a28-3924-810f-c04153c831b5
2013-06-26 22:14:42 +00:00
regis@google.com 97a881be10 Enable language tests on SIMARM and mark 14 of them as failing.
Implement more features on ARM.

R=zra@google.com

Review URL: https://codereview.chromium.org//16244007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23448 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-31 00:38:21 +00:00
regis@google.com 77417c2f49 Implement a few more features on ARM.
The vm tests byte_array_test and byte_array_optimized_test still fail due to
an inlining bug on ARM.

R=zra@google.com

Review URL: https://codereview.chromium.org//15899010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23370 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-29 23:12:20 +00:00
zra@google.com e5229295a0 Removes ARM mrc instruction.
It is a privileged instruction and was only being used in tests
running on the simulator.

R=regis@google.com

Review URL: https://codereview.chromium.org//16194010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23367 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-29 21:31:27 +00:00
zra@google.com 26fa41d1b1 Implements intrinsics for ARM.
R=regis@google.com

Review URL: https://codereview.chromium.org//15822008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@23311 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-28 22:55:51 +00:00
srdjan@google.com ddc9d23610 Inline _OneByteString._setAt. The key knowledge is that _setAt is an internal method that has to be called with correct arguments, therefore no checks are needed.
R=fschneider@google.com, zra@google.com

Review URL: https://codereview.chromium.org//14917020

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22528 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-08 20:03:33 +00:00
zra@google.com fabc87d633 Fixes for integer division on ARM hardware so that assembler tests pass.
Now, all VM tests that pass on SIMARM, pass on ARM.

Also, more assertions in the ARM disassembler and simulator to
make sure that condition codes aren't used with bkpt.

R=regis@google.com

Review URL: https://codereview.chromium.org//14784011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22471 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-07 18:21:18 +00:00
zra@google.com 87ae3bb45f Allows "Hello, world!" to run on ARM hardware.
Also, enables more vm tests on SIMMIPS.

R=regis@google.com

Review URL: https://codereview.chromium.org//14605006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22344 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-02 22:58:52 +00:00
regis@google.com 76c8e61855 Fix ARM memory addressing mode 3 in assembler.
Update assembler test.

R=zra@google.com

Review URL: https://codereview.chromium.org//14637013

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@22285 260f80e4-7a28-3924-810f-c04153c831b5
2013-05-01 21:33:08 +00:00
regis@google.com ad6005e5c4 Support debugger API on ARM.
Support smull ARM instruction in order to detect 32-bit multiplication overflow.
Enable debugger api tests on ARM.
Enable isolate tests on ARM.
Enable code descriptors tests on ARM.
Enable snapshot tests on ARM.
Enable heap tests on ARM.

Review URL: https://codereview.chromium.org//13983016

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21890 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-23 16:10:22 +00:00
regis@google.com 301c572eea Implement missing features to run Hello world! in checked mode on simulated ARM.
Review URL: https://codereview.chromium.org//14192032

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21780 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-19 23:21:07 +00:00
zra@google.com dae5068650 Enables cross-compilation of the VM for ARM.
Uses the "toolset" feature of gyp to build the dart VM
for ARM, but restricts building of snapshot generation
to the host machine.

For generated source files, it also changes to using
LIB_DIR instead of SHARED_INTERMEDIATE_DIR to avoid
generation of duplicate Makefile rules (gyp doesn't
know that generated source files from toolchains it
thinks are different will be the same.)

Review URL: https://codereview.chromium.org//12726011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21757 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-19 18:05:44 +00:00
regis@google.com 524fbc038b Implement catch on ARM.
Enabled UnhandledExceptions vm test.
Minor clean up.

Review URL: https://codereview.chromium.org//14362008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21708 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-18 22:19:49 +00:00
regis@google.com d79c7c1969 Implement long jump in ARM and MIPS simulators.
Implement error and exception handler stubs on ARM.
Hook up simulator for object tests.
Enable codegen and object tests on ARM.

Review URL: https://codereview.chromium.org//14309004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21680 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-18 16:23:25 +00:00
regis@google.com b37703989f Implement write barrier on ARM.
Enable StoreIntoObject and DartEntry vm tests.
Review URL: https://codereview.chromium.org//13638019

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21083 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-08 16:44:39 +00:00
regis@google.com 46a5dbeb26 Support UseDartApi vm test on ARM.
Review URL: https://codereview.chromium.org//13671004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20981 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-05 16:46:53 +00:00
regis@google.com 05e2ba9540 Support FrameLookup vm test on ARM, requiring among other things:
Maintain a separate top_exit_frame_info for simulated frames and use it to
verify that longjumps are safe.
Make sure unwinding of scopes works in the presence of a simulator.
Support inline allocation of objects.
Support checking of inline cache and instance calls.
Support subtype test cache.
Support (some) equality checks.
Support for (some) conditional branches.
Support for pool pointer setup in stubs.
Review URL: https://codereview.chromium.org//13502002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20890 260f80e4-7a28-3924-810f-c04153c831b5
2013-04-03 20:17:14 +00:00
regis@google.com b24d57ca66 Support checked mode for VM tests on ARM.
Review URL: https://codereview.chromium.org//12773008

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20623 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-28 17:41:35 +00:00
regis@google.com b8bf4159b5 Do not use object pool for VM heap objects on ARM.
Update decoding of call pattern accordingly.
Add missing store barrier when storing object pool in instructions object.
Work with GrowableObjectArray in old heap space when assembling object pool.
Review URL: https://codereview.chromium.org//13070003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20483 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-25 20:29:47 +00:00
regis@google.com 0c27ffc6a4 Implement optional parameter handling in ARM vm.
Enable FindCodeObject test on ARM (production mode only for now).
Make sure the object pool is allocated in the old space.
Some more code cleanup on IA32 and X64 (use named constants).
Review URL: https://codereview.chromium.org//12663024

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@20399 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-22 18:30:35 +00:00
regis@google.com 6a701789b9 Decode ic data and arguments descriptor passed in calls on ARM.
Review URL: https://codereview.chromium.org//12518016

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19827 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-11 23:15:48 +00:00
regis@google.com 7766ac76d4 Implement leaf runtime call stub on ARM and corresponding call redirection
in ARM simulator.
Implement jump patching on ARM.
Add missing ICache flush calls.
Review URL: https://codereview.chromium.org//12439005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19724 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-08 21:16:46 +00:00
regis@google.com b95087eb73 Implement native call stub on ARM and native call redirection in ARM simulator.
Pass PatchStaticCall test.
Review URL: https://codereview.chromium.org//12629004

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19704 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-08 18:22:14 +00:00
regis@google.com 6ed497382f Fix build.
Review URL: https://codereview.chromium.org//12433011

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19575 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-06 19:03:03 +00:00
regis@google.com bb71e75ade Clean up ARM assembly code loading and storing from/to a large offset.
Make use of vldm and vstm ARM instructions.
Implement ARM stub printing stop message.
Review URL: https://codereview.chromium.org//12481007

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19571 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-06 18:49:38 +00:00
zra@google.com 31da7d6c55 Adds muls, sdiv, udiv instructions to ARM simulator, assembler, disassembler
Review URL: https://codereview.chromium.org//12459005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19511 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-05 19:53:43 +00:00
zra@google.com c9c0881ac7 Adds mrc instruction to arm simulator, assembler, disassembler.
This instruction will be used to query an arm processor to
determine whether it supports the sdiv and udiv instructions.

Also adds a flag --sim_has_int_div to the arm simulator,
which changes the result of the mrc instruction so we can
test both ways.
Review URL: https://codereview.chromium.org//12378080

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19439 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-05 01:03:22 +00:00
regis@google.com 1b274ff2cf Remove the barely used macro assemblers after merging their contents to the base
assemblers.
Review URL: https://codereview.chromium.org//12398029

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19434 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-05 00:04:32 +00:00
regis@google.com a879bba2ff Second codegen test passing on ARM (simulated).
This required support on ARM for:
- compilation of static calls
- patching of static calls
- stub to call into runtime
- redirection support for calls from simulator to host runtime
- stack frame iteration
Review URL: https://codereview.chromium.org//12381034

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@19405 260f80e4-7a28-3924-810f-c04153c831b5
2013-03-04 18:08:38 +00:00