Commit graph

11 commits

Author SHA1 Message Date
Vyacheslav Egorov
6e0a380e93 Add @blaugold to AUTHORS
Authored e2d6cb69fb

Change-Id: Ifb39fc386b1105790268d561f9b82aafd9e3070c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/256064
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Slava Egorov <vegorov@google.com>
2022-08-23 10:48:31 +00:00
Ryan Macnak
04ba20aa98 [vm] Support RISC-V.
Implements a backend targeting RV32GC and RV64GC, based on Linux standardizing around GC. The assembler is written to make it easy to disable usage of C, but because the sizes of some instruction sequences are compile-time constants, an additional build configuration would need to be defined to make use of it.

The assembler and disassembler cover every RV32/64GC instruction. The simulator covers all instructions except accessing CSRs and the floating point state accessible through such, include accrued exceptions and dynamic rounding mode.

Quirks:
  - RISC-V is a compare-and-branch architecture, but some existing "architecture-independent" parts of the Dart compiler assume a condition code architecture. To avoid rewriting these parts, we use a peephole in the assembler to map to compare-and-branch. See Assembler::BranchIf. Luckily nothing depended on taking multiple branches on the same condition code set.
  - There are no hardware overflow checks, so we must use Hacker's Delight style software checks. Often these are very cheap: if the sign of one operand is known, a single branch is needed.
  - The ranges of RISC-V branches and jumps are such that we use 3 levels of generation for forward branches, instead of the 2 levels of near and far branches used on ARM[64]. Nearly all code is handled by the first two levels with 20-bits of range, with enormous regex matchers triggering the third level that uses aupic+jalr to get 32-bits of range.
  - For PC-relative calls in AOT, we always generate auipc+jalr pairs with 32-bits of range, so we never generate trampolines.
  - Only a subset of registers are available in some compressed instructions, so we assign the most popular uses to these registers. In particular, THR, TMP[2], CODE and PP. This has the effect of assigning CODE and PP to volatile registers in the C calling convention, whereas they are assigned preserved registers on the other architectures. As on ARM64, PP is untagged; this is so short indices can be accessed with a compressed instruction.
  - There are no push or pop instructions, so combining pushes and pops is preferred so we can update SP once.
  - The C calling convention has a strongly aligned stack, but unlike on ARM64 we don't need to use an alternate stack pointer. The author ensured language was added to the RISC-V psABI making the OS responsible for realigning the stack pointer for signal handlers, allowing Dart to leave the stack pointer misaligned from the C calling convention's point of view until a foreign call.
  - We don't bother with the link register tracking done on ARM[64]. Instead we make use of an alternate link register to avoid inline spilling in the write barrier.

Unimplemented:
 - non-trivial FFI cases
 - Compressed pointers - No intention to implement.
 - Unboxed SIMD - We might make use of the V extension registers when the V extension is ratified.
 - BigInt intrinsics

TEST=existing tests for IL level, new tests for assembler/disassembler/simulator
Bug: https://github.com/dart-lang/sdk/issues/38587
Bug: https://github.com/dart-lang/sdk/issues/48164
Change-Id: I991d1df4be5bf55efec5371b767b332d37dfa3e0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/217289
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2022-01-20 00:57:57 +00:00
Artem Serov
974d289181 [runtime/vm] ARM64: Support unaligned memory accesses for regex.
Support unaligned memory accesses for regex compiler for arm64
target. Also fix a bug in LoadCodeUnitsInstr IL visitor where
Address::OperandSizeFor was used to get access size (which
returned size of one element independently of actual element
count).

Change-Id: I77c449c8597f8cfd500b8d701f72c39c46a443b7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121424
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-10-15 20:11:40 +00:00
Ben Konyi
5fbf7720f8 [ VM ] Updated splay-tree licenses, added V8 project authors to AUTHORS
Change-Id: I02e38f3b80617d0d4ddf398cb94e8ee027d68e0c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100889
Reviewed-by: Zach Anderson <zra@google.com>
2019-04-30 19:50:46 +00:00
Alan Knight
9f69fc620b Add Cristian Almstrand to AUTHORS
BUG=
R=kevmoo@google.com

Review URL: https://codereview.chromium.org//1236153004 .
2015-07-16 09:51:56 -07:00
ricow@google.com
539baa1f8f Added 'Kenneth Endfinger' to AUTHORS file
Patch supplied by Kenneth Endfinger

R=ricow@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@37815 260f80e4-7a28-3924-810f-c04153c831b5
2014-06-30 12:27:29 +00:00
kevmoo@google.com
a9896e637f samples/pop_pop_win: now based on StageXL
R=sigmund@google.com

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

Patch from K. Alex Gann <k.alexgann@gmail.com>.

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35231 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-21 22:57:06 +00:00
nweiz@google.com
f11614bb45 Add a context field to Message in shelf.
Originally https://codereview.chromium.org/226263007/.

BUG=https://code.google.com/p/dart/issues/detail?id=17992
R=kevmoo@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35102 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-16 01:23:01 +00:00
kevmoo@google.com
f2f1aa824c Updated markdown library. This adds support for images in the doccumentation!
Here are the commits from the markdown library. This was a non-breaking
change but was versioned incorrectly.

See:
* https://github.com/dpeek/dart-markdown/pull/10
* https://github.com/dpeek/dart-markdown/issues/11

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

Patch from Martin Charles <martincharles07@gmail.com>.

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@34525 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-28 20:52:21 +00:00
nweiz@google.com
e47cf1319c Content-Type header is now stored with a case insensitive key.
Actually, all headers are. Added test that failed before this fix.

BUG=17405
R=nweiz@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@33635 260f80e4-7a28-3924-810f-c04153c831b5
2014-03-13 01:36:04 +00:00
ricow@google.com
ffa9d874c4 Move LICENSE, AUTHORS, PATENTS into the dart directory.
BUG: 16582

R=dgrove@google.com, kasperl@google.com, sgjesse@google.com

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@32482 260f80e4-7a28-3924-810f-c04153c831b5
2014-02-10 06:48:47 +00:00