Skip to content

Commit c42bce3

Browse files
print S is mostly working aside from some offsets
1 parent 30c2a09 commit c42bce3

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

STDLIB/default-instruction-set.lm

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ fragment mov := λ(: src LocalVariable+Sized<size>)(: index Literal+Constant)(:
6767
))
6868
))
6969
) Nil);
70+
fragment mov := λ(: src Reg64+x[])(: index Literal+Constant)(: dst LocalVariable+Sized<size>). (: (
71+
(.program (
72+
(\t 'mov \s '% (.expression src) , \s '%r14 \n)
73+
(for word-offset in (range( 0 (/( size 8 )) )) (
74+
\t 'movq \s (*( word-offset 8 )) \[ '%r14 \] , '%r15 \n
75+
\t 'movq \s '%r15 , \s (+( (.expression dst) (*( word-offset 8 )) )) \[ '%rbp \] \n
76+
))
77+
))
78+
) Nil);
7079

7180
fragment mov := λ(: src LocalVariable)(: dst Constant+Reg64). (: ( (.program( \t 'mov \t (.expression src) \[ '%rbp \] , \s '% (.expression dst) \n)) ) Nil);
7281
fragment mov := λ(: src GlobalVariable)(: dst Constant+Reg64). (: ( (.program(

STDLIB/default-stdlib.lm

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,6 @@ close := λ(: x S). (: (tail(
1010
(as R8 S[])
1111
)) S[]);
1212

13-
open := λ(: x S[]). (: (tail(
14-
()
15-
SNil
16-
)) S);
17-
1813
print := λ(: x S). (: (tail(
1914
(if (==( (.0 x) 3u64 )) (
2015
(print '\[\]_s)
@@ -23,10 +18,13 @@ print := λ(: x S). (: (tail(
2318
(print (.1 (as x SAtom)))
2419
) (
2520
(if (==( (.0 x) 1u64 )) (tail(
21+
(let c SNil)
2622
(print '\[_s)
27-
(print (open (.1 (as x SCons))))
23+
(mov( (.1 (as x SCons)) 0u64 c ))
24+
(print c)
2825
(print '\s_s)
29-
(print (open (.2 (as x SCons))))
26+
(mov( (.2 (as x SCons)) 0u64 c ))
27+
(print c)
3028
(print '\]_s)
3129
)) (tail(
3230
(print '[_s)

0 commit comments

Comments
 (0)