Skip to content

Commit

Permalink
Get rid of unnecessary old stack pointer storage
Browse files Browse the repository at this point in the history
  • Loading branch information
ayazhafiz committed Feb 19, 2023
1 parent 330a855 commit fd08111
Show file tree
Hide file tree
Showing 18 changed files with 298 additions and 347 deletions.
9 changes: 4 additions & 5 deletions co_lc/test/add.co
Expand Up @@ -5,13 +5,12 @@
> +ir -print
> @main: {
> % Stack relative to frame pointer:
> % -4 #return
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -3 #return
> % -2 @old_pc
> % -1 @old_fp
> @main:
> push 34
> store-into fp[-4]
> store-into fp[-3]
> ret
> }

Expand Down
48 changes: 22 additions & 26 deletions co_lc/test/call.co
Expand Up @@ -8,65 +8,61 @@ addTo5AndDouble 10
> +ir -print
> plus5: {
> % Stack relative to frame pointer:
> % -5 #return
> % -4 m
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -4 #return
> % -3 m
> % -2 @old_pc
> % -1 @old_fp
> plus5:
> push 5
> push fp[-4]
> push fp[-3]
> add
> store-into fp[-5]
> store-into fp[-4]
> ret
> }
>
> addTo5AndDouble: {
> % Stack relative to frame pointer:
> % -5 #return
> % -4 n1
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -4 #return
> % -3 n1
> % -2 @old_pc
> % -1 @old_fp
> addTo5AndDouble:
> sp-add 1
> sp-add 1
> push fp[-4]
> push fp[-3]
> call plus5
> sp-sub 1
> call double
> sp-sub 1
> store-into fp[-5]
> store-into fp[-4]
> ret
> }
>
> double: {
> % Stack relative to frame pointer:
> % -5 #return
> % -4 n
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -4 #return
> % -3 n
> % -2 @old_pc
> % -1 @old_fp
> double:
> push 2
> push fp[-4]
> push fp[-3]
> mul
> store-into fp[-5]
> store-into fp[-4]
> ret
> }
>
> @main: {
> % Stack relative to frame pointer:
> % -4 #return
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -3 #return
> % -2 @old_pc
> % -1 @old_fp
> @main:
> sp-add 1
> push 10
> call addTo5AndDouble
> sp-sub 1
> store-into fp[-4]
> store-into fp[-3]
> ret
> }

Expand Down
37 changes: 17 additions & 20 deletions co_lc/test/closure.co
Expand Up @@ -15,39 +15,36 @@ add 5 6
> +ir -print
> lam: {
> % Stack relative to frame pointer:
> % -6 #return
> % -5 n
> % -4 m
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -5 #return
> % -4 n
> % -3 m
> % -2 @old_pc
> % -1 @old_fp
> lam:
> push fp[-5]
> push fp[-4]
> push fp[-3]
> add
> store-into fp[-6]
> store-into fp[-5]
> ret
> }
>
> add: {
> % Stack relative to frame pointer:
> % -5 #return.captures.0
> % -4 m
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -4 #return.captures.0
> % -3 m
> % -2 @old_pc
> % -1 @old_fp
> add:
> push fp[-4]
> store-into fp[-5]
> push fp[-3]
> store-into fp[-4]
> ret
> }
>
> @main: {
> % Stack relative to frame pointer:
> % -4 #return
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -3 #return
> % -2 @old_pc
> % -1 @old_fp
> @main:
> sp-add 1
> push 6
Expand All @@ -57,7 +54,7 @@ add 5 6
> sp-sub 1
> call lam
> sp-sub 2
> store-into fp[-4]
> store-into fp[-3]
> ret
> }

Expand Down
119 changes: 57 additions & 62 deletions co_lc/test/conditional_dispatch.co
Expand Up @@ -36,124 +36,119 @@ let f3 = (f 3) 2 in
> +ir -print
> lam1: {
> % Stack relative to frame pointer:
> % -8 #return
> % -7 w1
> % -6 y
> % -5 x
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -7 #return
> % -6 w1
> % -5 y
> % -4 x
> % -2 @old_pc
> % -1 @old_fp
> lam1:
> push fp[-6]
> push fp[-5]
> push fp[-4]
> add
> push fp[-7]
> push fp[-6]
> add
> store-into fp[-8]
> store-into fp[-7]
> ret
> }
>
> lam2: {
> % Stack relative to frame pointer:
> % -8 #return
> % -7 w2
> % -6 z
> % -5 y
> % -4 x
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -7 #return
> % -6 w2
> % -5 z
> % -4 y
> % -3 x
> % -2 @old_pc
> % -1 @old_fp
> lam2:
> push fp[-6]
> push fp[-5]
> add
> push fp[-4]
> add
> push fp[-7]
> push fp[-3]
> add
> store-into fp[-8]
> push fp[-6]
> add
> store-into fp[-7]
> ret
> }
>
> lam: {
> % Stack relative to frame pointer:
> % -8 #return
> % -7 w
> % -6 x
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -7 #return
> % -6 w
> % -5 x
> % -2 @old_pc
> % -1 @old_fp
> lam:
> push fp[-5]
> push fp[-6]
> push fp[-7]
> add
> store-into fp[-8]
> store-into fp[-7]
> ret
> }
>
> f: {
> % Stack relative to frame pointer:
> % -11 #return.captures.0
> % -10 #return.captures.1
> % -9 #return.captures.2
> % -8 #return.lambda_tag
> % -7 n
> % -6 z
> % -5 y
> % -4 x
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -10 #return.captures.0
> % -9 #return.captures.1
> % -8 #return.captures.2
> % -7 #return.lambda_tag
> % -6 n
> % -5 z
> % -4 y
> % -3 x
> % -2 @old_pc
> % -1 @old_fp
> f:
> push 1
> push fp[-7]
> push fp[-6]
> =
> jmpz else
> then:
> push fp[-4]
> store-into fp[-11]
> push 0
> push fp[-3]
> store-into fp[-10]
> push 0
> store-into fp[-9]
> push 0
> store-into fp[-8]
> push 0
> store-into fp[-7]
> ret
> else:
> push 2
> push fp[-7]
> push fp[-6]
> =
> jmpz else1
> then1:
> push fp[-5]
> store-into fp[-11]
> push fp[-4]
> store-into fp[-10]
> push 0
> push fp[-3]
> store-into fp[-9]
> push 1
> push 0
> store-into fp[-8]
> push 1
> store-into fp[-7]
> ret
> else1:
> push fp[-6]
> store-into fp[-11]
> push fp[-5]
> store-into fp[-10]
> push fp[-4]
> store-into fp[-9]
> push 2
> push fp[-3]
> store-into fp[-8]
> push 2
> store-into fp[-7]
> ret
> }
>
> @main: {
> % Stack relative to frame pointer:
> % -6 #return.2
> % -5 #return.1
> % -4 #return.0
> % -3 @old_pc
> % -2 @old_fp
> % -1 @old_sp
> % -5 #return.2
> % -4 #return.1
> % -3 #return.0
> % -2 @old_pc
> % -1 @old_fp
> % 0 x
> % 1 y
> % 2 z
Expand Down Expand Up @@ -251,11 +246,11 @@ let f3 = (f 3) 2 in
> sp-sub 4
> store-into fp[8]
> push fp[8]
> store-into fp[-6]
> push fp[7]
> store-into fp[-5]
> push fp[6]
> push fp[7]
> store-into fp[-4]
> push fp[6]
> store-into fp[-3]
> ret
> }

Expand Down

0 comments on commit fd08111

Please sign in to comment.