Files
sdk/runtime/llvm_codegen/test/codegen/Inputs/runtime.S
T
Jake Ehrlich 87b0dbab2d [llvm_codegen] Contrived hello world
This change adds enough functionality to compile hello world
from S-expressions in a contrived way. It fails to handle this input
realistically in several ways.

1) It assumes the existence of dart:core::print
2) It handles all dart values as C strings
3) It assumes only very static calls can be made with no named arguments
4) If a stack overflow is detected it just traps.
5) I'm not sure how the current dart runtime works but the contrived runtime
   used here puts a contrived thread object in `gs`.

This change adds a basic framework for implementing new instructions that
should make it possible to implement new instructions with much smaller
changes however.

Change-Id: Ic167a29908a875bfc234c4e9bf5f4ac2ff52a3a2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117222
Commit-Queue: Jake Ehrlich <jakehehrlich@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-10-10 20:57:02 +00:00

39 lines
738 B
ArmAsm

// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
.data
.type _threadObject,@object
.size _threadObject,1400
_threadObject:
.fill 1400
.text
.file "runtime.S"
.globl main
.type main,@function
.globl "dart:core::print"
.type "dart:core::print",@function
.globl arch_prctl
.type arch_prctl,@function
main:
movq %rsp, %rax
subq $0x1000, %rax
movq %rax, [_threadObject + 72]
# Pass ARCH_SET_GS
movq $0x1001, %rdi
# Pass $_threadObject
movq $_threadObject, %rsi
callq arch_prctl
callq "hello.dart::main"
ret
"dart:core::print":
callq puts
ret