summary refs log tree commit diff stats
path: root/compiler/nversion.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2013-03-17 16:44:31 +0100
committerAraq <rumpf_a@web.de>2013-03-17 16:44:31 +0100
commit3703bb929b6214fa9fcafe32d03f7b0c46907e54 (patch)
treea545908ad1f99d4f7f0d9d3042fcc35a55ad7666 /compiler/nversion.nim
parentd9149635393d6c2de589d645b541793da2f5cc9b (diff)
parentaf7e862a06204291a9cb39a9f6583bb721fe208c (diff)
downloadNim-3703bb929b6214fa9fcafe32d03f7b0c46907e54.tar.gz
Merge branch 'master' of github.com:Araq/Nimrod
Diffstat (limited to 'compiler/nversion.nim')
-rw-r--r--[-rwxr-xr-x]compiler/nversion.nim0
1 files changed, 0 insertions, 0 deletions
diff --git a/compiler/nversion.nim b/compiler/nversion.nim
index d60a7a445..d60a7a445 100755..100644
--- a/compiler/nversion.nim
+++ b/compiler/nversion.nim
ghlight .cm { color: #888888 } /* Comment.Multiline */ .highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */ .highlight .cpf { color: #888888 } /* Comment.PreprocFile */ .highlight .c1 { color: #888888 } /* Comment.Single */ .highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #333333 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
;
;
;            Nim's Runtime Library
;        (c) Copyright 2015 Rokas Kupstys
;
;    See the file "copying.txt", included in this
;    distribution, for details about the copyright.
;

format ELF64

section ".text" executable align 16
public narch_getRegisters
public narch_setjmp
public narch_longjmp
public narch_coroSwitchStack
public narch_coroRestoreStack


narch_getRegisters:
    mov   [rdi], rax
    mov   [rdi+8], rbx
    mov   [rdi+10h], rcx
    mov   [rdi+18h], rdx
    mov   [rdi+20h], rsi
    mov   [rdi+28h], rdi
    mov   [rdi+30h], rbp
    mov   [rdi+38h], rsp
    mov   rax, [rsp]
    mov   [rdi+40h], rax      ; rip
    mov   [rdi+48h], r8
    mov   [rdi+50h], r9
    mov   [rdi+58h], r10
    mov   [rdi+60h], r11
    mov   [rdi+68h], r12
    mov   [rdi+70h], r13
    mov   [rdi+78h], r14
    mov   [rdi+80h], r15
    ret


narch_setjmp:
    ; Based on code from musl libc Copyright © 2005-2014 Rich Felker, et al.
    mov   [rdi], rbx          ; rdi is jmp_buf, move registers onto it
    mov   [rdi+8], rbp
    mov   [rdi+10h], r12
    mov   [rdi+18h], r13
    mov   [rdi+20h], r14
    mov   [rdi+28h], r15
    lea   rdx, [rsp+8]        ; this is our rsp WITHOUT current ret addr
    mov   [rdi+30h], rdx
    mov   rdx, [rsp]          ; save return addr ptr for new rip
    mov   [rdi+38h], rdx
    xor   rax, rax            ; always return 0
    ret


narch_longjmp:
    ; Based on code from musl libc Copyright © 2005-2014 Rich Felker, et al.
    mov   rax, rsi            ; val will be longjmp return
    test  rax, rax
    jnz   @F
    inc   rax                 ; if val==0, val=1 per longjmp semantics
@@:
    mov   rbx, [rdi]          ; rdi is the jmp_buf, restore regs from it
    mov   rbp, [rdi+8]
    mov   r12, [rdi+10h]
    mov   r13, [rdi+18h]
    mov   r14, [rdi+20h]
    mov   r15, [rdi+28h]
    mov   rsp, [rdi+30h]      ; this ends up being the stack pointer
    mov   rdx, [rdi+38h]      ; this is the instruction pointer
    jmp   rdx                 ; goto saved address without altering rsp


narch_coroSwitchStack:
    pop rsi                   ; return address
    mov rdx, rsp              ; old rsp for saving
    mov rsp, rdi              ; swap stack with one passed to func
    push rdx                  ; store old stack pointer on newly switched stack
    sub rsp, 8h               ; stack alignment
    jmp rsi                   ; return


narch_coroRestoreStack:
	pop rsi                   ; return address
	add rsp, 8h               ; stack alignment
	pop rsp                   ; resture old stack pointer
	jmp rsi                   ; return